#arch AT90S8515 #include "/usr/local/AVR_ASM/lib/avr/8515def.inc" #define temp r31 #define LEDs r30 ; ------------------------------- seg abs=0 flash.code rjmp RESET ; RESET-Pointer rjmp EXT_INT0 rjmp EXT_INT1 reti reti reti rjmp TIM1_OVF ; Timer1 Interrupt-Pointer rjmp TIM0_OVF reti reti reti reti reti ; ------------------------------- RESET: ; Stack einrichten: ldi temp, 0x02 ;ldi temp, high(RAMEND) out SPH, temp ldi temp, 0x5F ;ldi temp, low(RAMEND) out SPL, temp ; --------------- ldi temp, 0xFF ; PORT-B als Ausgang out DDRB, temp ; --------------- ldi LEDs, 0x55 rcall initTimer1 in temp, TCCR1B ; Timer1 Control Register B andi temp, 0b11111000 ; Prescale filtern ori temp, 0b00000011 ; Prescale setzen out TCCR1B, temp in temp, TIMSK ori temp, 0b10000000 out TIMSK, temp ; TimerINT1 zulassen in temp, SREG ori temp, 0b10000000 out SREG, temp ; global Ints aktivieren nochmal: ; rcall anzeige_umschalten ; rcall delay rjmp nochmal ; ------------------------------- initTimer1: ldi temp, 0x7a out TCNT1H, temp ldi temp, 0x12 out TCNT1L, temp ret ; ------------------------------- delay: ldi r19, 0x0a delay1: ldi r18, 0x80 delay2: ldi r17, 0x80 delay3: dec r17 brne delay3 dec r18 brne delay2 dec r19 brne delay1 ret ; ------------------------------- ; Umschalten der LED-Anzeige: anzeige_umschalten: com LEDs out PORTB, LEDs ret ; ------------------------------- EXT_INT0: reti EXT_INT1: reti TIM1_OVF: rcall anzeige_umschalten ; ldi temp, TIFR ; andi temp, 0b01111111 ; out TIFR, temp ; TimerInt-Flag loeschen. noetig? reti TIM0_OVF: reti