markus wrote:
> PORTB=(1<<PB0)|(1<<PB1); dies setzt mir PB0/1 ohne das ganze
> Register zu verändern ?
Nein. Es setzt das Register ausschließlich auf Bits 0 und 1 (also
0x03). Alle anderen Bits werden gelöscht.
> PORT &= ~(1<<PB2); so kann ich den PB2 löschen, ohne den ganzen Port
> zu manipulieren ?
Ja.
> Was bedeutet das den "ausgeschrieben" dieses | und <<
| ist ein bitweises ODER, das Ergebnis ist also sowas wie die
,,Bitsumme'': alle Bits, die in einem der beiden Operanden gesetzt
waren, werden auch im Ergebnis gesetzt.
& ist ein bitweises UND, im Ergebnis werden nur die Bits gesetzt, die
in beiden Operanden gesetzt sind. Anders gesagt, es werden alle Bits
gelöscht, die in einem der beiden Operanden gelöscht sind (das erklärt
die Komplementär-Funktion zum ODER).
<< ist der Linkschiebe-Operator. Wenn man eine 1 um n bits nach links
schiebt, erhält man eine Zahl, in der das n-te Bit (Zählung beginnt
bei 0) gesetzt ist. Man wandelt eine Bitnummer damit in eine Bitmaske
um.
Denk dran, dass in C die Schreibweise "foo #= bar" eine Kurzform für
"foo = foo # bar" ist, wobei # einer der Operatoren +, -, *, /, %, &,
|, oder ^ sein kann. (Ich hoffe, ich habe keinen vergessen. ;-)
ist also weiter nichts als
1 | PORTB = PORTB & ~(1 << PB2)
|