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