; Copyright 2005 Doi Shigeki ;list0904.asm ATtiny2313テスト・プログラム4 ; ウィンドウからの制御 ; 内部8MHzクロックを想定 .include "tn2313def.inc" .org 0x0 ;割り込みは使用しないので ;ベクトル省略 reset: LDI R16,LOW(RAMEND) ;スタック・ポインタの設定 OUT SPL,R16 LDI R16,0b00000000 ;ポートBを入力に設定 OUT DDRB,R16 LDI R16,0b11111111 ;ポートDを出力に設定 OUT DDRD,R16 LDI R16,0 ;9600ボー/8MHzクロック OUT UBRRH,R16 LDI R16,51 OUT UBRRL,R16 LDI R16,0b00011000 ;送受信イネーブル OUT UCSRB,R16 LDI R16,0b00000110 ;8ビット,パリティなし,ストップ・ビット1 OUT UCSRC,R16 LDI R17,0 ;PCから受信チェック check: SBIC UCSRA,RXC ;RXC=0なら受信なし,スキップ RCALL getch IN R16,PINB ;スイッチ読み込み ANDI R16,0b00001111 CP R16,R17 BREQ check ;変化なしならスキップ RCALL putch RJMP check getch: IN R16,UDR ;受信レジスタからデータ取り出し LSL R16 LSL R16 OUT PORTD,R16 ;LEDへ出力 RET putch: MOV R17,R16 ;旧データを更新 ORI R16,0x30 ;一応数字に加工 put2: SBIS UCSRA,UDRE ;UDRE=1なら送信レジスタ空き,スキップ RJMP put2 OUT UDR,R16 ;PCへ送信 RCALL wait12 ;チャタリング・キャンセル RET ; ;時間待ち 12.5ms/8MHzクロック ; wait12: LDI R19,100 wait122: RCALL wait01m DEC R19 BRNE wait122 RET ; ;時間待ち 約0.125ms/8MHzクロック ; wait01m: LDI R20,250 wait01m2: NOP DEC R20 BRNE wait01m2 RET