目次>5章 第2ステップ(色々な実験)>フルカラーLEDを使う〜動作確認〜>ソース

フルカラーLEDを使う〜動作確認〜(ソース)

更新日2006.11.13

以下のソースを取り込んで、アセンブル→PIC書き込み→実行して下さい。

; ========================== ここから ==============================
;	clock:20MHz
;
;	フルカラーLEDの実験(基本動作確認)
;	PORTBを1秒毎に+1する(8色を表現)
;
;	RB0-2:3色LED RB2 BLUE ,RB1 GREEN ,RB0 RED
;
;	TMR0割込み
;		TMR0		0(フリーラン)
;		プリスケーラ	2
;		TMR0割込み間隔	0.2uS×256×2=102.4uS
;
;
       LIST    P=PIC16F84A  ; LIST宣言で使用するPICを16F84Aと定義する。
       INCLUDE P16F84A.INC  ; 設定ファイルp16f84a.incを読み込む。
       __CONFIG _HS_OSC & _WDT_OFF & _PWRTE_ON & _CP_OFF


	CBLOCK	0Ch
	save_w
	save_st
	timer		; 0:102.4uS ,1:0.5S
	cnt20mS		; 20mSカウンタ
	cnt1S		; 0.5Sカウンタ
	PB_work		; PORTBにセットする値
	ENDC

f102uS	EQU	0	; 102.4uSフラグ
f20mS	EQU	1	; 20mSフラグ
f1S	EQU	2	; 1Sフラグ
c20mS	EQU	d'195'	; 102.4uS×195=20mS
c1S	EQU	d'50'	; 20mS×50=1S


	ORG	0
	GOTO	init

; =================== TMR0割込み処理 =========================
	ORG	4		;割込みの入口

	BCF	INTCON,T0IF	;割込みフラグクリア
	MOVWF	save_w		;W-regセーブ
	SWAPF	STATUS,w
	MOVWF	save_st		;STATUSセーブ

	BSF	timer,f102uS	;102.4uSフラグセット

	DECFSZ	cnt20mS,F
	GOTO	int_exit
	MOVLW	c20mS
	MOVWF	cnt20mS		;20mSカウンタセット
	BSF	timer,f20mS	;20mSフラグセット

	DECFSZ	cnt1S,F
	GOTO	int_exit
	MOVLW	c1S
	MOVWF	cnt1S		;1Sカウンタセット
	BSF	timer,f1S	;1Sフラグセット

int_exit
	SWAPF	save_st,w
	MOVWF	STATUS		;STATUSロード
	SWAPF	save_w,f
	SWAPF	save_w,w	;W-regロード
	RETFIE			;割込み許可リターン


; ===================== 初期処理 ==================================
init
	BSF	STATUS,RP0	; ■バンク1
	MOVLW	0F8h
	MOVWF	TRISB		; PORTB設定(RB0-2:出力,RB3-7:入力)
	MOVLW	080h		; TMR0プリスケーラ:2(0.2μS*2=0.4μS)
	MOVWF	OPTION_REG	; 
	BCF	STATUS,RP0	; ■バンク0
	MOVLW	0A0h		; INTCONの設定
	MOVWF	INTCON		; GIE:1 ,T0IE:1 (TMR0割込み有効)
	CLRF	TMR0		; TMR0をクリア

	MOVLW	c20mS
	MOVWF	cnt20mS		;20mSカウンタセット
	MOVLW	c1S
	MOVWF	cnt1S		;1Sカウンタセット

	MOVLW	00h
	MOVWF	PB_work		; 赤・緑・青のLEDをON(白)
	MOVLW	0FFh
	MOVWF	PORTB

; ===================== メイン処理 ================================
main
	BTFSC	timer,f1S	;1Sフラグセット?
	CALL	rgb_set
	GOTO	main

; ===================== 3色LED設定処理 ========================
rgb_set
	BCF	timer,f1S	;1Sフラグクリア
	INCF	PB_work,F
	COMF	PB_work,W
	MOVWF	PORTB
;
;	RB2 RB1 RB0
;	 B   G   R

;	 0   0   0	無
;	 0   0   1	赤
;	 0   1   0	緑
;	 0   1   1	黄
;	 1   0   0	青
;	 1   0   1	桃
;	 1   1   0	水
;	 1   1   1	白

	RETURN

	END
; =========================== ここまで ===============================