Hey liebe Leute, Ich lerne zur Zeit die AVR-Programmierung und als übung wollte ich mal mit Intterupts arbeiten. Ich habe wie im Datenblatt beschrieben alle notwendingen Resgister gesetzt um den Interrupt zu aktivieren. Trotzdem kann ich ihn nicht zum auslösen bringen. Ich hoffe ihr könnt mir weiterhelfen. .def temp = r16 .org 0x000 jmp main .org 0x002 jmp INT0_Handler main: ;Stackpointer initialisieren ldi temp, HIGH(RAMEND) out SPH, temp ldi temp, LOW(RAMEND) out SPL, temp ;INT0 interrupt aktivieren ldi temp, (1 << ISC01) sts EICRA, temp ldi temp, (1 << INT0) out EIMSK, temp sei ;Portein-, Portausgänge initialisieren ldi temp, 0x00 out DDRD, temp ldi temp, 0xff out PORTD, temp;interne pullups aktivieren out DDRB, temp out PORTB, temp loop: in temp, 0xFF out PORTB, temp rjmp loop INT0_Handler: in temp, 0x00 out PORTB, temp reti
Sorry, habe einen kleinen Fehler gerade entdeckt: statt "in" soll dort "ldi" stehen(unter loop: und INT0_Handler) Das Problem, dass ich die Interrupts nicht auslösen kann besteht immer noch
Woran erkennst du, dass der Interrupt nicht auslöst? Mmn nach wird er ausgelöst, PORTB aber nur zu kurz auf 0x00 gesetzt. Nach dem Interuppt läuft ja die main (loop) weiter.
HI
>in temp, 0x00
Das ist ein Griff ins Leere. Du meinst wohl ldi temp,$00.
MfG spess
Versuchs mal so: loop: rjmp loop INT0_Handler: ldi temp, 0xFF out PORTB, temp reti
> INT0_Handler: > ldi temp, 0xFF > out PORTB, temp > reti Ach Mist, so setzt du Portb ja schon vor der Loop. Also so: INT0_Handler: ldi temp, 0x00 out PORTB, temp reti
Der Interrupt wurde tatsächlich ausglöst -.- War wirklich nur viel zu kurz um es an der LED erkennen zu können. Danke für eure antworten
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.