PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Problem mit Interrupt beim Timer/Counter0



Tob
07.10.2007, 14:40
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:


.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? :-k

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

Rofo88
09.10.2007, 20:25
Das Programm funktioniert einwandfrei. Prüfe mal mit ALT+O ob im Simulator bei Device auch der Mega32 drinn steht.


MfG