so habe nun ein weiteres Miniprogramm.
diesmal mit Ein und Austaster
Code:
;***** STK500 Lernprogramm Nr.2
;*** Aufgabe: alle LEDs mit einem Taster auf dem STK500 an ubd mit einem 2. Taster ausschalten 
;*** zum Entprellen sollen Interrupts(INT0 und INT1) benutzt werden 
;*** 
.include "m8515def.inc" 
.def Temp      = r16            ; Temporary register 

;***** 
;Reset and Interrupt vector         ;VNr.  Beschreibung 
   rjmp   RESET                ;1   POWER ON RESET 
   rjmp   INT0_ISR             ;2   Int0-Interrupt 
   rjmp   INT1_ISR             ;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, temp
	ldi r16, HIGH(RAMEND) 
	out SPH, temp

	ldi temp, (1<<ISC00)|(1<<ISC01)|(1<<ISC10)|(1<<ISC11)
	out MCUCR, temp 			;Interrupt INT0 und INT1 konfiguriert 

	ldi temp, (1<<INTF0)|(1<<INTF1)
	out GIFR, temp				;InterruptFlagregister geloescht 

	ldi temp, (1<<INT0)|(1<<INT1)
	out GICR, temp				;Interrupt INT0 und INT1 aktiviert                 

  
	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: 

    rjmp MAIN                  ;Die Schleife ruft mit dem Sprungbefehl 
                               ;rjmp sich ständig selbst auf.(endlos) 
                            

INT0_ISR: 
	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 

	ser Temp                    ;Temp mit 0b11111111 bzw. 0xFF laden 
    out PORTB, temp		        ;Ausgabe an PORTB -> LEDs aus

	pop R16						;Ruecksichern von R16(SREG)
	out SREG, R16				;Ruecksichern von SREG
	pop R16
		 
    reti 

INT1_ISR:
	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 

	clr Temp                    ;Temp mit 0b00000000 bzw. 0x00 laden 
    out PORTB, temp         	;Ausgabe von LED_STAT an PORTB -> LEDs an

	pop R16						;Ruecksichern von R16(SREG)
	out SREG, R16				;Ruecksichern von SREG
	pop R16
		 
    reti