目次>8章.機能が豊富なPICを使う(PIC12F683)>(8)ピン変化割り込みを使う
PIC12F683のピン変化割り込みを使ってみます。
ピン変化割り込みとは、ピン(GPIO)の状態が変化(ONからOFFまたはOFFからON)した時に割り込みを発生させる機能です。
PIC12F683のGP0〜GP5は、デジタルI/Oとして使用する場合、どのピンもピン変化割り込みで使用する事ができます。
実験回路 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
・ | GP3は入力とし、プッシュ型スイッチを接続します。 GP0〜GP2は出力としてLEDを接続します。
GP3をピン変化割り込みに設定し、プッシュ型スイッチのON/OFFで割り込みを発生させます。
330Ωの抵抗は集合抵抗を使用しました。集合抵抗を使う事で回路を小さく組む事ができます。
ブレッドボードに組み込んだ状態。
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
プログラムの仕様 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GP3をピン変化割り込みに設定し、OFFからONになった割り込みの時にカウンタを+1します。ONからOFFになった割り込みは無視します。 そして、カウンタの下位3ビットをGP0〜GP2に出力します。 クロックは内部クロックを使用し、8MHzで動作させます。
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
プログラムの概要 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
メインルーチンと割り込みルーチンのフローを載せておきます。
<GPIOレジスタ>
ポート(GP0〜GP5)のON/OFFを制御するレジスタで、0をセットするとOFF(LEDは消灯),1をセットするとON(LEDは点灯)になります。
<TRISIOレジスタ>
ポート(GP0〜GP5)を入力で使うか出力で使うかを指定します。
GP0〜GP2は出力,GP3は入力に設定します。また、使用しないGP4,5は入力に設定しておきます。
<CMCON0レジスタ>
コンパレータの動作を設定するために使用しますが、今回はGP0〜2をデジタル入出力として使用しますので、CM0〜CM2には1を設定します。
<ANSELレジスタ>
ANSELレジスタでは、アナログ入力(A/D変換)の設定を行います。
<OSCCONレジスタ>
OSCCONレジスタでは、オシレータの動作モードを設定します。 <INTCONレジスタ>
INTCONレジスタでは、どの割り込みを有効にするかを設定します。
__CONFIG命令では以下の記述をします。
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
プログラム全体 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
上記の処理を組み込んだプログラムはこちらです。 メモ帳などのテキストエディタに取り込んで、P683IOC.ASMという名で保存し、MPLABでアセンブル&PICライタでPICに書き込んで動かしてみて下さい。
今まで、PIC16F84Aを使用していた場合は、MPLABのプロジェクトウィザードで「PIC12F683」を選択して下さい。 スイッチのON/OFFでLEDが点灯すれば成功です。スイッチの種類を変えて、チャタリングを調べてみて下さい。
|