Register ansprechen

Gast #791521
Lesenswert?

hallo!

hab da mal eine grundsätzliche frage:

warum funktioniert while((PIND & (1<<PIND2))){};

aber das while(((PIND2)==1)){}; und das while((PIND&0x02)==1)){}; 
nicht??

er soll solange in der while-schleife bleiben, bis sich PD2 geändert auf 
0 hat. warum sind die beiden nicht gleichwertig? ich hoffe mal ich hab 
mich da jetzt nirgends verschrieben.

danke schon im vorhinein
Gast #791528
Lesenswert?

> while((PIND & (1<<PIND2))){};
Wartet so lange, wie das dritte Bit (PIND2 = 2, Zählung von Null an) im 
Register PIND gesetzt ist.


> while(((PIND2)==1)){};
Wartet so lange, wie die Konstante PIND2 den Wert 1 hat. PIND2 ist mit 
dem Wert "2" definiert. (PIND2 ist niemals == 1)


> while((PIND&0x02)==1)){};
Wartet so lange, wie im konstanten Wert von PIND2 (=2) das zweite Bit 
gesetzt ist. (PIND2 hat immer das zweite Bit gesetzt)
#791566
Lesenswert?

spyder wrote:

> aber das while(((PIND2)==1)){}; und das while((PIND&0x02)==1)){};

PIND ist das 8 Bit Register.
   xxxx xx0x

Jetzt geht der Pin 1 von 0 auf 1

   xxxx xx1x

den du auch korrekt mit der 0x02 ausmaskierst ( dh. alle
anderen Bits werden auf 0 gesetzt

   0000 0010

Nur: Das ist die Zahl 2 die da heraus kommt.
Da kannst du lange warten, bis das mal zu 1 wird.

  while( PIND & ( 1 << PIND1 ) )

bedeutet ja: solange das Ergebnis nicht 0 ist. Da wird nicht
explizit gefordert, dass es 1 sein muss. Jede andere Zahl, zb
auch 2, genügt, damit es nicht 0 ist.

Merke: Nicht 0 heist ja nicht, dass eine 8 Bit Zahl deswegen
genau 1 sein muss.
Gast #792094
Lesenswert?

danke für die erklärungen.

ich hab mir gedacht, dass ich mit PIND2 direkt den wert des 3. bits 
auslesen kann. und bei while((PIND&0x02)==1)){}; hab ich blöderweise 
nicht berücksichtigt, dass man ja von null wegzählt.
also ist es meines wissens nach nicht möglich den wert eines bestimmten 
pins direkt auszulesen (also ohne maskierungen). Stimmt das?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren