2022.10.13
前へ
次へ
ホームページトップへ戻る


PIC−USBIO using BASIC

〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
USBインターフェースを内蔵したPICを使ってWindowsパソコンで外部回路を制御するための各種I/O基板の製作記事です。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜

[第74回]



●PICUSBIO−03(23)Timer1(5)割り込みを使う

[第69回]でTimer0のオーバーフロー割り込みプログラムをPIC18F13K50に組み込んで、PICUSBIO用BASICインタプリタでテストプログラムを作成して動作テストを行いました。
Timer1のオーバーフロー割り込みも仕組みや使い方はTimer0と全く同じです。
そこでTimer1のオーバーフロー割り込みプログラムもPIC18F13K50に組み込んでしまいました。
Timer1のオーバーフローが発生するたびにPORTCのビット3(RC3)の出力が反転するように仕込みました。
Timer0の割り込みプログラムと同様この機能はあくまでオプションとしてそれを使う使わないはBASICプログラムで指定することができるようにしました。
具体的にはPORTCのビット3(RC3)を出力に指定しかつTimer1のオーバーフロー割り込みを使う設定にしたときだけ上記の動作をします。
そのように指定しない場合にはTimer1がオーバフローしてTMR1IFがセットされてもそのままではPORTCの出力は変化しません(今回の割り込み機能を組み込む前の機能と同じです)。

Timer1の割り込み許可フラグはPIE1レジスタにあります。

bit0のTMR1IEがTimer1の割り込み許可フラグです。
TMR1IEを1にすることでTimer1のオーバーフロー割り込みが有効になりますが、それだけでは実際にオーバーフロー割り込みは発生しません。
INTCONレジスタのbit7(GIE)とbit6(PEIE)も1にする必要があります。
INTCONレジスタは[第66回]にDatasheetからのコピーがあります。

下はTimer1の割り込み動作テストプログラムです。

10行でPORTCを出力に設定しています。
必要なのはビット3(RC3)を出力にすることだけですがここでは全ビットを出力に設定しています。
20行はTimer1の設定です。
システムクロック(48MHz)の1/4のクロック(12MHz)を入力クロックに指定しプリスケーラは使わない設定にしています。
30行〜50行で割り込みを有効にします。
30行でINTCONのbit7(GIE)とbit6(PEIE)を1にします。
40行でPIR1をクリアします(必要なのはbit0のTMR1IFだけですがプログラムを簡単にするためここではPIR1をクリアしています)。
50行でPIE1のbit0(TME1IE)を1にします。

上のプログラムを実行した結果です。

上側(CH1)はPORTCのbit3(RC3)の出力です。
12000(KHz)/65536=0.1831ですからその逆数は5.46(msec)です。
5.46msecごとにTimer1のオーバーフロー割り込みが発生し、PIC18F13K50に組み込んだ割り込みプログラムによって割り込みが発生するごとにPORTCのbit3(RC3)の出力が反転します。
割り込みプログラムによるPORTCの出力はUSB通信に関係なく行なわれますから計算通りの出力が得られます。

水平時間軸を1msec/divにしました。

半波が約5.5msecであることが読み取れます。

PIC−USBIO using BASIC[第74回]
2022.10.13upload

前へ
次へ
ホームページトップへ戻る