Das hier ist mein aktueller Code:
Hab nur das "reti" vorhin eingefügt.Code:.include "m8def.inc" .equ time = 255 -254 ;Damit wird der Timer vorgeladen .equ sperre = 7 .equ LED = PB2 ;LED an B.2 .def tmp = r16 ;Mein Universallregister .def status = r17 ;Mein Statusregister, ob LED an oder aus ist .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 cbr status, (1<<sperre) ;Statusregister r17.7 = 0 setzen (LED aus) ;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-254 out TCNT0, tmp ;Er läuft 254 mal durch, bevor ein Interrupt auftritt sei ;Interrupts zulassen loop: rjmp loop ;Immer wieder selbst aufrufen -> Endlosschleife pruefZaehler: inc zaehler ;Zählregister um 1 erhöhen cpi zaehler, 0b01000001 ;Wenn Zählregister = 65 ist breq zeitum ;spring zu "zeitum:" wenn zaehler = 65 reti zeitum: clr zaehler ;Zählregister auf 0 setzen push tmp ;Rette Universallregister in tmp, SREG ;Rette Statusregister push tmp sbrs status, sperre ;überspringe, wenn r17.7 = 1 ist (LED an?) rjmp zeitum0 ;zu "zeitum0:" springen sbrc status, sperre ;überspringe, wenn r17.7 = 0 ist (LED aus?) rjmp zeitum1 ;zu "zeitum1:" springen zeitum0: sbr status, (1<<sperre) ;r17.7 = 1 setzen (LED an) sbi PORTB, LED ;B.2 = 1 setzen -> LED an rjmp zeitum2 zeitum1: cbr status, (1<<sperre) ;r17.7 = 0 setzen (LED aus) cbi PORTB, LED ;B.2 auf 0 setzen -> LED aus rjmp zeitum2 zeitum2: pop tmp ;stelle SREG wieder her out SREG, tmp pop tmp ;stelle Universalregister wieder her reti ;die Interrupt-Routine wird verlassen ;und es wird weiter im Hauptprogramm gearbeitet







Zitieren

Lesezeichen