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:

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
Das Programm ist dazu da, um den Blinker beim Auto dreimal aufleuchten zu lassen, wenn man den Blinkhebel antippt.

Wäre euch dankbar wenn ihr mir weiterhelfen köntet!