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






Zitieren

Lesezeichen