Hallo,
mit folgendem Code wollte ich einmal die Interrupts ausprobieren,
an PortB hängen 8 Leds zur Ausgabe, die werden anfangs alle angeschaltet und bei Tastendruck soll dann das hohe Nibble ausgeschaltet werden.
Das ganze wird über den INT0 am PortD2 gemacht.
Das ganze funktioniert auch eigentlich,
allerdings brauchen die Leds nach dem Tastendruck ca. eine Sekunde bis sie aus sind.
Verstehe nicht warum da soviel Zeit verstreicht? Im Simulator vom AVR Studio sehe ich nicht wo so eine Verzögerung herkommen könnte.
Liegt es eventuell an einer fehlenden Tastenentprellung? Obwohl ich in dem Beispiel dafür keinen Sinn sehen würde.
Vielen Dank für die Hilfe.
Hier der Code:
Code:rjmp main ;1 POWER ON RESET rjmp meinint ;2 Int0-Interrupt reti ;3 Int1-Interrupt reti ;4 TC2 Compare Match reti ;5 TC2 Overflow reti ;6 TC1 Capture reti ;7 TC1 Compare Match A reti ;8 TC1 Compare Match B reti ;9 TC1 Overflow reti ;10 TC0 Overflow reti ;11 SPI, STC Serial Transfer Complete reti ;12 UART Rx Complete reti ;13 UART Data Register Empty reti ;14 UART Tx Complete reti ;15 ADC Conversion Complete reti ;16 EEPROM Ready reti ;17 Analog Comparator reti ;18 TWI (I²C) Serial Interface reti ;19 Store Program Memory Ready ;------------------------------------------------------------------------ ;Start, Power ON, Reset main: ;Stack init: ldi r16,LOW(RAMEND) out SPL,r16 ldi r16,HIGH(RAMEND) out SPH,r16 ;Programm init: ldi r16,0xff ; Port B as output out DDRB, r16 ldi r16, (1<<ISC00) | (1<<ISC01) ; set interrupt bits out MCUCR, r16 ldi r16, (1<<INT0) ; enable INT0 out GICR, r16 sei ; enable interrupt ldi r17,0xff ; init output register ;------------------------------------------------------------------------ mainloop: wdr out PORTB,r17 rcall wait rjmp mainloop meinint: push r16 in r16, SREG push r16 ldi r17, 0x0f ;in r16, GIFR ;cbr r16, INTF0 ;out GIFR, r16 pop r16 out SREG,r16 pop r16 reti wait: push r15 push r16 clr r15 clr r16 skip: dec r15 brne skip dec r16 brne skip pop r16 pop r15 ret







Zitieren

Lesezeichen