mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Timer0 ???


Autor: Praktikant (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Praktikant (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hat sich erledigt. Ich hab den Fehler schon gefunden

Autor: Dirk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

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

Mfg

Dirk

Autor: Praktikant (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.