Forum: Mikrocontroller und Digitale Elektronik Atmega168 external interrupt int0/int1


von Gandalf (Gast)


Lesenswert?

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

von Gandalf (Gast)


Lesenswert?

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

von Lucas (Gast)


Lesenswert?

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.

von spess53 (Gast)


Lesenswert?

HI

>in temp, 0x00

Das ist ein Griff ins Leere. Du meinst wohl ldi temp,$00.

MfG spess

von holger (Gast)


Lesenswert?

Versuchs mal so:

loop:
 rjmp loop

 INT0_Handler:
 ldi temp, 0xFF
 out PORTB, temp
 reti

von holger (Gast)


Lesenswert?

> 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

von Gandalf (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.