Danke, dann schreib' ich das Programm um.
edit: Habe Schwierigkeiten, das zu realisieren. Bin eben noch sehr unerfahren, was den Stack angeht.
Also ein Flowchart habe ich schonmal angefertigt. Mit dem Quellcode klappt das alleridngs noch nicht.
Bild hier
Der uC befindet sich zunächst in einer Endlosschleife. Im Interrupthandler vom Timer0 (Label timer) wird dann mit sbic abgefragt, ob die LED an ist. Wenn nicht, springt der uC zum Label LEDon. Dort wird die LED angemacht. Danach kehrt der uC ja aber wieder zurück zum Label timer. Dort steht leider der Befehl sbis, nach welchem der Sprung zu LEDoff steht.
Wie verhindere ich also, dass der uC nicht nach LEDoff springt, wenn er im selben Durchlauf schon in LEDon war?
edit²: Habe das jetzt so gelöst.
Ist das programmiertechnisch und stilistisch richtig?Code:include "m8def.inc" .def temp = r16 .def oldStatus = r17 .org 0x000 rjmp main ; Reset Handler .org OVF0addr rjmp timer ; Timer0 Handler main: ldi temp, HIGH(RAMEND) out SPH, temp ldi temp, LOW(RAMEND) out SPL, temp sbi DDRD, PD5 cbi DDRD, PD2 ldi temp, 0b00000001 out TCCR0, temp ldi temp, 0b00000001 out TIMSK, temp sei cbi PORTD, PD5 loop: rjmp loop timer: sbic PORTD, PD5 rjmp LEDoff sbi PORTD, PD5 reti LEDoff: cbi PORTD, PD5 reti







Zitieren

Lesezeichen