#define f_cpu 1000000 #define putchar uart_transmit cpu atmega8 include /home/nutzer/eigene/prj/avr/asl/appnotes/m8Adef.asm include /home/nutzer/eigene/prj/avr/hilo.asm rjmp isr_reset rjmp isr_int0 rjmp isr_int1 rjmp isr_timer2_comp rjmp isr_timer2_ovf rjmp isr_timer1_capt rjmp isr_timer1_compa rjmp isr_timer1_compb rjmp isr_timer1_ovf rjmp isr_timer0_ovf rjmp spi_stc rjmp isr_usart_rx rjmp isr_usart_udre rjmp isr_usart_tx rjmp isr_adc rjmp isr_ee_rdy rjmp isr_analog_comp rjmp twi rjmp spm_rdy isr_int0: ;läuft mit 3,9kHz (256µS) push r16 in r16,sreg push r16 push r17 lds r16,count cpi r16,5 brcs int0_exit ;Bit-Zeit noch nicht abgelaufen clc sbis pind,2 sec lds r16,rxsrg rol r16 sts rxsrg,r16 lds r16,rxsrg+1 rol r16 sts rxsrg+1,r16 lds r16,rxbits inc r16 sts rxbits,r16 clr r16 sts count,r16 int0_exit: pop r17 pop r16 out sreg,r16 pop r16 reti isr_int1: isr_timer2_comp: isr_timer2_ovf: isr_timer1_capt: isr_timer1_compa: isr_timer1_compb: isr_timer1_ovf: reti isr_timer0_ovf: push r16 in r16,sreg push r16 lds r16,count cpi r16,0xff breq tim0_exit subi r16,-1 sts count,r16 cpi r16,0xff brne tim0_exit tim0_1: ;Abgelaufen lds r16,rxbits cpi r16,0x0e ;genau 14 Bit empfangen? brne tim0_exit1 lds r16,rxsrg ;Schieberegister übertragen sts rxrg,r16 lds r16,rxsrg+1 sts rxrg+1,r16 tim0_exit1: clr r16 sts rxbits,r16 ;Bitzähler nullen tim0_exit: pop r16 out sreg,r16 pop r16 reti spi_stc: isr_usart_rx: isr_usart_udre: isr_usart_tx: isr_adc: isr_ee_rdy: isr_analog_comp: twi: spm_rdy: reti uart_init macro baudrate ldi r16,low(f_cpu/8/baudrate) out UBRRL, r16 ldi r16,high(f_cpu/8/baudrate) out UBRRH, r16 ; Enable receiver and transmitter sbi UCSRA,U2X ;doppelte Baudrate ldi r16, (1< Hauptprogramm