hallo mare_crisium,
klar doch wollte eh das Programm abaendern, dass jeder Taster verwendet werden kann. Somit muss ich mich um ein anderes entprellen kuemmern.
Aber eine Schaltung habe ich noch zwischenzeitlich gemacht.
Angelehnt an das Hundegeschirr von unseren Berner.
hier dieser Code:
Code:

;***** STK500 Lernprogramm Nr.3
;*** Aufgabe: alle LEDs mit einem Taster auf dem STK500 schalten
;*** 1. Tastendruck: LEDs einschalten
;*** 2. Tastendruck: LEDs blinken
;*** 3. Tastendruck: LEDs ausschalten
;*** zum Entprellen soll ein Interrupt(Int0) benutzt werden 
;*** 
.include "m8515def.inc" 
.def Temp       = r16			; Temporary register 
.def Tast_Stat  = r17			; Zaehler fuer Taste 
.def Delay		= R18			; Wartezeit
.def Delay2		= R19			; Wartezeit
;***** 
;Reset and Interrupt vector    ;VNr.  Beschreibung 
   rjmp   RESET                ;1   POWER ON RESET 
   rjmp   INT0_ISR             ;2   Int0-Interrupt 
   reti                        ;3   Int1-Interrupt 
   reti                        ;4   TC1 Capture 
   reti                        ;5   TC1 Compare Match A TC2 Overflow 
   reti                        ;6   TC1 Compare Match B TC1 Capture 
   reti                        ;7   TC1 Overflow TC1 Compare Match A 
   reti                        ;8   TC0 Overflow TC1 Compare Match B 
   reti                        ;9   SPI, STC Serial Transfer Complete TC1 Overflow 
   reti                        ;10  UART Rx Complete TC0 Overflow 
   reti                        ;11  UART Data Register Empty SPI, STC Serial Transfer Complete 
   reti                        ;12  UART Tx Complete UART Rx Complete 
   reti                        ;13  Analog Comparator 
   reti                        ;14  Int2-Interrupt 
   reti                        ;15  Timer 0 Compare Match 
   reti                        ;16  EEPROM Ready 
   reti                        ;17  Store Program Memory Ready 


RESET: 

	ldi r16, LOW(RAMEND)        ;Stack initialisieren 
	out SPL, r16 
	ldi r16, HIGH(RAMEND) 
	out SPH, r16 



	ldi temp, (1<<ISC00)|(1<<ISC01)|(1<<SE)        
	out MCUCR, temp 			;Interrupt INT0 und Sleep enable konfiguriert 

	ldi temp, 1 << INTF0		;InterruptFlagregister geloescht 
	out GIFR, temp

	ldi temp, 1 << INT0         ;Interrupt INT0 aktiviert 
	out GICR, temp                

  
	clr Temp                    ;Temp mit 0b00000000 bzw. 0x00 laden 
	out DDRD, Temp              ;PORTD als Eingang 
	ser Temp                    ;Temp mit 0b11111111 bzw. 0xFF laden 
	out PORTD, temp             ;PullUp an PortD einschalten 
	out DDRB,Temp               ;PORTB als Ausgang 
	out PORTB, temp             ;PORTB (LEDs) aus 

	sei                         ;Interrupts zulassen 

                       
MAIN: 
	rcall TESTE
    rjmp MAIN    

TESTE:
	clr temp						;loesche temp
	inc temp						;increment von temp - "1"
	cp Tast_Stat,temp				;ist TastStat = 1 dann Rufe Sub LED_AN auf, sonst ueberspringe naechsten Befehl
	breq LED_AN

	inc temp						;increment von temp - "2"
	cp Tast_Stat,temp				;ist TastStat = 2 dann Rufe Sub LED_BLINK auf, sonst ueberspringe naechsten Befehl
	breq LED_BLINK

	inc temp						;increment von temp - "3"
	cp Tast_Stat,temp				;ist TastStat = 3 dann Rufe Sub LED_AUS auf, sonst ueberspringe naechsten Befehl
	breq LED_AUS
	sleep
	ret            

		LED_AN:							;loesche temp
			clr temp					;setze alle Bit in temp (0b00000000 bzw. 0x00)
			out PORTB, temp				;Ausgabe an PortB
			sleep
			ret

		LED_BLINK:
			in temp,PORTB				;lese PORTB in temp
			com temp					;Einercomplement von temp (ist 0b00000000 > 0b11111111 oder umgekehrt) 
			out PORTB,temp				;Ausgabe an PortB
		
				Tot_Zeit:
				dec Delay				;zaehle ein Register R18 - 0b0000000 runter und springe danach aus der Schleife
				brne Tot_Zeit
				dec Delay2				;zaehle ein Register R19 - 0b0000000 runter und springe danach aus der Schleife
				brne Tot_Zeit
			ret

		LED_AUS:
			ser temp					;setze alle Bits in temp (0b11111111 bzw. 0xFF)
			out PORTB,temp				;Ausgabe an PORTB
			clr Tast_Stat				;Loesche Tast_Stat
			sleep
			ret



INT0_ISR: 
	ldi Delay, 0b00000001		;Ruecksprung aus LED_BLINK beschleunigen
	ldi Delay2, 0b00000001		;Ruecksprung aus LED_BLINK beschleunigen
	push R16					;Inhalt von R16 auf Stack ablegen	
	in R16, SREG				;Statusregister in R16 lesen
	push R16					;Inhalt von R16(SREG) auf den Stack ablegen 

	inc Tast_Stat

	pop R16						;Ruecksichern von R16(SREG)
	out SREG, R16				;Ruecksichern von SREG
	pop R16						;Ruecksichern von R16
		 
    reti
Als naechstes wird das generelle entprelle in Angriff genommen