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:
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
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.
Wäre nett wenn ihr mir helfen könntet.
LG
Jason07
Lesezeichen