●LED電飾搭載 ( 小型潜航艦 ファースト1 ) Ver 2

@LED(発光ダイオード)が点滅/点灯する部分

 PICで、LEDが、点滅/点灯する部分(7箇所)です。

    ■赤色の円部分 : 点滅(2回連続)して、しばらく消燈する。

    ■黒色の円部分 : 常に点灯する。

 → これを繰り返すようにプログラミングしました。






APICボードの配置

メカボックスのふた裏側に、PICボードを配置しました。




B点灯した状態です。



CPIC基板の配線図

 LEDに接続する線は、点滅用と点灯用の2種類で構成しています。

  → この線(それぞれの+−)に、点滅用LED、点灯用LEDを継げばOKです。


DPICプログラムのソース (FIRST1V2.ASM)

;------------------------------------------------------------------------------------------
; ●プログラム : FIRST1V2   ●言語 : PA(秋月電子通商製作アセンブラ)
; ●タイトル  : LED(09)点滅 LED(10)点灯 プログラム(VER.2)
;                   ___________________ ____________________
;                  |                   V                    |
;                  |                                        |
;	        >--+ 1 RA2 PORTA(BIT2) | PORTA(BIT1) RA1 18 +--<
;	        >--+ 2 RA3 PORTA(BIT3) | PORTA(BIT0) RA0 17 +--<
;	ミシヨウ     --+ 3 RA4 PORTA(BIT4) |            OSC1 16 +--< オシレータ端子/外部クロック入力
;               >--+ 4 MCLR            |            OSC2 15 +--> オシレータ端子/クロック出力
;       0V       --+ 5 Vss (-)         |         (+) Vdd 14 +--  3〜5V+
;               >--+ 6 RB0 PORTB(BIT0) | PORTB(BIT7) RB7 13 +--<
;               >--+ 7 RB1 PORTB(BIT1) | PORTB(BIT6) RB6 12 +--<
;               >--+ 8 RB2 PORTB(BIT2) | PORTB(BIT5) RB5 11 +--<
;       LED(09) <--+ 9 RB3 PORTB(BIT3) | PORTB(BIT4) RB4 10 +--> LED(10)
;                  |                                        |
;                  +----------------------------------------+ 
; 1ピン(20mA)              PIC16F84-20/P         Copyright (c) 2003.12.27 by T.EJIRI
;------------------------------------------------------------------------------------------
		INCLUDE	16F84.H			;プロセッサの仕様の変数宣言
;------------------------------------------------------------------------------------------
;	コンフィギュレーション・レジスタの設定
;------------------------------------------------------------------------------------------
		.OSC		HS		;オシレータ・タイプ(HS:高速クリスタル)の設定
		.PWRT		ON		;パワーアップ・タイマ(ON:有効)の設定
		.WDT		OFF		;ウォッチドッグ・タイマ(OFF:無効)の設定
		.PROTECT	OFF		;コード・プロテクト(OFF:無効)の設定
;------------------------------------------------------------------------------------------
;	汎用レジスタ エリア 68バイト (SRAM) 変数定義
;------------------------------------------------------------------------------------------
		ORG	0CH			;汎用レジスタ開始アドレス(000C番地)

POI		DS	1			;          エリア (1バイト)
WK		DS	1                       ;Wレジスタ・ワーク エリア (1バイト)
TM1		DS	1                       ;タイマーカウント1 エリア (1バイト)
TM2		DS	1                       ;タイマーカウント2 エリア (1バイト)
;------------------------------------------------------------------------------------------
;	リセット処理
;------------------------------------------------------------------------------------------
		ORG	0                       ;リセット・ベクタ  アドレス(0000番地)
		GOTO	START                   ;プログラムの開始点(START)へジャンプ
;------------------------------------------------------------------------------------------
;	外部割り込み処理
;------------------------------------------------------------------------------------------
		ORG	4                       ;外部割り込みベクタ アドレス(0004番地)
		GOTO	START                   ;プログラムの開始点(START)へジャンプ
;------------------------------------------------------------------------------------------
;	ゲット パターン ルーチン LEDの点灯パターン
;------------------------------------------------------------------------------------------
GETPATTERN
		JMP	PC+W                    ;Wレジスタに?をセットして、RETURNする
		RETW	0000b,00011000b		;PC+=W+1 テーブル参照		
		RETW	0000b,00010000b		;プログラム・カウンタ
		RETW	0000b,00010000b		;
		RETW	0000b,00010000b		;
		RETW	0000b,00010000b		;
		RETW	0000b,00010000b		;
		RETW	0000b,00011000b		;
		RETW	0000b,00010000b		;
		RETW	0000b,00010000b		;
		RETW	0000b,00010000b		;
		RETW	0000b,00010000b		;
		RETW	0000b,00010000b		;

		RETW	0000b,00010000b		;
		RETW	0000b,00010000b		;
		RETW	0000b,00010000b		;
		RETW	0000b,00010000b		;
		RETW	0000b,00010000b		;
		RETW	0000b,00010000b		;
		RETW	0000b,00010000b		;
		RETW	0000b,00010000b		;
		RETW	0000b,00010000b		;
		RETW	0000b,00010000b		;
		RETW	0000b,00010000b		;
		RETW	0000b,00010000b		;

;------------------------------------------------------------------------------------------
;	開始プログラム
;------------------------------------------------------------------------------------------
START                                           ;プログラムの始まり
		CLR	ra			;RA=0		
		CLR	rb			;RB=0	
		MOV	!ra,#0 			;Aポート出力設定
		MOV	!rb,#0 			;Bポート出力設定

MAIN0
		CLR	POI			;POI=0

MAIN
		MOV	WK,POI			;WK=POI
		CLC				;CF=0
		RL	WK			;WKを左へシフト(1ビット)

		MOV	W,WK			;W=WK
		CALL	GETPATTERN		;ゲットパターンルーチン呼び出し
		MOV	ra,W			;RA=W
		
		INC	WK			;WK++

		MOV	W,WK			;W=WK
		CALL	GETPATTERN		;ゲットパターンルーチン呼び出し
		MOV	rb,W			;RB=W
		
		CALL	WAIT			;ループ・タイマールーチンの呼び出し
		
		INC	POI			;POI++
		CJB	POI,#24,MAIN		;IF POI <24 の時 mainへジャンプ
		GOTO	MAIN0			;main0へジャンプ
;------------------------------------------------------------------------------------------
;	ループ・タイマー ルーチン
;------------------------------------------------------------------------------------------
WAIT
		CLR	TM1			;TM1=0
WAIT0
		CLR	TM2			;TM2=0
WAIT1
		NOP				;1クロック時間を消費する

		DJNZ	TM2,WAIT1		;TM2=TM2-1 IF TM2 NOT= 0 の時 wait1へジャンプ
		DJNZ	TM1,WAIT0		;TM1=TM1-1 IF TM1 NOT= 0 の時 wait0へジャンプ

		RET				;ループ・タイマー ルーチンの出口
;------------------------------------------------------------------------------------------
						;プログラムの終了
;------------------------------------------------------------------------------------------