PIC−USBIO using BASIC
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
USBインターフェースを内蔵したPICを使ってWindowsパソコンで外部回路を制御するための各種I/O基板の製作記事です。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
[第98回]
●PICUSBIO−03(47)Timer3(5)割り込みを使う
[第69回]でTimer0のオーバーフロー割り込みプログラムをPIC18F13K50に組み込んで、PICUSBIO用BASICインタプリタでテストプログラムを作成して動作テストを行いました。
Timer3のオーバーフロー割り込みも仕組みや使い方はTimer0と全く同じです。
そこでTimer3のオーバーフロー割り込みプログラムもPIC18F13K50に組み込みました。
Timer1に対しては[第74回]で今回と同じことを行ないました。
Timer3のオーバーフロー割り込みが発生すると割り込みプログラムによってPORTCのビット2(RC2)の出力が反転します。
Timer0、Timer1の割り込みプログラムと同様この機能はあくまでオプションとしてそれを使う使わないはBASICプログラムで指定することができます。
具体的にはPORTCのビット2(RC2)を出力に指定しかつTimer3のオーバーフロー割り込みを使う設定にしたときだけ上記の動作をします。
割り込みを有功にしない場合にはTimer3がオーバフローしてTMR3IFがセットされてもそのままではPORTCの出力は変化しません(今回の割り込み機能を組み込む前の機能と同じです)。
Timer3の割り込み許可フラグはPIE2レジスタにあります。
[出典]Microchip Technology Inc. PIC18F13K50/14K50 Data Sheet
bit1のTMR3IEがTimer3の割り込み許可フラグです。
TMR3IEを1にすることでTimer3のオーバーフロー割り込みが有効になりますが、それだけでは実際にオーバーフロー割り込みは発生しません。
INTCONレジスタのbit7(GIE)とbit6(PEIE)も1にする必要があります。
INTCONレジスタは[第66回]にDatasheetからのコピーがあります。
下はTimer3の割り込み動作テストプログラムです。
10行でPORTCを出力に設定しています。
必要なのはビット2(RC2)を出力にすることだけですがここでは全ビットを出力に設定しています。
20行はTimer3の設定です。
システムクロック(48MHz)の1/4のクロック(12MHz)を入力クロックに指定しプリスケーラは使わない設定にしています。
30行〜50行で割り込みを有効にします。
30行でINTCONのbit7(GIE)とbit6(PEIE)を1にします。
40行でPIR2をクリアします(必要なのはbit1のTMR3IFだけですがプログラムを簡単にするためここではPIR2をクリアしています)。
50行でPIE2のbit1(TMR3IE)を1にします。
上のプログラムを実行した結果です。
上側(CH1)はPORTCのbit2(RC2)の出力です。
12000(KHz)/65536=0.1831ですからその逆数は5.46(msec)です。
5.46msecごとにTimer3のオーバーフロー割り込みが発生し、PIC18F13K50に組み込んだ割り込みプログラムによって割り込みが発生するごとにPORTCのbit2(RC2)の出力が反転します。
割り込みプログラムによるPORTCの出力はUSB通信に関係なく行なわれますから計算通りの出力が得られます。
水平時間軸を1msec/divにしました。
半波が約5.5msecであることが読み取れます。
PIC−USBIO using BASIC[第98回]
2022.11.13upload
前へ
次へ
ホームページトップへ戻る