Peder schrieb:
>
1 | if ((PORTA.IN & 0b00000011) == 0b00000011) {}
|
> Mir gefiele aber eine Schreibweise mit PIN0_bm und PIN1_bm mehr. Gibt es
> da eine?
sicher.
0b00000011 ersetzt du an allen vorkommenden Stellen durch deine
Schreibweise mit PIN0_bm | PIN1_bm
Wichtig: an ALLEN vorkommenden Stellen.
Es reicht dann eben nicht mehr, wenn nach der Verundung etwas ungleich 0
rauskommt, sondern es muss eben genau rauskommen, dass PIN0 und Pin1
gesetzt sind.
1 | if ( (PORTA.IN & (PIN0_bm | PIN1_bm)) == (PIN0_bm | PIN1_bm) ) {}
|
was dich wahrscheinlich ins Boxhorn getrieben hat, das ist die Operator
Precedence (also die Vorrangregeln für Operatoren wie zb & | oder auch
==). Wenn man die nicht komplett auswendig kennt (und wer kennt schon
alle), dann setzt man eben Klammern.
Kann natürlich auch sein, dass dein eigentliches Problem darin besteht,
dass dir nicht klar ist, was die Binäroperationen eigentlich machen und
was uns das Ergebnis so einer Binäroperation alles erzählt.
Wenn man einfach nur auswendig gelernt hat, dass ein Pin so abgefragt
wird
1 | if( PORTA.IN & PinMask )
|
und sich nie überlegt hat, warum man da eigentlich ein & schreibt, was
das macht und was das Ergebnis davon ist, bzw. einem nicht klar ist, wie
ein if funktioniert, dann steht man eben da wie der Ochs vorm Tor.