Also das mit dem Interrupt verhätl sich so, dass die ersten paar Wörter im Flash Interruptvektoren sind, das heist, das wenn ein Interrupt aktiviert ist und dieser aufgerufen wird dann springt dein Programmzeiger auf genau diese addresse ( zb $0010 ), da du da jab aber nur ein befehl ausführen könntest schreibt man dort ein rjmp rein, welches zu deiner Interruptroutine führt. Deine interruptroutine beendest du nicht mit ret sondern mit RETI !!!!
So das waren die Basics nun aber zum Code:
1.
Als erstes werden die Interruptvektoren eingerichtet:
Die addresse findest du entweder im Datenbaltt oder im INC File
3.Code:;----[ Interrupt-Vektoren ]--------------------------------------------------------- .org 0000 ; Zum Programmbeginn springen rjmp reset .org OVF1addr ; Timer1 überlauf rjmp Overflow
Den Timer einrichten, aber das kannste ja schon
4.
Den Timerinterrupt aktivieren:
Dazu musst du im TIMSK Register den TOIE1 aktiverien ( TimerOverflowInterruptEnable1 für timer1 )
5.Code:ldi tmp, (1<<TOIE1) ; Timer1 Interrupt out timsk, tmp ; aktivieren
GANZ WICHTIG!!! GLOBALE INTERRUPTFREIGABE!!!
sonst geht überhaupt kein Interrupt
Dazu einfach den befehl SEI benuzen.
6.Code:sei ; Interuptts freigeben
Zum schluß deine Iinterruptroutinen ans ENDE deines Quellcodes
beginen mit deinem LABELD ( hier Overflow ) und Ende mit RETI
So das wars auch schon, das kannste so für alle Interrupts übernehmen.Code:Overflow: ; HIER DEIN CODE reti







Zitieren

Lesezeichen