Pierre Gnauck schrieb:
> if (var==0b10000000)
Gewöhn dir das ab.
WEnn du wissen willst, ob das Bit 7 gesetzt ist, dann schreibst du das
so
if( var & ( 1 << 7 ) )
oder
if( var & 0x80 )
oder
if( var & 0b1000000 )
aber auf keinen Fall vergleichst du mit dem Bitmuster. Denn wenn du das
tust, dann MÜSSEN die restlichen Bits, an denen du unter Umständen noch
nicht mal irgendwas angeschlossen hast, oder die vielleicht sogar auf
Ausgang geschaltet sind, alle 0 sein.
Und darum willst du dich nicht kümmern müssen. Dich interessiert nur das
Bit 7 und sonst nichts. An diesem Bit hängt dein Taster und nur den
wertest du aus, indem du dir dieses Bit freimaskierst.
if( var & ( 1<<7 ) )
ist die bevorzugte Schreibweise, weil in dieser Schreibweise unmittelbar
ersichtlich ist, das dich das Bit 7 interessiert. Das verhindert dann
auch ganz zwanglos, dass du dich bei der Binärkonstanten 0b1000000 in
der Anzahl der 0-ern verzählst. Oder hast du beim Lesen gemerkt, dass
ich in dieser Binärkonstanten das 1-Bit nicht an der Position 7 sondern
an der Position 6 hatte? Den Unterschied zwischen 0b1000000 und
0b10000000 bemerkt man nur dann, wenn man sehr sehr sehr genau schaut.
Den Unterschied zwischen 1<<7 und 1<<6 kann ein Blindenhund auf 20 Meter
Entfernung sehen. Und doch sind beides einfach nur 2 verschiedene
Schreibweisen für dasselbe Bitmuster.
> int main(void)
> {
> DDRB = 0xFF;
> DDRD = 0x00;
>
>
> while (1)
> {
> foo = PIND;
Wie sind deine Eingangspins verschaltet?
Üblich ist, dass man einen Taster so verschaltet, dass er den Pin mit 0
verbindet, wenn man auf den Taster drückt. Denn dann kann man den
internen Pullup Widerstand benutzen und braucht keinen externen
Pulldown.