Fråga om #define i h-filen till ATMega48

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
StRob
Inlägg: 167
Blev medlem: 15 maj 2007, 09:30:47
Ort: Karlstad

Fråga om #define i h-filen till ATMega48

Inlägg av StRob »

Hur gör jag för att skriva till en BIT i ett register, i detta fall INTF0 i EIFR?
Det jag är ute efter är alltså att kunna skriva INTF0 = 1; (för att cleara flaggan manuellt.) men det köper inte AVR GCC.
i iom48p.h (som är included) står det:

#define EIFR _SFR_IO8(0x1C)
#define INTF0 0
#define INTF1 1

Betyder inte bara det att när du skriver INTF0 så blir det bara värdet 0?
Jag vill även att det ska fundera med:
i = PIND3; //Förutsatt att i är deklarerat som en bit.
Och det sistnämnda har jag haft fungerande förut i annan µC och annan compilator (annan h-fil) (minns inte vilka).
Hur gör jag?
Jag antar att det är h-filen som skall ändras för att få det att funka. Hur har författaren av h-filen tänkt sig att man skall skriva för att använda:
#define PIND _SFR_IO8(0x09)
#define PIND0 0
#define PIND1 1
#define PIND2 2
#define PIND3 3
#define PIND4 4
#define PIND5 5
#define PIND6 6
#define PIND7 7
tex?
eqlazer
Inlägg: 923
Blev medlem: 22 september 2007, 13:53:45
Ort: Göteborg

Re: Fråga om #define i h-filen till ATMega48

Inlägg av eqlazer »

EIFR |= (1<<INTF0);
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Fråga om #define i h-filen till ATMega48

Inlägg av sodjan »

EIFR.INTF0 = 1 (?).

En snabb Google på "AVR GCC bit operations" hav massor av länkar.
T.ex : http://www.avrfreaks.net/index.php?name ... ic&p=40351
Se även : http://elektronikforumet.com/forum/view ... 87&start=0
StRob
Inlägg: 167
Blev medlem: 15 maj 2007, 09:30:47
Ort: Karlstad

Re: Fråga om #define i h-filen till ATMega48

Inlägg av StRob »

EIFR |= 1<<INTF0; Fungerar ju fint, men trodde inte det skulle behöva vara så "jobbigt". och det är ju så himla lättläst med direkt adressering.
Det var nog för PIC och CC5X som jag bara kunde skriva PB7=1 eller liknande. Minns inte exakt, men det vara bara att adressera direkt iaf.. Saknar det :(

EIFR.INTF0 = 1; Fungerar inte. "error: expected identifier before numeric constant" Vad är identifier?

Om man ska använda macros (som beskrivs i den översta länken som Sodjan tipsade om), var skriver man dem? I sin C-fil eller i någon H-fil?

Har ni något bra tips om någon bra lista med "programmeringsregler" för C om vad som anses praxis och kutym vad gäller upplägg pådeklarationer, variabler, exempel på "försnacket" till rutiner ska se ut, är det ok att använda goto (har fått uppfattningen att det är en delad skola hurvida det är ok eller inte) osv?
Användarvisningsbild
mri
Inlägg: 1165
Blev medlem: 15 mars 2007, 13:20:50
Ort: Jakobstad, Finland
Kontakt:

Re: Fråga om #define i h-filen till ATMega48

Inlägg av mri »

Angående prxis och kutym kan du kanske hitta nåt i comp.lang.c Frequently Asked Questions. http://c-faq.com/
Angående goto tycker jag att man kan använda goto om det gör koden elegantare och enklare att förstå. Undvik dock att använda goto på samma sätt som i BASIC, dvs överallt.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Fråga om #define i h-filen till ATMega48

Inlägg av sodjan »

StRob
Inlägg: 167
Blev medlem: 15 maj 2007, 09:30:47
Ort: Karlstad

Re: Fråga om #define i h-filen till ATMega48

Inlägg av StRob »

Väcker lite liv i den här tråden igen då jag måste förtydliga det lite..
Varför är iom48p.h skriven på detta sätt:

Kod: Markera allt

#define PORTB _SFR_IO8(0x05)
#define PORTB0 0
#define PORTB1 1
#define PORTB2 2
#define PORTB3 3
#define PORTB4 4
#define PORTB5 5
#define PORTB6 6
#define PORTB7 7
istället för:

Kod: Markera allt

#define PORTB _SFR_IO8(0x05)
#define PORTB0 1
#define PORTB1 2
#define PORTB2 4
#define PORTB3 8
#define PORTB4 16
#define PORTB5 32
#define PORTB6 64
#define PORTB7 128
Och istället för att skriva PORTB |= (1<<RORTB5) då skriva PORTB |= PORTB5 för att sätta bit 5, och PORTB &= ~(1<<PORTB5) skriva PORTB &= ~PORTB5 för att cleara bit 5?
Jag antar att det finns en bra anledning?
Användarvisningsbild
Micke_s
EF Sponsor
Inlägg: 6741
Blev medlem: 15 december 2005, 21:31:34
Ort: Malmö

Re: Fråga om #define i h-filen till ATMega48

Inlägg av Micke_s »

Tror det mest beror på om man vill skriva inline assembler alt stora delar i gas (gnu assembler). det är samma headerfil man använder.
T.ex. sätta en pinne heter sbi i assembler
den har formatet sbi PORT, pin där pin är mellan 0 och 7.
Johanb
Inlägg: 3406
Blev medlem: 26 mars 2006, 22:26:12
Ort: Smedjebacken

Re: Fråga om #define i h-filen till ATMega48

Inlägg av Johanb »

EIFR.INTF0 = 1; betyder väl att INTF0 skulle vara en medlem av structen EIFR vilken mig veterligen inte finns i avr-libc?
Skriv svar