Forum: Mikrocontroller und Digitale Elektronik Timer0 ???


von Praktikant (Gast)


Lesenswert?

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

von Praktikant (Gast)


Lesenswert?

Hat sich erledigt. Ich hab den Fehler schon gefunden

von Dirk (Gast)


Lesenswert?

Hi,

fuer andere Leute waere es immer nett das man die Fehler postet.

Mfg

Dirk

von Praktikant (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.