Timer Interrupt

Gast #70114
Hallo Gemeinde,
Manchmal scheint das Hirn zu blockieren. Ich kriege es doch gerade
nicht gebacken eine lauffähige Timer0 Overflow Routine zum laufen zu
bringen:

Service-Routine:
ovf0:  in status,SREG
  rcall keyin
  ldi temp,254    ;reload timer
  out TCNT0,temp
  out SREG,status
  reti
Wird während der INIT-Phase aufgerufen:

tcnt0init:
  ldi temp,254
  out TCNT0,temp
  ldi temp,0x02
  out TIMSK,temp
        sei
  ret

Interrupt-Routine wird nicht angesprungen. Warum?
Gast
Du hast den Timer ja offenbar gar nicht gestartet, dazu mußt Du erst mal
das TCCR0-Register entsprechend laden (Modus und Prescaler).

Ich hab zwar grad nur das ATmega16-Datenblatt, aber ich vermute, das
wird beim 161 ähnlich sein.

MfG Olaf
Gast
Stack und Sprungtabelle sind OK. Der Rest läuft ja anstandslos. Das
Datenblatt des ATMEGA161 ist etwas verwirrend und die m161def.inc hat
Fehler in den Kommentaren. Aber der Tipp mit TCCR0 war OK. Danke!

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 22 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.