Warum geht Sprung nach Timer0- Interupt ins Nirgendwo?

OP #235457
Lesenswert?
• ▲
▼
Hallo,

ich beschäftige mich seit 4 Tagen mit den ATMega16 und dem AVR-Studio.
Ich möchte mich mit den Interrupts und den dem Timer0 beschäftigen und
habe in Anlehnung an einige Beispiele (auch aus diesem Forum) ein
kleines Programm geschrieben. Leider macht es nicht ganz das was ich
möchte. Bis zum Überlauf des Timers und setzen des Timer0-Interrupts
ist alles OK. Danach sollte er eigentlich zum Label "Zeitum"
springen, springen tut er auch noch, nur landen tut er irgend wo
anders. Laut Disassembler, landet er je nach Änderung im Code, mal
weiter vorne oder hinten oder irgendwo weit außerhalb des Codes im
SRAM. Warum?
Ich weiß nicht mehr weiter, bitte helft mir.

Pierre
Angehängte Dateien:
Gast
Lesenswert?
• ▲
▼
eigentlich habe ich mir fest vorgenommen, mich durch diese
Biitadressierung nicht mehr durchzuwurschteln...

LDI tmp, 0b00000010    ;timer0 int enable
OUT timsk,tmp

da kann man sich jetzt durchs Datenblatt wurschteln, um zur 1 die
passeende Bitstelle zu suchen :-(
Und siehe da: du gibst den OCIE0 frei.
Weniger fehleranfällig und einfacher lesbar geht das so:
ldi temp, (1<<TOIE0)
Gast
Lesenswert?
• ▲
▼
> So wie ich das verstanden habe, brauche ich ihn nur, wenn ich
> Irgendetwas sichern möchte.

Genau, so wie es z.B. Interrupts tun, damit sie wissen, wohin nach der
ISR zurückgesprungen werden muß.

> Ich hatte früher auch schon einen Stack eingerichtet (siehe
> Anhang), das Resultat bleibt das Gleiche, erlandet
> hinter dem Label "Zeitum".


  LDI tmp, 0b00000010    ;timer0 int enable
  OUT timsk,tmp

Damit schaltest du nicht den Timer-Overflow-Interrupt ein, sondern den
Output-Compare-Interrupt, für den du keinen Handler definiert hast.
Hier sieht man wieder, warum es gut ist, Namen statt Bitkolonnen zu
verwenden.

    LDI tmp, (1 << TOV0)
    OUT timsk, tmp

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 21 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.