PIC−USBIO using BASIC
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
USBインターフェースを内蔵したPICを使ってWindowsパソコンで外部回路を制御するための各種I/O基板の製作記事です。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
[第97回]
●PICUSBIO−03(46)Timer3(4)TMR3IF
[第66回]と[第67回]でTimer0のオーバーフローフラグ(TMR0IF)を読んでPORTCから方形波を出力するプログラムを作りました。
Timer3にもTimer0と全く同じ働きをするオーバーフローフラグ(TMR3IF)があります。
今回はそのTMR3IFを使ってTimer0のときと同じテストをしてみます。
Timer1にも同じ働きをするオーバーフローフラグ(TMR1IF)があります。
Timer1では[第73回]で同じテストを行ないました。
TMR3IFはPIR2レジスタにあります。
[出典]Microchip Technology Inc. PIC18F13K50/14K50 Data Sheet
bit1がTMR3IFです。
Timer3がカウントオーバーしてFFFFから0000になったときにセットされます。
Timer3の割り込みが許可されていればこのときTMR3IFがセットされるとともに割り込みが発生します。
TMR3IFは割り込みが許可されている、いないに関わらずオーバーフローが発生したときにセットされます。
このフラグはあらかじめソフトウェアでクリアしておかなければなりません。
またセットされていることが確認できたあとは次のオーバーフローにそなえてクリアしておかなければなりません。
下は[第73回]で作ったTimer1用のプログラムの一部を書き換えて作成したTimer3用のプログラムです。
20行でプリスケーラを1:8に設定します。
30行でTMR3IFをクリアします。
本来ならばbit1のみをクリアすべきなのですがこのプログラムではPIR2そのものをクリアしてしまっても支障はありません。
40行ではPIR2を読み込んでTMR3IFがセットされているかどうかをチェックします。
セットされていたら50行以下を実行します。
50行ではPORTCの出力ラッチ(LATC)を読み込んでbit7を反転させた値を変数cにいれます。
60行でその値をPORTCから出力します。
70行で30行に戻って繰り返します。
プログラムの実行結果です。
上側(CH1)はPORTCのbit7(RC7)の出力波形です。
Timer3にはシステムクロック(48MHz)の1/4(12MHz)をプリスケーラで1/8にしたクロックが入力されます。
そのクロックを65536回カウントするとオーバーフローします(FFFF=65535)。
12000KHz/8/65536=0.022888(22.888Hz)
周期は1/0.022888=43.69msecです。
PORTCのbit7(RC7)はそのたびに反転しますからその周期は43.69×2=87.38msecになります。
上の波形はUSB(HID)の通信速度の影響でデューティ比は50%になっていませんが1周期としては大体計算に近い結果になっています。
PIC−USBIO using BASIC[第97回]
2022.11.12upload
前へ
次へ
ホームページトップへ戻る