目次>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
; =========================== ここまで ===============================