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
Lesezeichen