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