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.
Gruß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
Thomas







Zitieren

Lesezeichen