PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Interrupt wird nicht aktiviert



DavidN
23.08.2007, 14: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.

PicNick
23.08.2007, 15:22
Input-Pin Abfrage geht mit
SBIS PINA, 0

(Portx ist immer der Output)

DavidN
23.08.2007, 17:27
Dass war der Fehler!!! ](*,) ](*,)

Ich fass es nicht

Blöd ist bloß, dass das bedeutet, das ich noch woanders Fehler haben muss ...
Nur halt eben nicht in diesem Programmausschnitt. :-k

Aber verstanden hab ich immernoch nicht, warum dass einen Unterschied macht. Schließlich verändere ich doch auch im PORTX-Register den Wert, also müsste dort also was stehen, warum steht da nichts?

Gock
23.08.2007, 18:44
Laut Simulator verweilt der Prozessor im idle und in der Realität schein er dass auch zu machen.
Dein Problem ist zwar gelöst, aber was Du schreibst kann eigentlich nicht sein. Hast Du vielleicht auch noch F10 und F11 verwechselt? Dann hättest Du den Fehler vielleicht schneller gefunden.
Gruß

DavidN
23.08.2007, 21:44
gut dass du das geschreiben hast!

Nach einigem probieren, hab ich festgestellt, das im Simulator die Register mit dem Bit0 anfangen und nicht wie überall mit Bit7. Fiese Stolperfalle ...

Hat noch jemand was dazu zu schreiben warum ich das PORTX-Register nicht abfragen kann?