Jepp, fast so hatte ich es auch gelöst, nur daß bei mir nix ausser einem Port-Pin wackelt:
Code:
; Hier für AT90S8515, AT90S1200, ...
/*
Die Register (GPRs) werden durch einen RESET nicht zurückgesetzt, sondern behalten ihre Inhalte!
Wirklich schwer wird es, wenn man mit VCC runter geht, weil sich dann die WDT-Zeiten ändern. Mit 0.19s (VCC=3V) käme man auf 5% Fehler, aber den Vergleich auf 5 (bzw. modulo 5) hab ich nicht in weniger als 10 Instruktionen geschafft.
Noch nicht... ;-)
*/
#include <avr/io.h>
#define _IO(x) _SFR_IO_ADDR(x)
.text
; #1: PortB.2 als Ausgang
sbi _IO (DDRB), 2
; #2-#4: Toggle PortB.2
inc r0
sbrs r0, 1
sbi _IO (PORTB), 2
; #5-#6: WatchDog auf 0.49 Sekunden scharf machen (genauer als 0.97s)
ldi r16, (1 << WDE) | (1 << WDP2) | (1 << WDP0)
out _IO (WDTCR), r1
; #7: Warten, bis es wieder los geht (WatchDog-Reset)
0:
rjmp 0b
Lesezeichen