C-Frage / Watchdog-Beispiel Tiny85

OP #5430606
Lesenswert?

Liebe alle,

ich mach gerade ein bisschen ASM/C (wegen Arduino-Zeugs) und stolpere 
über diese Notationen "0<<irgendwas"

Auszug aus dem Datenblatt des Tiny85, Kapitel 8.4.2 ASM Code example:
1
...
2
; Write logical one to WDCE and WDE
3
; Keep old prescaler setting to prevent unintentional Watchdog Reset
4
in
5
 r16, WDTCR
6
ori
7
 r16, (1<<WDCE)|(1<<WDE)
8
out
9
 WDTCR, r16
10
; Turn off WDT
11
ldi
12
 r16, (0<<WDE)
13
out
14
 WDTCR, r16
15
ret

Wie sollen diese letzten 4 Zeilen funktionieren um ein einzelnes Bit auf 
0 zu setzen? Also was bedeutet "ldi r16, (0<<WDE)" ? Ist das ein Fehler 
im Datenblatt oder habe ich es nicht verstanden? Denn eigentlich sollen 
die oben mühsam erhaltenen prescaler-Bits ja weiterhin erhalten bleiben, 
oder?
Gast #5430656
Lesenswert?

> Also was bedeutet "ldi r16, (0<<WDE)" ?
Es soll klar&deutlich gemacht werden, dass WDE auf 0 gesetzt, also der 
Watchdog abgeschaltet wird; die alten Vorteiler-Bits sind so natürlich 
vergessen.
Gast #5430762
Lesenswert?

Okay.
Und für eventuelle Mitleser sei die Datenblattstelle nachgereicht:

1. In the same operation, write a logic one to WDCE and WDE. A logic one 
must be written to WDE regardless of the previous value of the WDE bit.
2. Within the next four clock cycles, in the same operation, write the 
WDE and WDP bits as desired, but with the WDCE bit cleared.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren