DavidN
23.08.2007, 15:56
Ich hab ein Prgramm geschrieben, dass eigentlich, viel mehr als nur einen Interrupt auslösen soll. Jetzt hab ich es mal bis auf die Fehlerquelle beschränkt, und hab es noch mal mit Beispielprogrammen verglichen, und konnte keine Unterschiede mehr feststellen und trotzdem wird bei mir der externe Interrupt 0 nicht ausgelöst, weder im Simulator noch in echt.
.include "m16def.inc"
.def temp = r16
.org 0x000
rjmp RESET ;bei Reset
.org 0x002
rjmp EXT_INT0 ;INT0
.org 0x004
reti ;INT1
.org 0x006
reti ;INT2
.org 0x008
reti ;Timer2 Vergleich korrekt
.org 0x00A
reti ;Timer2 Overflow
.org 0x00C
reti ;Timer1 Capture Event ???
.org 0x00E
reti ;Timer1 Vergleich von A korrekt
.org 0x010
reti ;Timer1 Vergleich von B korrekt
.org 0x012
reti ;Timer1 Overflow
.org 0x014
reti ;Timer0 Vergleich korrekt
.org 0x016
reti ;Timer0 Overflow
.org 0x018
reti ;Serialer Transfer fertig
.org 0x01A
reti ;USART Datenempfang (RX) fertig
.org 0x01C
reti ;USART Datenregister leer
.org 0x01E
reti ;USART Datensendung (TX) fertig
.org 0x020
reti ;ADC Vergleich fertig
.org 0x022
reti ;EEPROM fertig
.org 0x024
reti ;Analog Comperator
.org 0x026
reti ;Two-wire Serial Interface
.org 0x028
reti ;Store Program Memory fertig
RESET:
;----- Stack
ldi temp, low(RAMEND) ;Stackpointer
out SPL, temp
ldi temp, high(RAMEND)
out SPH, temp
;----- Kontrolllampen an Port A
ldi temp, 0xFF
out DDRA, temp
;----- Interrupts
ldi temp, 0b01000000
out DDRD, temp
ldi temp, 0b00000011 ;Interrupt Reaktionsimpuls einstellen
out MCUCR, temp
ldi temp, 0b01000000 ;Interrupts enablen
out GICR, temp
sei ;Interuppts aktivieren
IDLE:
rjmp idle
;----- Interrupts
EXT_INT0:
sbis PORTA, 0
sbi PORTA, 0
sbic PORTA, 0
cbi PORTA,0
reti
Laut Simulator verweilt der Prozessor im idle und in der Realität schein er dass auch zu machen.
Fusebits sind kontrolliert, an A liegen Leds und der interupt wird von einem nicht entprellten Schalter mit Pulldown Widerstand ausgelöst.
.include "m16def.inc"
.def temp = r16
.org 0x000
rjmp RESET ;bei Reset
.org 0x002
rjmp EXT_INT0 ;INT0
.org 0x004
reti ;INT1
.org 0x006
reti ;INT2
.org 0x008
reti ;Timer2 Vergleich korrekt
.org 0x00A
reti ;Timer2 Overflow
.org 0x00C
reti ;Timer1 Capture Event ???
.org 0x00E
reti ;Timer1 Vergleich von A korrekt
.org 0x010
reti ;Timer1 Vergleich von B korrekt
.org 0x012
reti ;Timer1 Overflow
.org 0x014
reti ;Timer0 Vergleich korrekt
.org 0x016
reti ;Timer0 Overflow
.org 0x018
reti ;Serialer Transfer fertig
.org 0x01A
reti ;USART Datenempfang (RX) fertig
.org 0x01C
reti ;USART Datenregister leer
.org 0x01E
reti ;USART Datensendung (TX) fertig
.org 0x020
reti ;ADC Vergleich fertig
.org 0x022
reti ;EEPROM fertig
.org 0x024
reti ;Analog Comperator
.org 0x026
reti ;Two-wire Serial Interface
.org 0x028
reti ;Store Program Memory fertig
RESET:
;----- Stack
ldi temp, low(RAMEND) ;Stackpointer
out SPL, temp
ldi temp, high(RAMEND)
out SPH, temp
;----- Kontrolllampen an Port A
ldi temp, 0xFF
out DDRA, temp
;----- Interrupts
ldi temp, 0b01000000
out DDRD, temp
ldi temp, 0b00000011 ;Interrupt Reaktionsimpuls einstellen
out MCUCR, temp
ldi temp, 0b01000000 ;Interrupts enablen
out GICR, temp
sei ;Interuppts aktivieren
IDLE:
rjmp idle
;----- Interrupts
EXT_INT0:
sbis PORTA, 0
sbi PORTA, 0
sbic PORTA, 0
cbi PORTA,0
reti
Laut Simulator verweilt der Prozessor im idle und in der Realität schein er dass auch zu machen.
Fusebits sind kontrolliert, an A liegen Leds und der interupt wird von einem nicht entprellten Schalter mit Pulldown Widerstand ausgelöst.