Achso,
ich hab halt das Problem, dass mein Programm nach dem "reti" Befehl im Unterprogramm "rechts" wieder zum Programmstart zurückspring,
also nach "0x0000" und nicht da weiter macht wo es beim IRQ aufgehört hat,
sprich in der loop-Schleife.
Und da dachte ich, dass dem Programm beim zurückspringen die Rücksprungadresse fehlt, weil der Stack nicht initialisiert ist.
An was kann das noch liegen dass mein Programm nach dem "reti" Befehl immer wieder von vorne beginnt?![]()
Hier ist mal mein Programm:
Das Programm ist dazu da, um den Blinker beim Auto dreimal aufleuchten zu lassen, wenn man den Blinkhebel antippt.Code:include "tn12def.inc" .def temp = r16 .def temp2 = r17 .def k = r18 .def i = r19 .org 0x0000 rjmp main .org OVF0addr rjmp sprungziel main: ldi temp, 0b00000110 ;Portb.1 u. 2 als Eingang / out DDRB, temp ;Portb.1 u. 3-5 als Ausgang ldi temp, 0b00000000 ;Portb initialisieren out PORTB, temp ldi temp, 0b00000000 ;Timer0 Stop out TCCR0, temp ldi temp, 0b00000010 ;Timeroverflow Interrupt Ein out TIMSK, temp ldi i,0 ;Register auf 0 setzen sei loop: in temp2, PINB ;Taster betätigt? cpi temp2, 0b00001000 breq rechts rjmp loop sprungziel: ;sprungziel ermitteln cpi i, 3 breq ende cpi k, 1 breq rechts1 cpi k, 2 breq rechts2 rechts: ldi temp, 0b00000001 ;Timer 0 Start out TCCR0, temp ldi k, 1 reti rechts1: ldi temp, 0b00000100 ;Blinker Ein out PORTB, temp ldi k,2 reti rechts2: ldi temp, 0b00000000 ;Blinker Aus out PORTB, temp ldi k,1 inc i reti ende: ldi temp, 0b00000000 ;Timer0 Aus (Ende Blinkzyklus) out TCCR0, temp rjmp loop
Wäre euch dankbar wenn ihr mir weiterhelfen köntet!![]()







Zitieren

Lesezeichen