Hallo leute,
habe gestern versucht eine Interrupt Routine zu Programmieren, doch sie Funktioniert weder im Simulator noch mit dem richtigen Chip. Ich weiß einfach nicht an was es liegt.
Hier mein Code:
Die GICR Maske ist gesetzt, die MCUCR Bits sind aktiviert und das I Flag ist aktiv, dass müsste doch dann eigentlich Funktionieren wenn der Port D2 (Int0) dann von Low auf high gesetzt wird oder? In meinem Datenblatt vom AtMega32 steht, dass der Interrupt auch funktioniert wenn der Port auf output steht, also hab ich ihn auf low gestellt.Code:.include "m32def.inc" .def temp1 = r16 .org 0x000 rjmp main .org 0x002 rjmp int0_handler ;IRQ0 Handle int0_handler: ldi temp1, 0b00010000 ;PortC5 HIGH, rest LOW out PortC, temp1 reti main: ldi temp1, 0xFF ;Port D auf Ausgang out DDRD, temp1 ldi temp1, 0x00 ;Port D auf LOW out PORTD, temp1 ldi temp1, 0xFF ; PortC auf Ausgang out DDRC, temp1 ldi temp1, 0b00000000 ;PortC LOW out PortC, temp1 in temp1, GICR ori temp1, 0b01000000 ;INT0 = 1 andi temp1, 0b11111101 ;IVSEL = 0 out GICR, temp1 in temp1, MCUCR ;INT0 Aktivieren ori temp1, 0b00000011 ; rising Edge out MCUCR, temp1 sei ende: rjmp ende
Wäre nett wenn ihr mir helfen könntet.
LG
Jason07







Zitieren

Lesezeichen