> µC Anfänger schrieb:
>
>> if(PIND & (1<<PD0) == 1)
Im übrigen solltest du von derartigen expliziten Vergleichen Abstand
nehmen. Man schiesst sich zuleicht damit ins Knie.
In C ist weniger oft mehr. Nachdem du das entsprechende Bit mit dem &
ausmaskiert hast, willst du nur wissen ob das Ergebnis 0 oder nicht 0
ist (denn dann ist das Bit gesetzt). Der springende Punkt ist, dass es
dich ja im Grunde gar nicht interessiert, welche Zahl sich ergibt, wenn
das Bit 3 gesetzt ist. Du weisst, dass nach dem ausmaskieren nur
entweder 0 übrig bleibt (wenn das Bit auf 0 war) oder eben nicht 0 (wenn
das Bit auf 1 war). Aber welche Zahl das genau ist, ist dir ja
eigentlich egal.
Du könntest natürlich schreiben
1 | if( ( PIND & (1 << PD3) ) == (1 << PD3) )
|
aber eigentlich willst du das nicht wirklich. Da in C jedes Ergebnis
ungleich 0 automatisch auch als logisch TRUE gilt, kannst du ganz
einfach schreiben
1 | if( PIND & (1 << PD3) )
|
und gut ists. Ein if verlangt keinen Vergleich. Ein if verlangt einen
Ausdruck (welcher auch immer das ist) und es bewertet das Ergebnis
dieses Ausdrucks. Ist das Ergebnis 0, dann gilt das als logisch FALSE.
Ist es ungleich 0, dann ist es logisch TRUE.
Willst du wissen, ob das Bit auf 1 ist, dann kannst du zb schreiben
1 | if( ( PIND & (1 << PD3) ) == 0 )
|
aber einfacher ist diese Variante
1 | if( !( PIND & (1 << PD3) ) )
|
Beachte: In diesem Fall ist ein Vergleich auf explizit 0 eben nicht ca.
fast dasselbe wie ein Vergleich auf explizit 1, nur mit anderem
Zahlenwert. Denn wenn du auf eine Zahl vergleichst, dann muss auch genau
diese Zahl rauskommen, damit der Vergleich TRUE ergibt. Maskierst du
aber lediglich 1 Bit aus einem 8 Bit Wert aus, dann ist das Ergebnis
nicht notwendigerweise 1, wenn das entsprechende Bit auf 1 ist. Je nach
Bit ergeben sich da auch andere Zahlen. Und spätestens dann wird das
mühsam. Daher: Lass den expliziten Vergleich weg. Das das Ergebnis nach
der & Maskierung ungleich 0 reicht völlig aus. Du musst nicht fordern,
dass es 1 sein muss.
In C ist weniger eben oft mehr.