; トランジスタ技術 2005年4月号 ; 第1章 最初のプログラム .INCLUDE sfr_r815.inc ; ハードウェア定義ファイルの読込み ; プログラム部分 .SECTION PROGRAM, CODE .ORG 0D000h Start: ; (B)ここから実行開始 MOV.B #00000011b, drr ; 駆動能力の設定 MOV.B #00000011b, p1 ; ポートに出力する初期値の設定 MOV.B #00000011b, pd1 ; ポートの方向を出力に設定 MOV.B #00110000b, p3 ; ポートに出力する初期値の設定 MOV.B #00110000b, pd3 ; ポートの方向を出力に設定 MOV.B #00000101b, u0mr ; 送受信モード 8ビット・パリティ無 MOV.B #00000000b, u0c0 ; 送受信制御0 f1:20M MOV.B #00000101b, u0c1 ; 送受信制御1 送受許可 MOV.B #10000001b, u0brg ; ビットレート 20M/16/(129+1)=9600bps MOV.B #41H, R0L ; 'A' MOV.B #10010000b, tzmr ; タイマーZ MOV.B #00000010b, prez ; プリスケーラ MOV.B #01000000b, tzsc ; セカンダリ MOV.B #10000000b, tzpr ; プライマリ MOV.B #00000000b, tzoc ; 出力制御 MOV.B #00000000b, pum ; 波形制御 MOV.B #00000000b, tcss ; カウントソース MOV.B #00000001b, adcon2 ; SHあり MOV.B #10011110b, adcon0 ; A/D変換入力AN10 MOV.B #00100000b, adcon1 ; Vref接続 BSET adst ; A/Dスタート Loop: BCLR p1_0 ; REDを消灯する BSET p1_1 ; GRNを点灯する BTST p1_6 ; LFTを確認する JC lftoff BCLR p3_4 ; LFTを点灯する JMP rgton lftoff: BSET p3_4 ; LFTを消灯する rgton: BCLR p3_5 ; RGTを点灯する ; MOV.B #01010110b, adcon0 ; A/D変換トリガ MOV.B #10000000b, tzsc ; セカンダリPWM-High MOV.B #01000000b, tzpr ; プライマリ MOV.B ad,R0H ; AD取り込み AND.B #7Fh,R0H ; ASCIIのみ MOV.B R0H, u0tb ; シリアル送信 MOV.W #50, r1 ; 以下の10ミリ秒ループを50回まわって0.5秒待つ Wait01: MOV.W #28571, a0 ; 10ミリ秒ループ(値の求め方は本文参照) Wait02: SBJNZ.W #1, a0, Wait02 ; 10ミリ秒ループ実行 SBJNZ.W #1, r1, Wait01 ; 0.5秒ループ実行 BSET p1_0 ; REDを点灯する BCLR p1_1 ; GRNを消灯する BTST p1_7 ; RGTを確認する JC rgtoff BCLR p3_5 ; RGTを点灯する JMP lfton rgtoff: BSET p3_5 ; RGTを消灯する lfton: BCLR p3_4 ; LFTを点灯する MOV.B #01000000b, tzsc ; セカンダリPWM-Low MOV.B #10000000b, tzpr ; プライマリ MOV.B R0L, u0tb ; 送信バッファ CMP.B #5AH, R0L ; 'Z' JNC charup ; 符号付無で小さい MOV.B #40H, R0L ; 'A'-1 charup: INC.B R0L MOV.W #50, r1 ; 以下の10ミリ秒ループを50回まわって0.5秒待つ Wait03: MOV.W #28571, a0 ; 10ミリ秒ループ(値の求め方は本文参照) Wait04: SBJNZ.W #1, a0, Wait04 ; 10ミリ秒ループ実行 SBJNZ.W #1, r1, Wait03 ; 0.5秒ループ実行 JMP Loop ; LED点滅を繰り返す ; リセットベクタ部分 .SECTION FIXVECTOR, ROMDATA .ORG 0FFFCh Reset: .LWORD Start | 0FF000000h ; (A)実行開始箇所を指定する .END