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