Hallo zusammen,
ich bin echt am verzweifeln.
Folgendes Problem.
Ich will in der TimerInterruptrutine einen Vergleich durchführen. 
Abhängig von dem Vergleich will ich in eine jeweils andere Schleife 
springen. Das Problem hierbei ist, dass wenn ich das Programm so wie es 
ist laufen lasse die LEDs an PortB blinken, so wie ich es mir vorstelle. 
Wenn ich jetzt jedoch in der Schleife a1 unten den Befehl reti mit rjmp 
a1 ersetze, bleibt mir der Timer hängen und springt nicht mehr in 
Schleife a2. Anderst herum genau das gleiche, wenn ich in Schleife a2 
reti mit rjmp a2 ersetze bleibt mir das Programm auch hängen.
Ich weiß, dass das Programm so keinen Sinn macht und man die Sache 
einfacher realisieren könnte. Es ist lediglich ein Auszug aus einem 
Programm um mein Problem zu spezialisieren.
Das Programm(ich hoffe ich habe es ausreichend kommentiert):
.include "tn2313def.inc"
.def temp = r16
.org 0x0000
        rjmp    main                  ; Reset Handler
.org OVF0addr
        rjmp    timer0_overflow       ; Timer Overflow Handler
main:
        ldi     temp, LOW(RAMEND)
        out     SPL, temp
        ldi     temp, 0xFF            ; Port B auf Ausgang
        out     DDRB, temp
        ldi     temp, 0b00000101       ; Timerinterrupt--> Teiler 1024
        out     TCCR0, temp
        ldi     temp, (1<<TOIE0)      ; TOIE0: Interrupt bei Timer 
Overflow
        out     TIMSK, temp
        sei
loop:
rjmp loop
timer0_overflow:                        ; Timer 0 Overflow Handler
    ldi r19, 0b00000001
    add r18, r19    ;Register r18 + 1
    cpi r18, 0b00000001  ; Vergleiche r18 mit 1
    breq a1      ; gehe zu a1, wenn gleich
    cpi r18, 0b00000010  ; Vergleiche r18 mit 2
    breq a2      ; gehe zu a2, wenn gleich
a1:
ldi r16, 0b00000111
out PortB, r16        ; r16 an PortB ausgeben
reti
a2:
ldi r16, 0b11000000      ; r16 an PortB ausgeben
out PortB, r16
ldi r18, 0b00000000      ;r18 auf 0 zurücksetzen
reti