so nach laengerer Zeit nun endlich das Programm mit Timer0
Code:
;***** STK500 Lernprogramm Nr.4c
;*** Aufgabe: die der jeweiligen Taste zugeordnete LED auf dem STK500 schalten
;*** 1. Tastendruck: LEDs einschalten
;*** 2. Tastendruck: LEDs ausschalten
;*** zum Entprellen soll kein Interrupt werden 
;*** 
.include "m8515def.inc" 
.def Temp        = r16			; Temporary Register 
.def Tast_Stat0  = r17			; Tasten Status
.def Tast_Stat   = r18
.def LED_Stat    = r19			; LED Status
.def Tast_Sperre = r0
.def Aus		 = r20
;
;	TimerWerte(bei 1MHz - ca. 0,1sec/Takt)
;.equ Timerwert   = -50  		; Timerschritte bis zum Überlauf(fuer Simulatortest)
.equ Timerwert   = 61    		; Timerschritte bis zum Überlauf
.def tsw         = r5         	; Timer Startwert (Reload)
;
;
.equ LED_PORT = PORTB			; LEDs
.equ LED_DDR  = PORTB-1			; DataDirectory fuer LEDs
.equ TAST_PORT= PORTD			; Tasten
.equ TAST_DDR = PORTD-1			; DataDirectory fuer TastenEingang
.equ TAST_PIN = PORTD-2			; TastenEingang
;
;***** 
;Reset and Interrupt vector    ;VNr.  Beschreibung 
   rjmp   RESET                ;1   POWER ON RESET 
   reti						   ;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 
   rjmp	TIMER0_OVF             ;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 temp,Timerwert      
 	mov tsw,temp            
 	out TCNT0,tsw

;	ldi temp,(1<<CS00)			; Taktfrequenz ohne Vorteiler gewaehlt (fuer Simaulatortest)          
	ldi temp,(1<<CS00)|(1<<CS02)			; Taktfrequenz mit Vorteiler 1024 gewaehlt           
 	out TCCR0,temp

	ldi temp,(1<<TOIE0)			; Timer0 Overflow aktivieren
 	out TIMSK,temp          
       
	



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

	clr Temp                    ;Temp mit 0b00000000 bzw. 0x00 laden 
	out TAST_DDR, Temp          ;PORTD als Eingang 
	mov Tast_Sperre, temp
	ser Temp                    ;Temp mit 0b11111111 bzw. 0xFF laden 
	out TAST_PIN, temp			;STK500 schaltet gegen GND - Taste gedreuckt (Pin==0)
	out TAST_PORT, temp         ;PullUp an PortD einschalten 
	out LED_DDR,Temp            ;PORTB als Ausgang 
	out LED_PORT, temp          ;PORTB (LEDs) aus 
	clr Tast_Stat				;Tast_Stat auf def. Zustand
	clr Aus

	sei							; globale Interruptfreigabe

MAIN:
	rcall TASTEN_TEST
	rjmp MAIN


TIMER0_OVF:
	push	TEMP					; TEMP auf Stack sichern
	in	TEMP,SREG					; SREG auf Stack sichern 
	push	TEMP					;
	
	in Tast_Stat0, TAST_PIN
	com Tast_Stat0					; invertiere
 	out TCNT0,TSW  					; Timer0-Startwert setzen       
		
	pop	TEMP						; 
	out	SREG,TEMP					; SREG zurueckschreiben
	pop	TEMP						; TEMP zurueckschreiben 
	reti


TASTEN_TEST:
	mov Tast_Stat, Tast_Stat0
	cp Tast_Stat, Aus				; Vergleich - (0b11111111->keine Taste)
	brne LED_TOGGLE					; bei != rufe LED_TOGGLE auf
	ret


LED_TOGGLE:							; schaltet LED um
	in LED_Stat, LED_PORT			; lese LEDs aus und speichere in LED_Stat
	com LED_Stat					; invertiere
	eor Tast_Stat, Tast_Sperre		; gedrueckt gehaltene Taste sperren
									; LED=1 Tast=1 == LED=0
									; LED=0 Tast=0 == LED=0
									; LED=0 Tast=1 == LED=1
									; LED=1 Tast=0 == LED=1
	eor LED_Stat, Tast_Stat			; ExclusivODER - schalte die Ausgaenge , wo Tasten gedrueckt werden um
	com LED_Stat					; invertiere
	out LED_PORT, LED_Stat			; Ausgabe an LEDs
	in Tast_Stat0, TAST_PIN			; Wiedereinlesen fuer Tastensperre
	com Tast_Stat0					; invertiere
	mov Tast_Sperre, Tast_Stat0
	ret
Nur das Problem mit der 2.Tasten, wenn eine vorher "gedrueckte" noch gesetzt ist bzw. nicht losgelassen wurde.
Das will ich noch aendern. - Es soll auch eine 2. oder 3. Eingabe moeglich sein, wenn die 1. oder 2. nicht zurueck gesetzt wurde bzw. die Tasten noch immer gedrueckt sind.