LED回路 工作部屋 > PIC16F629 割り込みの使い方 【最終更新日:2011/6/21】
PIC16F629 割り込みの使い方
割り込みの設定手順

@ org 0 に開始アドレスを、org 4 に割り込み時に処理を行うアドレスを記載する

A 割り込みを使用可能にする

主に使用するレジスタ
Bank0
INTCON GIE PEIE T0IE INTE GPIE T0IF INTF GPIF
PIR1 EEIF - - - CMIF - - TMR1IF
Bank1
OPTION_REG GPPU INTEDG T0CS T0SE PSA PS2 PS1 PS0
PIE1 EEIE - - - CMIE - - TMR1IE
IOC - - IOC5 IOC4 IOC3 IOC2 IOC1 IOC0
レジスタの説明
INTCON bit7 GIE
グローバル割り込みイネーブルビット
1 = すべてのマスクされていない割り込みを使用可能にする
0 = すべての割り込みを使用不可にする
bit6 PEIE
周辺機能割り込みイネーブルビット
1 = すべてのマスクされていない周辺機能割り込みを使用可能にする
0 = すべての周辺機能割り込みを使用不可にする
※周辺機能とはPIE1で設定する項目
bit5 T0IE
TMR0 オーバーフロー割り込みイネーブルビット
1 = TMR0 割り込み発生を使用可能にする
0 = TMR0 割り込み発生を使用不可にする
bit4 INTE
GP2/INT 外部割り込みイネーブルビット
1 = GP2/INT 外部割り込み発生を使用可能にする
0 = GP2/INT 外部割り込み発生を使用不可にする
bit3 GPIE
GPポート 変化割り込みイネーブルビット
1 = GPポート 変化割り込み発生を使用可能にする
0 = GPポート 変化割り込み発生を使用不可にする
※ 変化割り込みを使用する場合、IOCで対象ポートを選択する
bit2 T0IF
TMR0 割り込みフラグビット
1 = TMR0 レジスタがオーバーフローした(ソフトウェアでクリア要)
0 = TMR0 レジスタがオーバーフローしていない
bit1 INTF
外部割り込みフラグビット
1 = GP2/INT 外部割り込みが発生した(ソフトウェアでクリア要)
0 = GP2/INT 外部割り込みが発生していない
bit0 GPIF
GPポート 変化割り込みフラグビット
1 = GPポート 変化割り込みが発生した(ソフトウェアでクリア要)
0 = GPポート 変化割り込みが発生していない
PIR1 周辺機能の割り込みイネーブルビットを設定します
bit7 EEIE
EEPROM ライト割り込みフラグビット
1 = EEPROM ライト割り込みが発生した(ソフトウェアでクリア要)
0 = EEPROM ライト割り込みが発生していない
bit3 CMIE
コンパレータ割り込みフラグビット
1 = コンパレータ割り込みが発生した(ソフトウェアでクリア要)
0 = コンパレータ割り込みが発生していない
bit0 TMR1IE
TMR1IE オーバーフロー割り込みフラグビット
1 = TMR1IE オーバーフロー割り込みが発生した(ソフトウェアでクリア要)
0 = TMR1IE オーバーフロー割り込み発生していない
OPTION_REG bit7 GPPU
GPIO プルアップイネーブルビット
1 = GPIO プルアップを使用不可にする
0 = GPIO プルアップを使用可能にする
bit6 INTEDG
割り込みエッジ選択ビット
1 = ピンの立ち上がりエッジにより割り込み
0 = ピンの立ち下がりエッジにより割り込み
bit5 T0CS
TMR0 クロックソース選択ビット
1 = GP2/T0CKI 入力
0 = 内部命令サイクルクロック (CLKOUT)
bit4 T0SE
割り込みエッジ選択ビット
1 = GP2/T0CKI 入力が HighからLow でインクリメント
0 = GP2/T0CKI 入力が LowからHigh でインクリメント
bit3 PSA
プリスケーラ(分周)割り当てビット
1 = プリスケーラは WDT に割り当てる
0 = プリスケーラは TIMER0 に割り当てる
bit2-0 PS2:PS0
プリスケーラ レート選択ビット
BitValue TMR0Rate WDTRate
000-1:2-1:1
001-1:4-1:2
010-1:8-1:4
011-1:16-1:8
100-1:32-1:16
101-1:64-1:32
110-1:128-1:64
111-1:256-1:128
PIE1 周辺機能の割り込みフラグビット
bit7 EEIF
EEPROM ライト割り込みフラグビット
1 = EEPROM ライト割り込みを使用可能にする
0 = EEPROM ライト割り込みを使用不可にする
bit3 CMIF
コンパレータ割り込みイネーブルビット
1 = コンパレータ割り込みを使用可能にする
0 = コンパレータ割り込みを使用不可にする
bit0 TMR1IF
TMR1IE オーバーフロー割り込みイネーブルビット
1 = TMR1IE 割り込み発生を使用可能にする
0 = TMR1IE 割り込み発生を使用不可にする
IOC GPポート 変化割り込みイネーブルビット
bit5-bit0
GPポート 変化割り込みイネーブルビット
1 = 変化割り込みを使用可能にする
0 = 変化割り込みを使用不可にする
プログラム記述例

;コンフィグ設定等は省略
;プログラムは一部省略してあるので、そのままでは動作しません

org 0
goto Setup ;プログラムの開始アドレスへジャンプします

org 4
goto Int_1 ;割り込み発生時は必ず4番地に移動します。なのでorgで4番地を指定してgotoでジャンプ先を指定します

;================================
; セットアップ
;================================
Setup
call Bank1
;///ポート入力・出力設定///
movlw b'00001100' ;ポートAの設定値 ※0=出力 1=入力
movwf TRISIO ;ポートAに入力
;///INTEDG設定///
movlw b'11000110' ;011=16,100=32,101=64,110=128,111=256
;bit6 INTEDG "1"で立上り、"0"で立下りエッジで割込み発生
movwf OPTION_REG
call Bank0

; RA0〜RA3をアナログからデジタルI/Oにする
movlw b'00000111' ;RA0〜RA3をデジタルI/Oポートにする
movwf CMCON
movlw b'10110000' ;INTCON設定(割込み設定)
movwf INTCON ;

;================================
;割り込み処理
;================================
Int_1
bcf INTCON,GIE
btfsc INTCON,T0IF ;発生源がT0IFである
goto A_Start

;///ポートクリア///
bcf LED1
bcf LED2
bsf LEDp
;///割込クリア///
movlw b'00000000' ;INTCON設定(割込み設定)
movwf INTCON ;
call Wait_25ms
Int_2
call Wait_25ms
btfsc BT1 ;BT1はOFFで"0"、ONで"1"
goto Int_2
call Wait_500ms
bcf LEDp
Int_3
; incf Cerect_1,1
; incf Cerect_2,1
; movfw Cerect_1
; movwf Cerect_2

; incf PS_b,1
Int_4
movfw Cerect_1
movwf Write_data
movlw d'0'
movwf Write_add
call Write
bsf INTCON,INTE
goto Pg_set
;==================================