Forum: Mikrocontroller und Digitale Elektronik Timer Interrupt


von Andreas (Gast)


Lesenswert?

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?

von Andreas (Gast)


Lesenswert?

Hab noch was vergessen. Ich habe den ATMEGA161

von crazy horse (Gast)


Lesenswert?

Stack? Sprungtabelle?

von Conlost (Gast)


Lesenswert?

Wo wird der Timer gestartet, ich vermisse TCCR0?

von Olaf Kindel (Gast)


Lesenswert?

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

von Andreas (Gast)


Lesenswert?

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!

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.