;****************************************************************************************** ; AVRサンプル ; Project : ; Program Name : ; Programer : ; Create date : Version 1.0 H23.02.02 ; History : ;****************************************************************************************** ; (1)Description ; ;****************************************************************************************** .include "m1284Pdef.inc" .cseg .org $0000 ; **************************** ; 1.初期設定 ; **************************** ; (1)スタック領域の設定 LDI R16,HIGH(RAMEND) ; スタック領域の設定 OUT SPH,R16 ; スタック領域の設定 LDI R16,LOW(RAMEND) ; スタック領域の設定 OUT SPL,R16 ; スタック領域の設定 ; (2)ポートの設定 LDI R16,0b00000000 ; PORTA(0-7)を全て入力にする OUT DDRA,R16 ; PORTA(0-7)を全て入力にする LDI R16,0b00000000 ; PORTB(0-7)を全て入力にする OUT DDRB,R16 ; PORTB(0-7)を全て入力にする LDI R16,0b00000000 ; PORTC(0-7)を全て入力にする OUT DDRC,R16 ; PORTC(0-7)を全て入力にする LDI R16,0b00000000 ; PORTD(0-7)を全て入力にする OUT DDRD,R16 ; PORTD(0-7)を全て入力にする ; (3)UARTの設定 RCALL UARTINI ; UARTを初期化 RCALL DEMO01 ; 接続メッセージを表示 ; **************************** ; 2.メインプログラム ; **************************** MAIN: ; (1)データを受信する RCALL UARTREC ; データを受信 ; (2)エコーバックする RCALL UARTTRN ; データを送信 ; RJMP MAIN ;****************************************************************************************** ; Function Name : DEMO01 ; Title : 接続メッセージ ; Input : ; Output : ; Description : ;****************************************************************************************** DEMO01: PUSH R16 ; LDI R16,'A' RCALL UARTTRN LDI R16,'T' RCALL UARTTRN LDI R16,'m' RCALL UARTTRN LDI R16,'e' RCALL UARTTRN LDI R16,'g' RCALL UARTTRN LDI R16,'a' RCALL UARTTRN LDI R16,'1' RCALL UARTTRN LDI R16,'2' RCALL UARTTRN LDI R16,'8' RCALL UARTTRN LDI R16,'4' RCALL UARTTRN LDI R16,'P' RCALL UARTTRN LDI R16,' ' RCALL UARTTRN LDI R16,'C' RCALL UARTTRN LDI R16,'o' RCALL UARTTRN LDI R16,'n' RCALL UARTTRN LDI R16,'n' RCALL UARTTRN LDI R16,'e' RCALL UARTTRN LDI R16,'c' RCALL UARTTRN LDI R16,'t' RCALL UARTTRN LDI R16,'e' RCALL UARTTRN LDI R16,'d' RCALL UARTTRN LDI R16,' ' RCALL UARTTRN LDI R16,'O' RCALL UARTTRN LDI R16,'K' RCALL UARTTRN LDI R16,'>' RCALL UARTTRN LDI R16,' ' RCALL UARTTRN ; POP R16 RET ;****************************************************************************************** ; Function Name : UARTINI ; Title : UARTを初期化する(UCR/UBRR) ; Input : ; Output : ; Description : 内部OSC8MHz / 9600BPS用 ;****************************************************************************************** UARTINI: PUSH R16 ; **************************** ; 1.UCRレジスタの設定 ; **************************** LDI R16,(0< UBRR=Fck/(16*BAUD) - 1 ; 8MHz,9600BAUDの時, UBRR=8M/(16*9600)-1=>51.08(Dec)=>33(Hex) LDI R16,0x33 STS UBRR0L,R16 LDI R16,0x00 STS UBRR0H,R16 POP R16 RET ; ;****************************************************************************************** ; Function Name : UARTREC ; Title : シリアルデータを受信する(USR/UDR) ; Input : ; Output : R16 ;****************************************************************************************** UARTREC: ; ************************************ ; 1.シリアルデータの入力を待つ ; ************************************ LDS R16,UCSR0A SBRS R16,RXC0 RJMP UARTREC ; ************************************ ; 2.シリアルデータを設定 ; ************************************ LDS R16,UDR0 RET ;****************************************************************************************** ; Function Name : UARTTRN ; Title : シリアルデータを送信する(USR/UDR) ; Input : R16 ; Output : ;****************************************************************************************** UARTTRN: PUSH R17 UARTTRN1: ; ***************************** ; 1.送信バッファ空き待機 ; ***************************** LDS R17,UCSR0A SBRS R17,UDRE0 RJMP UARTTRN1 ; ***************************** ; 2.シリアルデータを設定 ; ***************************** STS UDR0,R16 POP R17 RET