Komma åt I/O pinnar från program med flera källfiler
Postat: 3 februari 2009, 19:52:35
Jag har tittat lite på hur man skriver relocatable kod och försökt skriva om lite gammal kod jag hade liggandes för att kunna används i någon sorts personligt kod bibliotek. Tanken är att man bara ska kunna lägga till filen i projektet och använda funktionerna direkt. Det har faktiskt fungerat riktigt bra men när jag skulle skriva om en LCD (HD44780) kod stötte jag på patrull.
Det hela handlar om att när jag ska skriva något till LCDn lär jag ju sätta E, R/W, RS hög eller låg lite beroende på vad som skall utföras. Problemet jag har är att jag inte kommer åt dessa pinnar från min funktion (som alltså ligger i en annan fil än huvudprogrammet). Finns det något bra sätt att komma runt det?
Problem nummer två är ju att det inte är speciellt praktiskt att ha tex bcf PORTB, RC7 (E=RC7) på tio olika ställen i koden. Ska man ha någon typ av generell kod borde man ju bara behöva ändra pinne på ett ställe. Så jag tog en titt på macron (har aldrig använt macron tidigare) och tyckte att det här vore ju en vettig lösning. Men det gick inge vidare det heller. Jag tänkte mig något i stil med följande.
Macro:
All ligger in en *.inc fil som jag sen inkluderar i huvudprogrammet. Men även här kommer jag inte åt PORTB. Tänker jag helt fel här eller hur ska man göra?
Jag har även funderat över något med #define (se nedan) men inte lyckats implementera det i min externa fil. Jag har inte använt det tidigare heller, med det faller ju även det på att jag inte kommer åt PORTB i min externa fil.
#define:
Jag skulle vara tacksam för något tips eller input då det känns som jag kört fast. Det är föresten en pic18f458 jag använder.
Det hela handlar om att när jag ska skriva något till LCDn lär jag ju sätta E, R/W, RS hög eller låg lite beroende på vad som skall utföras. Problemet jag har är att jag inte kommer åt dessa pinnar från min funktion (som alltså ligger i en annan fil än huvudprogrammet). Finns det något bra sätt att komma runt det?
Problem nummer två är ju att det inte är speciellt praktiskt att ha tex bcf PORTB, RC7 (E=RC7) på tio olika ställen i koden. Ska man ha någon typ av generell kod borde man ju bara behöva ändra pinne på ett ställe. Så jag tog en titt på macron (har aldrig använt macron tidigare) och tyckte att det här vore ju en vettig lösning. Men det gick inge vidare det heller. Jag tänkte mig något i stil med följande.
Macro:
Kod: Markera allt
;Sätt E hög
E_high macro
bsf PORTB,RB5
endm
Jag har även funderat över något med #define (se nedan) men inte lyckats implementera det i min externa fil. Jag har inte använt det tidigare heller, med det faller ju även det på att jag inte kommer åt PORTB i min externa fil.
#define:
Kod: Markera allt
#define E PORTB,RC7 ; Kontrollerar E