nobcha23の日記

PICマイコンやArduinoを使う電子回路遊びを紹介します

PIC12F629 LEDの単純ON/OFF プログラム

プログラムの方も載せておきます。色々なブログを参考にして作成しました。ありがとうございます。


; BUCK BOOST LED点灯プログラム
; GP2にR経由でTR接続、インダクタを駆動して倍電圧発生
; GP2を2μS間ON,GP3スイッチの状態見て、10μS/50μSOFF
;  
; P=PIC12F629
; P12F629.INC
; __config _CPD_OFF & _CP_OFF & _BODEN_OFF & _MCLRE_OFF & _PWRTE_ON & _WDT_OFF & _INTRC_OSC_NOCLKOUT
EQU 20H
;20hからユーザーエリア タイマー値<
EQU 21H
;タイマー値
STATUS,RP0 ;bank1に切り替え
call         h'3ff'           
;OSCCAL Valueの読み込み

    movwf     OSCCAL     
;読み込んだ校正値をOSCCALレジスタにセット

    clrf         INTCON       
;INTは使わない

    movlw     b'00000111'   
;GP0,GP1,GP2デジタルI/O

    movwf     CMCON       
;COMPARATOR 使用せず

    movlw     b'00001000'   
;GP3入力、GP0,GP1,GP2,GP4,GP5出力設定 

    movwf     TRISIO        
;TRIS制御レジスタに設定

    movlw     b'00000000'   
;bit7=0内部プルアップ

    movwf     OPTION_REG ;設定



    bcf         STATUS,RP0 
;bank0に



loop                               
;

    bsf         GPIO,2          
;GP2 ON

    bcf         GPIO,2          
;GP2 OFF

    movlw     5                  
;OFF時間の設定 10μS

    btfss       GPIO,3          
;GP3 1なら次の命令スキップ、カウント10

    movlw     20                
;GP3がスイッチOFFならデューティ下げる LED暗い

    call         offtimer        
;OFF時間稼ぎのタイマーへ行く

    goto        loop 



offtimer

    movwf     count1         
;WREGの内容をタイマカウントへ

wait

    decfsz     count1,1       
;カウンタ値を1減算し元に戻す。結果が0なら次スキップ

    goto        wait             
;

    return



    org         03FFh

    retlw      0x20



END





追っかけ後の書き込みで説明ありますが。OSCCALの設定は上記のやり方でも動きますが、メーカ説明ではちょっと違います。すなわち、マイコンは最後番地からスタートするので、最終番地はダイレクト値をWに入れ0番地に来る、従って、それをOSCCALにMOVせよということのようです。C言語のときはOSCAL=・・・・という記述が必要。

KKmoon レシーバーキット エアバンドラジオ レシーバー DIYキット 航空バンドレシーバー 高感度



ホームページ