目次>8章.機能が豊富なPICを使う(PIC12F683)>ピン変化割り込みを使う>ソース
ピン変化割り込みを使う(PIC12F683)(ソース)
更新日2006.7.3
以下のソースを取り込んで、アセンブル→PIC書き込み→実行して下さい。
; ========================== ここから ==============================
;
; PIC12F683
; clock:INTOSCIO 8MHz
;
; ピン変化割込みのテスト
; GP3 : スイッチ(ピン変化割り込み)
; GP0-2 : LED(ピン変化割込み回数を2進数で表示)
;
;
LIST P=12f683
#INCLUDE <p12f683.inc>
__CONFIG _CP_OFF & _CPD_OFF & _WDT_OFF & _BOD_ON & _IESO_OFF& _PWRTE_ON & _INTOSCIO & _MCLRE_OFF
save_st EQU 020h ; STATUSのセーブ領域
save_w EQU 021h ; W-regのセーブ領域
flag EQU 022h ; 割り込みフラグ
icnt EQU 023h ; ピン変化割り込みカウンタ
ORG 0
GOTO INIT
; ==============================================================
ORG 4
; 割込み処理(ピン変化割り込み)
MOVWF save_w ;W-regセーブ
SWAPF STATUS,W
MOVWF save_st ;STATUSレジスタセーブ
BCF INTCON,GPIF ;ピン変化割込みフラグクリア
BTFSC GPIO,3 ;0→1の変化のみ拾う
BSF flag,0 ;ピン変化割り込みフラグON
SWAPF save_st,W
MOVWF STATUS ;STATUSレジスタロード
SWAPF save_w,F
SWAPF save_w,W ;W-regロード
RETFIE ;割込み許可リターン
; ==============================================================
; PICの初期化
INIT
; GPIOをデジタルI/Oに設定
CLRF GPIO
MOVLW 07h
MOVWF CMCON0 ;GP2-0はデジタルIO
BSF STATUS,RP0 ;■バンク1に切替え
CLRF ANSEL ;デジタルIO(AN機能を使用しない)
MOVLW 038h ;GP0-2:output GP3-5:input
MOVWF TRISIO
; 内部クロックを8MHzに設定
MOVLW 070h
MOVWF OSCCON ; CLOCK=8MHz
; ピン変化割り込み設定
MOVLW 08h
MOVWF IOC ; GP3:ピン変化割り込み有効
BCF STATUS,RP0 ;■バンク0に切替え
MOVLW 088h ; GIE,GPIE on
MOVWF INTCON
CLRF flag
CLRF icnt
; ==============================================================
; メイン処理
MAIN
BTFSS flag,0 ;ピン変化割り込み発生?
GOTO MAIN ; No
BCF flag,0 ;ピン変化割り込みフラグクリア
INCF icnt,F ;ピン変化割り込みカウンタ+1
BCF icnt,3 ;GP3の状態を
BTFSC GPIO,3 ;保持して
BSF icnt,3 ;カウンタ値を
MOVF icnt,W ;GPIOに
MOVWF GPIO ;セットする
GOTO MAIN
END
; =========================== ここまで ===============================