;****************************************************************************************** ; AVRサンプル ; Project : ; Program Name : ; Programer : ; Create date : Version 1.0 H23.01.10 ; History : ;****************************************************************************************** ; (1)Description ; RXD:PB3, TXD;PB4 ;****************************************************************************************** .include "tn13adef.inc" .equ PI_RXD = 3 ; Define RXD .equ PI_TXD = 4 ; Define TXD .cseg LDI R16,RAMEND OUT SPL,R16 ; ; ****************************** ; 1.初期設定 ; ****************************** LDI R16,0b00010000 ; PORTB(4)を出力にする OUT DDRB,R16 ; PORTB(4)を出力にする LDI R16,0x00 ; PORTBを初期化 OUT PORTB,R16 ; PORTBを初期化 ; SBI PORTB,PI_TXD ; TXDを初期化 ; ****************************** ; 2.メインプログラム ; ****************************** ; (0)デモメッセージを送信する RCALL DEMO01 MAIN: ; (1)データを受信する RCALL SERREC ; (2)エコーバックする RCALL SERTRN ; RJMP MAIN ;****************************************************************************************** ; Function Name : DEMO01 ; Title : 初期メッセージ出力 ; Input : ; Output : ; Description : ;****************************************************************************************** DEMO01: ; LDI R16,' ' RCALL SERTRN LDI R16,' ' RCALL SERTRN LDI R16,' ' RCALL SERTRN LDI R16,'A' RCALL SERTRN LDI R16,'T' RCALL SERTRN LDI R16,'T' RCALL SERTRN LDI R16,'I' RCALL SERTRN LDI R16,'N' RCALL SERTRN LDI R16,'Y' RCALL SERTRN LDI R16,'1' RCALL SERTRN LDI R16,'3' RCALL SERTRN LDI R16,'A' RCALL SERTRN LDI R16,' ' RCALL SERTRN LDI R16,'C' RCALL SERTRN LDI R16,'o' RCALL SERTRN LDI R16,'n' RCALL SERTRN LDI R16,'n' RCALL SERTRN LDI R16,'e' RCALL SERTRN LDI R16,'c' RCALL SERTRN LDI R16,'t' RCALL SERTRN LDI R16,'e' RCALL SERTRN LDI R16,'d' RCALL SERTRN LDI R16,' ' RCALL SERTRN LDI R16,'O' RCALL SERTRN LDI R16,'K' RCALL SERTRN LDI R16,'>' RCALL SERTRN LDI R16,' ' RCALL SERTRN RET ;****************************************************************************************** ; Function Name : SERREC ; Title : シリアルデータを受信する ; Input : ; Output : R16(受信データ) ; Description : OSC 9.6MHz, 9600BPS;1パルス長は、9.6MHz/9600=>1000(Step) ; ;****************************************************************************************** SERREC: ; 1.スタートビットを待つ(1000) * 1.5 ===> 1500 SERREC_1A: SBIC PINB,PI_RXD ;(1/2,3)PORTB(0)をチェック RJMP SERREC_1A ;(2)PORTB(0)をチェック ; LDI R17,149 ;(1) SERREC_1B: RJMP PC+1 ;(2) RJMP PC+1 ;(2) RJMP PC+1 ;(2) NOP ;(1) DEC R17 ;(1) BRNE SERREC_1B ;(1/2) ; RJMP PC+1 ;(2) RJMP PC+1 ;(2) RJMP PC+1 ;(2) ; ; 2.データ受信 ; (1)データを8ビット受信する LDI R16,0 ;(1)R16を初期化 LDI R18,8 ;(1) SERREC_2A: LSR R16 ;(1) SBIC PINB,PI_RXD ;(1/2,3)データチェック ORI R16,0x80 ;(1)データがHならビットを1にする SBIS PINB,PI_RXD ;(1/2,3)PORTB(0)をチェック ANDI R16,0x7f ;(1)データがLならビットを0にする ; 3.1ビット分待つ LDI R17,99 ;(1) SERREC_2B: ; RJMP PC+1 ;(2) RJMP PC+1 ;(2) RJMP PC+1 ;(2) NOP ;(1) DEC R17 ;(1) BRNE SERREC_2B ;(1/2) ; RJMP PC+1 ;(2) NOP ;(1) DEC R18 ;(1) BRNE SERREC_2A ;(1/2) ; 4.送信終了 LDI R17,100 ;(1) SERREC_4: ; RJMP PC+1 ;(2) RJMP PC+1 ;(2) RJMP PC+1 ;(2) NOP ;(1) DEC R17 ;(1) BRNE SERREC_4 ;(1/2) RJMP PC+1 ;(2) ; RET ;****************************************************************************************** ; Function Name : SERTRN ; Title : シリアルデータを送信する ; Input : R16(送信データ) ; Output : ; Description : OSC 9.6MHz, 9600BPS;1パルス長は、9.6MHz/9600=>1000(Step) ; ;****************************************************************************************** SERTRN: ; 1.スタートビットを送信(1000) CBI PORTB,PI_TXD ;(2)TXDを設定 LDI R17,100 ;(1) SERTRN_1: RJMP PC+1 ;(2) RJMP PC+1 ;(2) RJMP PC+1 ;(2) NOP ;(1) DEC R17 ;(1) BRNE SERTRN_1 ;(1/2) ; ; ; 2.データを送信(8Bit) ; (1)データを8ビット送信する LDI R18,8 ;(1) SERTRN_2: ; ; (2)ビットデータを送信する ; 2-1)ビット設定 SBRC R16,0 ;(1/2,3)R16(0)が'1'の時、'H'にする SBI PORTB,PI_TXD ;(2) SBRS R16,0 ;(1/2,3)R16(0)が'0'の時、'L'にする CBI PORTB,PI_TXD ;(2) LSR R16 ;(1) ; ; 2-2)1パルス作成 LDI R17,99 ;(1) SERTRN_2A: ; RJMP PC+1 ;(2) RJMP PC+1 ;(2) RJMP PC+1 ;(2) NOP ;(1) DEC R17 ;(1) BRNE SERTRN_2A ;(1/2) ; RJMP PC+1 ;(2) NOP ;(1) DEC R18 ;(1) BRNE SERTRN_2 ;(1/2) ; ; 3.ストップビットを送信 SBI PORTB,PI_TXD ;(2)TXDを設定 LDI R17,100 ;(1) SERTRN_3: ; RJMP PC+1 ;(2) RJMP PC+1 ;(2) RJMP PC+1 ;(2) NOP ;(1) DEC R17 ;(1) BRNE SERTRN_3 ;(1/2) ; 4.送信終了 SBI PORTB,PI_TXD ;(2)TXDを初期化 LDI R17,100 ;(1) SERTRN_4: ; RJMP PC+1 ;(2) RJMP PC+1 ;(2) RJMP PC+1 ;(2) NOP ;(1) DEC R17 ;(1) BRNE SERTRN_4 ;(1/2) ; ; 5.少し待つ LDI R17,100 ; SERTRN_5: ; RJMP PC+1 ;(2) RJMP PC+1 ;(2) RJMP PC+1 ;(2) DEC R17 ; BRNE SERTRN_5 RET