PIC−USBIO using BASIC
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
USBインターフェースを内蔵したPICを使ってWindowsパソコンで外部回路を制御するための各種I/O基板の製作記事です。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
[第73回]
●PICUSBIO−03(22)Timer1(4)TMR1IF
[第66回]と[第67回]でTimer0のオーバーフローフラグ(TMR0IF)を読んでPORTCから方形波を出力するプログラムを作りました。
Timer1にもTimer0と全く同じ働きをするオーバーフローフラグ(TMR1IF)があります。
今回はそのTMR1IFを使ってTimer0のときと同じテストをしてみます。
TMR1IFはPIR1レジスタにあります。
[出典]Microchip Technology Inc. PIC18F13K50/14K50 Data Sheet
bit0がTMR1IFです。
Timer1がカウントオーバーしてFFFFから0000になったときにセットされます。
Timer1の割り込みが許可されていればこのときTMR1IFがセットされるとともに割り込みが発生します。
TMR1IFは割り込みが許可されている、いないに関わらずオーバーフローが発生したときにセットされます。
このフラグはあらかじめソフトウェアでクリアしておかなければなりません。
またセットされていることが確認できたあとは次のオーバーフローにそなえてクリアしておかなければなりません。
下はTimer0用のプログラムをもとにしてTimer1用に変更して作ったプログラムです。
20行でプリスケーラを1:8に設定します。
30行でTMR1IFをクリアします。
40行ではPIR1レジスタを読み込んでTMR1IFがセットされているかどうかをチェックします。
セットされていたら50行以下を実行します。
50行ではPORTCの出力ラッチ(LATC)を読み込んでbit7を反転させた値を変数cにいれます。
60行でその値をPORTCから出力します。
70行で30行に戻って繰り返します。
プログラムの実行結果です。
上側(CH1)はPORTCのbit7(RC7)の出力波形です。
Timer1にはシステムクロック(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[第73回]
2022.10.11upload
前へ
次へ
ホームページトップへ戻る