; ; LED-FLASHER R8C/15(R5F21154SP) 2005.06 ; ; Copyright 2006 mimiham (mimi@ham.chan.ne.jp) ; HomePage : http://roo.to/monodukuri/ ; ; P1_0 : LED1 ; P1_1 : LED2 ; P1_2 : LED3 ; P1_3 : LED4 ; P1_6 ; SW1 ; P1_7 ; SW2 ; .INCLUDE sfr_r815.inc ; ハードウェア定義ファイル ; プログラム部分 .SECTION PROGRAM, CODE .ORG 0D000h Start: ; 実行開始 LDC #0500h, isp JSR SetClock20MHz ; 外部クロック JSR InitPort ; ポート初期化 Loop: BTST p1_7 ; スイッチ2の状態を見る(Cフラグに転送する) JNC Ptn1 ; Cフラグが"0"(スイッチON)ならPtn1サブルーチンを呼ぶ BTST p1_6 ; スイッチ1の状態を見る(Cフラグに転送する) JNC Ptn2 ; Cフラグが"0"(スイッチON)ならPtn2サブルーチンを呼ぶ BSET p1_0 ; p1_0 off BSET p1_1 ; p1_1 off BSET p1_2 ; p1_2 off BSET p1_3 ; p1_3 off JMP Loop ; Loop にジャンプ ; パターン1 Ptn1: MOV.B #00001110b, p1 JSR Wait100mS ; 0.1秒待ちサブルーチン MOV.B #00001101b, p1 JSR Wait100mS ; 0.1秒待ちサブルーチン MOV.B #00001011b, p1 JSR Wait100mS ; 0.1秒待ちサブルーチン MOV.B #00000111b, p1 JSR Wait100mS ; 0.1秒待ちサブルーチン MOV.B #00001011b, p1 JSR Wait100mS ; 0.1秒待ちサブルーチン MOV.B #00001101b, p1 JSR Wait100mS ; 0.1秒待ちサブルーチン JMP Loop ; Loop にジャンプ ; パターン2 Ptn2: MOV.B #00001110b, p1 JSR Wait100mS ; 0.1秒待ちサブルーチン MOV.B #00001100b, p1 JSR Wait100mS ; 0.1秒待ちサブルーチン MOV.B #00001000b, p1 JSR Wait100mS ; 0.1秒待ちサブルーチン MOV.B #00000000b, p1 JSR Wait100mS ; 0.1秒待ちサブルーチン MOV.B #00000001b, p1 JSR Wait100mS ; 0.1秒待ちサブルーチン MOV.B #00000011b, p1 JSR Wait100mS ; 0.1秒待ちサブルーチン MOV.B #00000111b, p1 JSR Wait100mS ; 0.1秒待ちサブルーチン MOV.B #00001111b, p1 JSR Wait100mS ; 0.1秒待ちサブルーチン JMP Loop ; Loop にジャンプ ; 外部クロックに切り替えるサブルーチン SetClock20MHz: BSET prc0 BSET cm13 BSET cm15 BCLR cm05 BCLR cm16 BCLR cm17 BCLR cm06 NOP NOP NOP NOP BCLR ocd2 BCLR prc0 RTS ; サブルーチンから復帰する ; ポートの初期化を行うサブルーチン InitPort: MOV.B #00001111b, drr ; 駆動能力の設定 MOV.B #00001111b, p1 ; ポート出力の初期値 MOV.B #00001111b, pd1 ; ポートの入出力を設定(入力:0 出力:1) RTS ; サブルーチンから復帰 ; 0.1秒待ちサブルーチン Wait100mS: PUSH.W r1 ; R1レジスタ待避 MOV.W #10, r1 ; #10 = 100ms Wait100mS_1: JSR Wait10mS ; 10m秒待ちサブルーチンを呼び出す SBJNZ.W #1, r1, Wait100mS_1 POP.W r1 ; R1レジスタの復旧 RTS ; サブルーチンから復帰する ; 0.5秒待ちサブルーチン Wait500mS: PUSH.W r1 ; R1レジスタを待避 MOV.W #50, r1 Wait500mS_1: JSR Wait10mS ; 10m秒待ちサブルーチンを呼び出す SBJNZ.W #1, r1, Wait500mS_1 POP.W r1 ; R1レジスタを復旧 RTS ; サブルーチンから復帰する ; 10m秒待ちサブルーチン Wait10mS: PUSH.W r0 ; R0レジスタを待避する MOV.W #28571, r0 Wait10mS_1: SBJNZ.W #1, r0, Wait10mS_1 POP.W r0 ; R0レジスタを復旧 RTS ; サブルーチンから復帰する ; リセットベクタ部分 .SECTION FIXVECTOR, ROMDATA .ORG 0FFFCh Reset: .LWORD Start | 0FF000000h ; 実行開始箇所を指定 .END