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