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
|