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