So wird das Programm noch nicht funktionieren:
Man kann nicht einfach aus dem Interrupt ins Hauptprogramm springen. Dadurch läuft der Stack über, und ein Sleep-Befehl mit gelöschtem Interrupt Bit dürfte eine Sackgasse sein. Der Befehl rjmp loop ; Schlafen legen , ist einfach zu viel - für den sleep Mode ist das Hauptprogramm zuständig.
Auch sonst stimmt da wohl was noch nicht ganz. Die LED wird am Ende nur ganz kurz eingeschaltet unter LEDon.
In de ISR sollte man zu erst das Status Register retten und am ende auch wieder Herstellen. Das gleiche gilt für Register die in der ISR und dem Hauptprogramm verändert werden. Hier geht es ausnahmsweise wohl ohne, weil das Hauptprogramm effektiv nichts macht.
In ASM sollte man sich um etwas mehr Lesbarkeit bemühen. Es wird auch einfacher wenn man ein Unterprogramm hat, für eine definierte Wartezeit von z.B. 1 ms oder 10 ms oder auch N (in einem Register) ms. Dann muss man nicht jede Wartezeit von Grund auf aufbauen.
Lesezeichen