目次8章.機能が豊富なPICを使う(PIC12F683)>(8)ピン変化割り込みを使う

ピン変化割り込みを使う (PIC12F683)
更新日2006.7.3

PIC12F683のピン変化割り込みを使ってみます。
ピン変化割り込みとは、ピン(GPIO)の状態が変化(ONからOFFまたはOFFからON)した時に割り込みを発生させる機能です。

PIC12F683のGP0〜GP5は、デジタルI/Oとして使用する場合、どのピンもピン変化割り込みで使用する事ができます。

実験回路
GP3は入力とし、プッシュ型スイッチを接続します。
GP0〜GP2は出力としてLEDを接続します。

GP3をピン変化割り込みに設定し、プッシュ型スイッチのON/OFFで割り込みを発生させます。
この割り込み1回毎にカウントアップし、カウンタの値をLEDで表示します。(カウンタの下位3ビットをLEDで表示)
このようにすることで、スイッチのチャタリングを調べることができます。

330Ωの抵抗は集合抵抗を使用しました。集合抵抗を使う事で回路を小さく組む事ができます。
下の写真の一番上は、330Ωの抵抗が独立して8個入っています。
赤っぽい2つは、抵抗の片側が共通になっています。(今回はこちらを使用しました。)

上の白いタイプの構成

下の赤いタイプの構成

ブレッドボードに組み込んだ状態。

プログラムの仕様
GP3をピン変化割り込みに設定し、OFFからONになった割り込みの時にカウンタを+1します。ONからOFFになった割り込みは無視します。
そして、カウンタの下位3ビットをGP0〜GP2に出力します。
クロックは内部クロックを使用し、8MHzで動作させます。

プログラムの概要
概要

メインルーチンと割り込みルーチンのフローを載せておきます。

メインルーチン割込みルーチン

PICの初期化(使用するレジスタ)

<GPIOレジスタ>

ビットBit7Bit6Bit5Bit4Bit3Bit2Bit1Bit0
記号--GP5GP4GP3GP2GP1GP0
設定値

ポート(GP0〜GP5)のON/OFFを制御するレジスタで、0をセットするとOFF(LEDは消灯),1をセットするとON(LEDは点灯)になります。
初期値としては、全て0にします。

<TRISIOレジスタ>

ビットBit7Bit6Bit5Bit4Bit3Bit2Bit1Bit0
記号--TRISIO5TRISIO4TRISIO3TRISIO2TRISIO1TRISIO0
設定値

ポート(GP0〜GP5)を入力で使うか出力で使うかを指定します。

該当ポートは出力
該当ポートは入力

GP0〜GP2は出力,GP3は入力に設定します。また、使用しないGP4,5は入力に設定しておきます。

<CMCON0レジスタ>

ビットBit7Bit6Bit5Bit4Bit3Bit2Bit1Bit0
記号-COUT-CINVCISCM2CM1CM0
設定値

コンパレータの動作を設定するために使用しますが、今回はGP0〜2をデジタル入出力として使用しますので、CM0〜CM2には1を設定します。

<ANSELレジスタ>

ビットBit7Bit6Bit5Bit4Bit3Bit2Bit1Bit0
記号-ADCS2ADCS1ADCS0ANS3ANS2ANS1ANS0
設定値

ANSELレジスタでは、アナログ入力(A/D変換)の設定を行います。
今回は、AN0〜AN3(GP0,1,2,4)はデジタル入出力で使用しますので、全て0にします。

<OSCCONレジスタ>

ビットBit7Bit6Bit5Bit4Bit3Bit2Bit1Bit0
記号-IRCF2IRCF1IRCF0OSTSHTSLTSSCS
設定値

OSCCONレジスタでは、オシレータの動作モードを設定します。
今回は8MHzで動作させますので、IRCF0〜IRCF2は全て1を設定します。

<INTCONレジスタ>

ビットBit7Bit6Bit5Bit4Bit3Bit2Bit1Bit0
記号GIEEEIET0IEINTEGPIET0IFINTFGPIF
設定値

INTCONレジスタでは、どの割り込みを有効にするかを設定します。
今回は、ピン変化割り込みを使用しますので、「GPIE」に1をセットし、全ての割り込み制御の「GIE」にも1をセットします。

コンフィグレーションビット(__CONFIG命令の設定)

__CONFIG命令では以下の記述をします。

__CONFIG _CP_OFF & _CPD_OFF & _WDT_OFF & _BOD_ON & _IESO_OFF& _PWRTE_ON & _INTOSCIO & _MCLRE_OFF

_CP_OFFプログラムメモリコードプロテクトしない
_CPD_OFFEEPROMメモリコードプロテクトしない
_WDT_OFFウォッチドックタイマ使用しない
_BOD_ON電源電圧低下監視を有効にする
_IESO_OFF内部・外部切り替えモード無効
_PWRTE_ONパワーアップタイマ有効
_INTOSCIOオシレータは内部クロック使用 (2番ピン:GP5,3番ピン:GP4として使用可)
_MCLRE_OFFマスタクリア無効 (4番ピンをGP3(ピン変化割り込み)として使用)

プログラム全体
上記の処理を組み込んだプログラムはこちらです。
メモ帳などのテキストエディタに取り込んで、P683IOC.ASMという名で保存し、MPLABでアセンブル&PICライタでPICに書き込んで動かしてみて下さい。

今まで、PIC16F84Aを使用していた場合は、MPLABのプロジェクトウィザードで「PIC12F683」を選択して下さい。
また、PICライタでも同様に「PIC12F683」を選択して下さい。

スイッチのON/OFFでLEDが点灯すれば成功です。スイッチの種類を変えて、チャタリングを調べてみて下さい。