Forum: Mikrocontroller und Digitale Elektronik C-Frage / Watchdog-Beispiel Tiny85


von Rainer U. (r-u)


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?

: Bearbeitet durch User
von H.Joachim S. (crazyhorse)


Lesenswert?

Die schreiben ne 0 nach WDTCR (soweit ich mich erinnere ist das auch 
richtig).
Die Schreibweise (0<<WDE) bringt natürlich nichts. Bestimmt aus 
irgendetwas kopiertem übriggeblieben :-)

von S. Landolt (Gast)


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.

von Markus F. (mfro)


Lesenswert?

S. Landolt schrieb:
>> 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.

Das schriebe man dann aber eigentlich explizit als
1
"andi r16, ~(1 << WDE)"

von S. Landolt (Gast)


Lesenswert?

Sicher nicht - im ersten Fall wird r16 mit 0 geladen, im zweiten mit $F7 
ver-undet.

von Markus F. (mfro)


Lesenswert?

S. Landolt schrieb:
> Sicher nicht - im ersten Fall wird r16 mit 0 geladen, im zweiten mit $F7
> ver-undet.

Ach was?

von S. Landolt (Gast)


Lesenswert?

Markus F. schrieb:
> S. Landolt schrieb:
>> Sicher nicht - im ersten Fall wird r16 mit 0 geladen, im zweiten mit $F7
>> ver-undet.
>
> Ach was?

Gewiss - und im ersten Fall wird der Watchdog abgeschaltet, im zweiten 
eben nicht.

von Markus F. (mfro)


Lesenswert?

ich bin - nach Lektüre - überredet.

von S. Landolt (Gast)


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.

von Rainer U. (r-u)


Lesenswert?

H.Joachim S. schrieb:
> Die Schreibweise (0<<WDE) bringt natürlich nichts. Bestimmt aus
> irgendetwas kopiertem übriggeblieben :-)

Das beruhigt mich :-)

Danke auch für die anderen Beiträge.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.