-
-
Als sehr einfach zu realisierende "Pi-mal-Daumen"-Zeitbasis, an die keine hohe Präzisionsforderung gestellt wird,
ist der WD-Timer sehr gut geeignet. Die anderen Timer bleiben dann anderweitig nutzbar.
Für die Attinys u.A. geht das auch ganz simpel:
Config watchdog = 8000 'nach meiner Erfahrung läuft der wd-Timer damit schon los, auch ohne "start"-Befehl
Set Wdtcr.wdie 'wd in Interrupt-Modus versetzen, statt reset-Modus
If Wdtcr.wdif = 1 Then 'zeitintervall abgelaufen
set Wdtcr.wdif ' das wdif-flag sofort wieder löschen, indem man es setzt
Incr wd_tick
end if
Damit wird die Zählvariable "wd_tick" jedesmal wenn das wdif-flag gesetzt wird incrementiert,
und das wdif_flag bis nach Ablauf des nächsten Zeit-Intervalls zurückgesetzt,
ohne dass man eine WD-Interruptroutine aufrufen bzw. ausführen muss. (= Polling)
Zu beachten ist, dass das vom Timer gesetzte wdif-flag dadurch gelöscht wird, dass man es setzt(!),
also mit einer 1 beschreibt, obwohl es schon gesetzt ist.
Man braucht hierbei auch keine 4-Takte-Sequenz einhalten, wie oft irrtümlich geschrieben wird.
Dieses einfache Polling des Interrupt-Flags geht auch bei anderen Timern oder anderen Interruptquellen, wenn man die zeitraubenden Pushs und Pops der Interruptroutinen vermeiden will.
Geändert von stemmy (20.02.2022 um 13:39 Uhr)
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- Anhänge hochladen: Nein
- Beiträge bearbeiten: Nein
-
Foren-Regeln
Lesezeichen