目次>8章.機能が豊富なPICを使う(PIC12F683)>内部クロックを使う>ソース
内部クロックを使う(ソース)
更新日2005.12.17
以下のソースを取り込んで、アセンブル→PIC書き込み→実行して下さい。
; ========================== ここから ==============================
;
; PIC12F683
; clock:INTOSCIO 8MHz
;
; 内部クロック(8MHz)の動作確認
; 全てのピン(6ピン)をデジタルIOで使用
; GP0-2,GP4-5:LED(5個)
; GP3: 未使用
;
; 0.5秒毎にLEDを点滅させる
; 時間は、命令のループにより待ち合わせる
;
;
LIST P=12f683
#INCLUDE <p12f683.inc>
__CONFIG _CP_OFF & _CPD_OFF & _WDT_OFF & _BOD_ON & _IESO_OFF& _PWRTE_ON & _INTOSCIO & _MCLRE_OFF
T05mCNT EQU 020h ;0.5mSループカウンタ
T100CNT EQU 021h ;100mSループカウンタ
T05SCNT EQU 022h ;0.5Sループカウンタ
ORG 0
; PICの初期化
INIT
MOVLW 07h
MOVWF CMCON0 ;GP2-0はデジタルIO
BSF STATUS,RP0 ;■バンク1に切替え
CLRF TRISIO ; GP0-5は出力
MOVLW 070h ; CLOCK=8MHz
MOVWF OSCCON
CLRF ANSEL ;デジタルIO(AN機能を使用しない)
BCF STATUS,RP0 ;■バンク0に切替え
; メイン処理
MAIN
MOVLW 03Fh
MOVWF GPIO ; 5個のLED全て点灯
CALL T05S ; 0.5秒待つ
CLRF GPIO ; 5個のLED全て消灯
CALL T05S ; 0.5秒待つ
GOTO MAIN
; タイマルーチン
; << 0.5S待つサブルーチン >>
T05S
MOVLW D'5' ; ループ回数5を
MOVWF T05SCNT ; セット
T05LP CALL T100mS ; 100mS待つ
DECFSZ T05SCNT,F ; ループ回数−1して0になったら次の命令をスキップ
GOTO T05LP
RETURN ; このサブルーチン呼出し元に戻る
; << 100mS待つサブルーチン >>
T100mS
MOVLW D'200' ; ループ回数200を
MOVWF T100CNT ; セット
T100LP CALL T05mS ; 0.5mS待つ
DECFSZ T100CNT,F ; ループ回数−1して0になったら次の命令をスキップ
GOTO T100LP ;
RETURN ; このサブルーチン呼出し元に戻る
; << 0.5mS待つサブルーチン >>
T05mS
MOVLW D'249' ; ループ回数249を
MOVWF T05mCNT ; セット
T05mLP NOP ; 何もせず1サイクル消費
DECFSZ T05mCNT,F ; ループ回数−1して0になったら次の命令をスキップ
GOTO T05mLP ;
RETURN ; このサブルーチン呼出し元に戻る
END
; =========================== ここまで ===============================