; Copyright 2005 Doi Shigeki ;list0906.asm mega162 テスト・プログラム2 ; シリアル通信 ; 内部8MHzクロックを想定 .include "m162def.inc" .org 0x0 ;割り込みは使用しないので ;ベクトル省略 reset: LDI R16,LOW(RAMEND) ;スタック・ポインタの設定 OUT SPL,R16 LDI R16,HIGH(RAMEND) ;RAMのサイズが大きいので2バイト設定する OUT SPH,R16 LDI R16,0b00000000 ;ポートAを入力に設定 OUT DDRA,R16 LDI R16,0b11111111 ;ポートCを出力に設定 OUT DDRC,R16 LDI R16,0 ;9600ボー/8MHzクロック OUT UBRR0H,R16 LDI R16,51 OUT UBRR0L,R16 LDI R16,0b00011000 ;送受信イネーブル OUT UCSR0B,R16 LDI R16,0b10000110 ;UCSR0C選択,8ビット,パリティなし,ストップ・ビット1 OUT UCSR0C,R16 ;PCから受信,LEDへエコー check: SBIS UCSR0A,RXC ;RXC=1なら受信あり,スキップ RJMP check IN R16,UDR ;受信レジスタからデータ取り出し OUT PORTC,R16 ;LEDへ出力 ;PCへエコー check2: SBIS UCSR0A,UDRE ;UDRE=1なら送信レジスタ空き,スキップ RJMP check2 OUT UDR,R16 ;PCへ送信 IN R16,PINA ;スイッチ読み込み ANDI R16,0b00001111 ;データを数字に ORI R16,0x30 ;スイッチの状態をPCへ送信 check3: SBIS UCSR0A,UDRE ;UDRE=1なら送信レジスタ空き,スキップ RJMP check3 OUT UDR,R16 ;PCへ送信 RJMP check