Hi,
wie Du schon richtig erkannt hast, liefert bit(PRTIM1) den Wert 8 zurück.
Darüber, dass Bit 3 im Register PRR dann 8 sein soll, musste ich in der Tat etwas schmunzeln...
Ein Bit kann nämlich nur den Wert 0 oder 1 annehmen.
Zur Erklärung stellt man am besten den Wert 8 als 8-stellige Binärzahl dar (8-Stellig, weil das Register 8 Bit groß ist):
0b00001000
Dabei steht die 0 ganz links für das Bit 7 (PRTWI) und die 0 ganz links für das Bit 0 (PRADC).
Demnach wird also mit dem Befehl
PRR = bit(PRTIM1) das Bit PRTIM1 im Register PRR auf 1 gesetzt und alle anderen Bits des Registers auf 0.
Der Befehl
ADCSRA &= ~ bit(ADEN)
ist etwas komplizierter. Fangen wir zunächst wieder mit bit(ADEN) an: das gibt den Binärwert 0b10000000.
Die Tilde (~) ist ein Operator, der das Einerkomplement der Binärzahl bildet. Anders gesagt: aus 0 wird 1 und aus 1 wird 0.
Damit erhalten wir für ~bit(ADEN) 0b01111111.
Nun zum Operator &=
Hierbei handelt es sich um eine Kurzschreibweise. ADCSRA &= x; ist dasselbe wie ADCSRA = ADCSRA & x;
Setzt man alles zusammen erhält man ADCSRA = ADCSRA & 0b01111111;
Das Ergebnis der Operation ist, dass nur das Bit 7 (ADEN) auf 0 gesetzt wird und ansonsten jedes Bit des Registers so bleibt, wie es ist.
bitSet(PRR, PRADC); hast Du ja schon richtig interpretiert.
Gruß,
askazo
Lesezeichen