Axo, hab nu auch deinen Post verstanden. Also du meinst, direkt nach dem Befehl cpi, wenn dort die Interrupt-Routine aufgerufen wird? Nun hab ich das dann so geändert, bin mir aber nicht sicher, ob das so richtig ist. Die LED blinkt aber immer noch im 1 Sekundentakt.
Code:
.include "m8def.inc"
.equ time = 256-90 ;Damit wird der Timer vorgeladen
.equ LED = PB2 ;LED an B.2
.def tmp = r16 ;Mein Universallregister
.def statusreg = r17 ;Mein Statusregister
.def zaehler = r18 ;Mein Zählregister
.org 0x000
rjmp reset ;Interruptvektor "reset:"
.org OVF0addr
rjmp pruefZaehler ;Interruptvektor für Timer0 Überlauf, hier springt
;das Programm hin, wenn der Timer überläuft
reset:
;Stack einrichten
ldi tmp, HIGH(RAMEND) ;HIGH-Byte der obersten RAM-Adresse
out SPH, tmp
ldi tmp, LOW(RAMEND) ;LOW-Byte der obersten RAM-Adresse
out SPL, tmp
sbi DDRB, LED ;B.2 als Ausgang
cbi PORTB, LED ;B.2 auf LOW stellen -> LED aus am Anfang
;Timer Register werden belegt, hier Timer 0
ldi tmp, (1<<CS02) | (1<<CS00) ;prescaler ist 1024
out TCCR0, tmp ;Register TCCR0 ist für den Prescaller zuständig
ldi tmp, (1<<TOIE0) ;Hier werden Interrupts nach Timer0 Überlauf eingeschaltet
out TIMSK, tmp ;Register TIMSK ist dafür zuständig
ldi tmp, time ;Hier wird der Timmer vorgelaen und zwar mit 255-90
out TCNT0, tmp ;Er läuft 90 mal durch, bevor ein Interrupt auftritt
sei ;Interrupts zulassen
loop:
in statusreg, SREG ;SREG sichern
cpi zaehler, 0b00101000 ;Wenn Zählregister = 14 ist
breq zeitum ;dann spring zu "zeitum:"
rjmp loop ;Immer wieder selbst aufrufen -> Endlosschleife
zeitum:
clr zaehler ;Zählregister auf 0 setzen
sbic PINB, LED ;überspringe, wenn B.2 = 0 ist (LED aus?)
rjmp zeitum1 ;wenn B.2 = 1, dann spring zu "zeitum1:"
zeitum0:
sbi PORTB, LED ;B.2 = 1 setzen -> LED an
rjmp loop ;wieder zur loop springen
zeitum1:
cbi PORTB, LED ;B.2 auf 0 setzen -> LED aus
rjmp loop ;wieder zur loop springen
pruefZaehler:
inc zaehler ;Zählregister um 1 erhöhen
ldi tmp, time ;Hier wird der Timer vorgelaen und zwar mit 255-90
out TCNT0, tmp ;Er läuft 90 mal durch, bevor ein Interrupt auftritt
out SREG, statusreg SREG wiederholen
reti ;wieder zurück, wo du hergekommen bist
Gruß
Thomas
Lesezeichen