PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : "sbit"-Funktion



surfer
18.07.2005, 07:52
Von meinem Schulungs-uC 80C537 kenne ich die Funktion "sbit", die mir die Möglichkeit für "Port (oder Pin) Shortcut's" gibt.
Ich möchte diese auch für meinen Atmel nutzen und habe etwas gefunden, weiss jedoch nicht ob das so funktioniert. (Habe momentan keine Möglichkeit mit uC zu testen...)
Es geht um eine Bedienung mit je 3 Tasten links und rechts von einem Display. Ich möchte 6 Shortcuts haben. z.B. L1,R1,L2,R2, etc.
Könnt ihr mir sagen, ob das mit dem Programm unten läuft? Danke!!



unsigned int L1,L2,L3,R1,R2,R3;

int main(void)
{
DDRA=0x00;
L1=~(PINA&0x01);
L2=~(PINA&0x02);
L3=~(PINA&0x04);
R1=~(PINA&0x08);
R2=~(PINA&0x10);
R3=~(PINA&0x20);

while(1)
{
if(L1)
mach irgendwas;

if(L2)
mach irgendwas anderes;

if(etc.).......

}

}[/code]

PicNick
18.07.2005, 08:09
L1 = ~(PINA & 0x01) heißt ja
L1 = 0xFE oder
L1 = 0xFF
das wäre IMMER >0
????

wenn du das bit-0 in PINA abfragen willst,
müßtestdu das mit "define" festlegen

#define L1 (PINA & 0x01)
etc.

dann wäre if (L1) ===> if ( PINA & 0x01)

oder du willst ganz was anderes, und ich hab's nicht verstanden

surfer
18.07.2005, 08:17
Hallo PicNick

Danke vielmals... aha. define. OK.
Genau das wollte ich wissen!

Danke!

SprinterSB
18.07.2005, 08:18
So wird's nicht laufen.
Du musst zumindest L1-L3 und R1-R3 in die while-Schleife ziehen.
Und Entprellen willst du wahrscheinlich auch.
Oder defines als Abkürzung, wie PicNick schreibt:
Für low-aktive Sschalter
#define L1 (!(PORTA & 0x01))

ZUm setzen von Bits geht einfach
PORTA |= 0x08; // setzt bit 3
Dein Compiler sollte daraus die passende asm- Instruktion generieren, hier sbi.
Zum Löschen eines Bits:
PORTA &= ~0x08;

Kjion
18.07.2005, 10:24
#define L1 (!(PORTA & 0x01))

Oder besser lesbar als:

#define L1 (bit_is_clear(PORTA, 1))

MfG Kjion