-
Timer Interrupt
Hallo
Ich habe ein Testprogramm geschrieben für einen Attiny2313.Leider bekomme ich im Simulator vom AVR Studio nicht hin das ein Interrupt im Label Timer ausgelöst wird um dann nach Licht_80s zu springen.
Kann mir jemanden sagen was ich falsch gemacht habe.Danke
ttiny
PS: kann man eigentlich Anhänge irgenwie hier einstellen,bin neu hier
machs erst mal so
.nolist
.include <tn2313def.inc>
.list
.cseg
.def zahl=r18
.def temp=r16
.def sregsave=r19
.def tmp=r21
.org 0x000
rjmp RESET
rjmp RESET
rjmp RESET
rjmp RESET
rjmp RESET
rjmp RESET
rjmp RESET
rjmp Licht_80s
rjmp RESET
rjmp RESET
rjmp RESET
rjmp RESET
rjmp RESET
rjmp RESET
reset:
ldi zahl,1 ;legt die anzahl der umläufe fest
ldi temp,128 ;gibt die interrupts frei
out SREG,temp
ldi temp, low(ramend) ;stackpointer initialisiert
out spl, temp
ldi temp,0b11111111 ; portb ist ausgang
out ddrb,temp
ldi temp,0b00000000
out ddrd,temp ;portd ist eingang
ldi Temp, 2 ;hier wird der timer interupt freigegeben
out TIMSK, Temp
sei
ldi temp,5
out TCCR0,temp ; mit 1024 geteilte frequenz
timer: ldi tmp , 255
out TCNT0, tmp ;timer zählt bis 255
ldi temp,0
cp zahl,temp
breq licht_aus
rjmp timer
licht_aus:
ldi temp,0b11111111
out portb,temp
rjmp ende
Licht_80s:
in sregsave ,SREG
push sregsave
dec zahl
pop sregsave
out SREG,sregsave
reti
ende:
rjmp ende
-
Code:
timer: ldi tmp , 255
out TCNT0, tmp ;timer zählt bis 255
ldi temp,0
cp zahl,temp
breq licht_aus
rjmp timer
Dein Interrupt kommt nie zum tragen, weil Du den Timer immer wieder mit 255 neu belegst.
besser wäre sowas:
Code:
timer: ldi tmp , 255
out TCNT0, tmp ;timer zählt bis 255
timer1:
ldi temp,0
cp zahl,temp
breq licht_aus
rjmp timer1
außerdem
Code:
timer: ldi tmp , 255
out TCNT0, tmp ;timer zählt bis 255
stimmt das auch nicht der timer zählt genau einen Takt bis der Überlauf stattfindet, warum, darfst Du Dir selber gedanken machen...
Gruß Sebastian
-
Hi
Verstehe ich nicht.Der Timer müsste doch von 0-255 zählen und dann ein interrupt verursachen und in licht_80s springen.oder habe ich das falsch verstanden
-
Hallo,
wie izaseba schon sagte, wenn Du in der Schleife den Timer immer mit 255 lädst, kommt er nicht zum zählen.
-
hallo
weiss jetzt was ihr meint.habe auch sonst noch eineiges geändert.
danke für die hilfe
ttiny