Mahlzeit. Ich habe folgendes Programm geschrieben um mir selbst die Funktionsweise des Timer0 näherzubringen. Nun funktioniert dieses Programm anscheinend nicht. Wo habe ich den Fehler gemacht? Ich wäre echt für ein wenig Hilfe dankbar. .include "m8def.inc" .def temp=r16 .def T0IFLAG=r20 .equ TimerStart=256-244 ;244*1024 ca 250000 Taktzyklen (@10MHz) .org 0x0000 ;Einsprung für das Programm rjmp main ;Reset Handler .org OVF0addr rjmp tim0ovf main: ldi temp, LOW(RAMEND) ; LOW-Byte der obersten RAM-Adresse out SPL, temp ldi temp, HIGH(RAMEND) ; HIGH-Byte der obersten RAM-Adresse out SPH, temp rcall init ausgabe: ;Endlosschleife Blinker cpi T0IFLAG,1 ;I-Flag gesetzt??? brne weiter ;Nein. Ist nicht gesetzt ldi T0IFLAG,0 ;I-Flag quittieren inc r18 ;r18 hochzählen cpi r18,0x27 ;Sekunde erreicht? brne weiter ;nein ldi r18,0 inc r19 ;Sekundenzähler incrementieren mov r21,r19 com r21 out PORTC,r21 weiter: rjmp ausgabe tim0ovf: ldi r17,TimerStart ;Zeitzähler für 25ms vorladen out TCNT0,r17 ldi T0IFLAG,1 ;Timer0 I-Flag setzen reti ;Rücksprung aus der Interruptroutine init: ldi r17,0xff ; out DDRC,r17 ;Port C auf Ausgabe schalten ldi r17,0x00 ;Alle Lampen aus out PORTC,r17 ldi r17,TimerStart ;Zeitzähler für 25ms out TCNT0,r17 in r17,TIMSK ori r17,0x02 out TIMSK,r17 ldi r18,0 ldi r19,0 ;Sekundenzähler ldi T0IFLAG,0 ldi r17,0x05 ;Vorteiler für Timer0 Clock/1024 out TCCR0,r17 sei ;Interrupts freigeben ret ;Rücksprung ins Hauptprogramm
Oh. Sorry. Die Einstellung der Interruptmaske des Timers funktioniert (bei mir) so nicht. in r17,TIMSK ori r17,0x02 out TIMSK,r17 Mit folgender Änderung funzt es. ldi r17,1<<TOIE0 out TIMSK,r17
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.