Microchip PIC16F1454 のタイマー処理

PIC16F1454のタイマー処理を作ってみた。きりの悪いシステムクロックのおかげで一般的によく使う1ms割り込みが正確にできなくて少し悩んでしまったが、それはどう考えてもしょうがないので妥協。違うアプローチをとることにした。
まず、多くの方が結構やってるっぽい感じがあるタイマー割り込みの中でタイマー値を変更するような荒業はタイミング的に他の割り込みに影響されることがあるので却下。タイマーを止めたりするのも同じことなのでタイマーはフリーランさせる方法とする。
PIC16F1454の3つあるタイマーのうち一番汎用的に使えそうな8bitのタイマー0割り込みにより32bitカウンター変数をカウントアップする単純な方法であるが前述のようにmsやusなどの時間を正確に表現できないのでtick単位(カウンター値)で扱う仕様とする。時間とtick値との変換はマクロで行う。定数指定であればコンパイル時に変換されるので実行時の変換時間は気にしなくて良い。検算してみるとわかるが1秒指定での誤差はない。

2018-05-12
不必要なレジスタ設定の削除とタイマー値が時々不正な値になる不具合を修正。

【1秒間隔でLEDを点滅する例】

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA


このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください