;ATmega88 at 8MHz ;RS232C TX RX test ;2010/03/07(Sun) #include ;set resistor name .def Work_Main = R16 .def Work_Chrout = R22 ;used in RS-232C TX .def Work_Chrin = R23 ;used in RS-232C RX .def Data_Chrout = R0 ;used as sending data through RS-232C .def Data_Chrin = R1 ;used as receiving data through RS-232C ;program area .cseg ;interrupt table .org 0 rjmp RESET ;Reset rjmp ERR ;IREQ0 rjmp ERR ;IREQ1 rjmp ERR ;PCINT0 rjmp ERR ;PCINT1 rjmp ERR ;PCINT2 rjmp ERR ;Watchdog Timer rjmp ERR ;Timer2 Compare A rjmp ERR ;Timer2 Compare B rjmp ERR ;Timer2 Overflow rjmp ERR ;TImer1 Capture rjmp ERR ;Timer1 Compare A rjmp ERR ;Timer1 Compare B rjmp ERR ;Timer1 Overflow rjmp ERR ;Timer0 Compare A rjmp ERR ;Timer0 Compare B rjmp ERR ;Timer0 Overflow rjmp ERR ;SPI Transfer Complete rjmp CHR_IN ;USART RX Complete rjmp ERR ;USART UDR Empty rjmp ERR ;USART TX Complete rjmp ERR ;ADC Conversion Complete rjmp ERR ;EEPROM Ready rjmp ERR ;Analog Comparator rjmp ERR ;2-wire Serial Interface rjmp ERR ;Store Program Memory Ready RESET: ;inhibit interrupt cli ;set stuck point ldi Work_Main,high(RAMEND) out SPH,Work_Main ldi Work_Main,low(RAMEND) out SPL,Work_Main ;set USART ldi Work_Main,0 sts UBRR0H,Work_Main ;ldi Work_Main,12 ;4800baud at 1MHz ldi Work_Main,51 ;9600baud at 8MHz ;ldi Work_Main,12 ;38.4kbaud at 8MHz ;ldi Work_Main,25 ;19.2kbaud at 8MHz sts UBRR0L,Work_Main ldi Work_Main,0b10011000 sts UCSR0B,Work_Main ;bit7=receive intrrupt enable,bit4=recieve enable, bit 3=send eable ;UCSR0C is defautl ldi Work_Main,39 ;length of message ldi ZH,HIGH(MSG) ldi ZL,LOW(MSG) ;rotate left ;because ROM address is 2nd times clc rol ZL rol ZH START_MSG: lpm Data_Chrout,Z+ ;use lpm to read from ROM rcall CHR_OUT dec Work_Main brne START_MSG ;permit interrupt sei MAIN: rjmp MAIN CHR_OUT: ;data send through RS-232C, Data to send is set in 'CHR_OUT' resistor lds Work_Chrout,UCSR0A sbrs Work_Chrout,UDRE0 ;wait until UDRE0 is set rjmp CHR_OUT ; sts UDR0,Data_Chrout ;set data to send ret CHR_IN: lds Data_Chrin,UDR0 mov Data_Chrout,Data_Chrin rcall CHR_OUT reti ERR: reti MSG: .db "RS-232C test program by JI1IZR Start.",0x0D,0x0A,0x00 .dseg