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

OP #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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.