4.TMR0割込み

2023/8/15


テスト用ボード

動作確認用のボードは「2.LED」を使用する。
TMR0割込によりGP4にパルス(DummyPulse)を出力する
MPLABX

処理の概要

割込関数はvoid interrupt() myisr(void){}とした。
myisr()関数は割込フラグのチェックと割込処理振り分けを記述した。 TMR0割込(T0IFフラグが1)であるとき、isrTMR0()関数を実行する。
main関数は「3.割込処理(INT/GP2)」とほぼ同じ。割込設定を修正した。
OSCCALを調整し、クロック(FOSC/4)を1.0067MHzに設定した。 main関数はLEDを5回点滅し、LED消灯後、割込を許可し、無限ループに入る。
LED点滅時は割込を禁止している。
TMR0割込が発生するとパルス(H:20.3mS,L:2.0mS)をGP4に出力する。
実際はには周期:22.3mS,L区間2.06mSになった。
一連の処理が終わった後、TMR0割込フラグ(T0IF)をクリアする。

main関数の中身を書いてコンパイルする。


パルス
OSCCALレジスタを修正し、周期は22.3mSになった。
パルス
電圧レベルがLである区間2.06mS
目標は2.0mSだが、このままにする

クロックキャリブレーション

「Calibration oscilator」に☑をつけるとクロックのキャリブレーションはができる。 これをしないと、クロックは1%程度速く、周期は22mS秒だった。☑をつけるとクロックはやや遅くなり、 パルスの周期は22.8mS,L区間2.1mSになった。
いろいろ試した結果、OSCCALレジスタをプログラム上で調整することとし、 現在の値(周期22.3mS,L区間2.06mS)になった。 パルス