AVR-Tutorial: Timer - Overflow Handler Befehl wird nicht angesprungen

#3823180
Lesenswert?

Hallo,

habe gerade das AVR-Tutorial: Timer mit Atmel Studio 6 ausprobiert.

Ich kann beim Simulieren im I/O-View beobachten(mit F11) wie der TCNT0 
hochzählt. Wenn er überläuft, springt das Programm jedoch nicht auf 
timer0_overflow sondern bleibt in der Zeile "loop: rjmp loop". Dabei 
hatte ich erwartet das der Cursor in die Zeile "out PORTB, leds" 
springt.

Wenn ich das richtig verstanden habe sollte doch eigentlich beim 
überlauf die Z-Flag gesetzt werden, oder? An den SREG-Flags ändert sich 
nämlich auch nichts, bei überlauf von TCNT0.

Für Hinweise wie ich mich dem Problem nähern kann wäre ich dankbar. Bin 
leider noch nicht so Fit mit Assembler und uControllern.


Hier nochmal der Code:
1
.include "m8def.inc"
2
 
3
.def temp = r16
4
.def leds = r17
5
 
6
.org 0x0000
7
        rjmp    main                  ; Reset Handler
8
.org OVF0addr
9
        rjmp    timer0_overflow       ; Timer Overflow Handler
10
 
11
main:
12
        ; Stackpointer initialisieren
13
        ldi     temp, HIGH(RAMEND)
14
        out     SPH, temp
15
        ldi     temp, LOW(RAMEND)     
16
        out     SPL, temp
17
 
18
        ldi     temp, 0xFF            ; Port B auf Ausgang
19
        out     DDRB, temp
20
 
21
        ldi     leds, 0xFF
22
 
23
        ldi     temp, (1<<CS00)       ; CS00 setzen: Teiler 1
24
        out     TCCR0, temp
25
 
26
        ldi     temp, (1<<TOIE0)      ; TOIE0: Interrupt bei Timer Overflow
27
        out     TIMSK, temp
28
 
29
        sei
30
 
31
loop:   rjmp    loop
32
 
33
timer0_overflow:                      ; Timer 0 Overflow Handler
34
        out     PORTB, leds
35
        com     leds
36
        reti
#3823187
Lesenswert?

Thomas L. schrieb:
> Ich kann beim Simulieren im I/O-View beobachten(mit F11) wie der TCNT0
> hochzählt. Wenn er überläuft, springt das Programm jedoch nicht auf
> timer0_overflow sondern bleibt in der Zeile "loop: rjmp loop".

Debug -> Options and Settings -> Debugger -> Atmel Debugger
-> Mask interrupts while stepping

Thomas L. schrieb:
> Wenn ich das richtig verstanden habe sollte doch eigentlich beim
> überlauf die Z-Flag gesetzt werden, oder?

Nein.
Gast #3823296
Lesenswert?

Hi

> Ich kann beim Simulieren im I/O-View beobachten(mit F11) wie der TCNT0
> hochzählt. Wenn er überläuft, springt das Programm jedoch nicht auf
> timer0_overflow sondern bleibt in der Zeile "loop: rjmp loop".

Dann setze doch mal einen Breakpoint in den Interrupt.

MfG Spess

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren