Hallo zusammen,

Ich hab mich in der letzten Tagen mit dem Ansprechen der Timer/Counter im Atmega 32 beschäftigt.

Dazu wollte ich zum Ausprobieren mithilfe des Timer/Counter0 den PortA in kurzen Abständen,
nach jedem Zählerüberlauf An- und Auschalten.

Hierzu habe ich den folgenden Programmcode von microcontroller.net verwendet
und lediglich die Includedatei für meinen AVR geändert und den Ausgabeport auf "PORTA" umgeschrieben:

Code:
.INCLUDE "C:\Programme\Atmel\AVR Studio\Appnotes\m32def.inc"
 
.def temp = r16
.def leds = r17
 
.org 0x0000
        rjmp    main                  ; Reset Handler
.org OVF0addr
        rjmp    timer0_overflow       ; Timer Overflow Handler
 
main:
        ldi     temp, LOW(RAMEND)     ; Stackpointer initialisieren
        out     SPL, temp
        ldi     temp, HIGH(RAMEND)
        out     SPH, temp
	
        ldi     temp, 0xFF            ; Port B auf Ausgang
        out     DDRA, temp
 
        ldi     leds, 0xFF
 
        ldi     temp, 0b00000001      ; CS00 setzen: Teiler 1
        out     TCCR0, temp
 
        ldi     temp, 0b00000001      ; TOIE0: Interrupt bei Timer Overflow
        out     TIMSK, temp
 
        sei
 
loop:   rjmp    loop
 
timer0_overflow:                      ; Timer 0 Overflow Handler
        out     PORTA, leds
        com     leds
        reti
Mein Problem ist nun, dass das Programm, nachdem es durch den Overflow Interrupt
das Unterprogramm "timer0_overflow:" ausgeführt hat,
auf die Adresse 0x0000 Springt und die Programmzeilen nach "main:" immer wieder ausführt.

Normalerweise müsste das Programm doch wieder in die Endlosschleife
bei "loop:" Zurückspingen, oder?

Wäre nett wenn ihr mir helfen könntet, thx shon mal im Vorraus!