-
-
Erfahrener Benutzer
Robotik Einstein
Der erste Schritt ist, die Interruptvektortabelle mit den richtigen Sprungzielen zu versorgen.
Als nächstes muß das EICRA und das EIMSK Register mit gültigen Werten versorgt werden.
Nun musst Du noch deine Interruptroutine schreiben und auf den Speicherplatz plazieren auf den der zugehörige Interruptvektor zeigt.
Das macht man üblicherweise mit Labels.
Am Ende bzw. beim Aussprung aus der Interruptroutine muss der Assemblerbefehl RETI stehen.
Nun solltest Du den Stack initialisieren, sonst läuft weder ein Interrupt, noch funktionieren Unterprogramme die mit CALL bzw. RCALL aufgerufen werden richtig.
Wenn Du jetzt im Hauptprogramm die Interrupts mit dem Assembler Befehl SEI frei gibst, sollte eigentlich alles funktionieren.
Vergiss nicht am Anfang der Interruptroutine die benötigten Register, sowie das SREG zu sichern.
Vor dem Verlassen der Routine müssen die Werte wieder zurück geschrieben werden.
Ein GIMSK Register hat dieser Chip anscheinend nicht.
Die nötigen Informationen kannst Du dem Datenblatt des ATMEGA88 entnehmen - da sind sogar Code Beispiele mit bei.
Ansonsten - schau dir halt mal an wie andere Assembler Programmierer das gemacht haben.
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- Anhänge hochladen: Nein
- Beiträge bearbeiten: Nein
-
Foren-Regeln
Lesezeichen