「天文屋のためのマイコン入門」タイマーを使いこなそう
これから、LEDを1秒間隔ごとに点滅させるプログラムを作りたいのです。マイコンの命令だけでこれを実行するのは、けっこう大変です。また1秒というマイコンの感覚からすると超長い時間は命令だけでは作りづらい部分があります。
マイコンのプログラムはほとんどの場合、時間が絡んできます。マイコンで正確な時間管理ができるように、マイコンはタイマーという機能を内臓しています。タイマーは時間管理をするための機能で、マイコン内蔵機能としてはポートを除いてもっとも基本的なものです。
PIC16F88はこのタイマーを3つ内蔵していて、それぞれ特徴があります。今回はそのうちもっとも簡単なタイマー0(Timer0)について説明します。
タイマーとは
タイマーは時間管理機能というと難しそうですが、実は0から255までをクロックに応じてカウントアップしている8ビットのレジスタに過ぎません。
この8ビットのレジスタはTMR0といい、番地はバンク0の1番地です。カウントアップは電源投入時から常に行われています。255までカウントアップされると、次に0に戻ります。これをオーバーフローといいます。
タイマーの本質はたったこれだけです。普通、レジスタというと値を書き込んでやらないとその値になりません。しかしタイマーレジスタは自動的に値を更新します。もちろんタイマーレジスタに値を書き込めばその値になりますが、すぐにカウントアップを始めます。
カウントアップのクロック源ですが、以下から選べます。
1 マイコンの命令を実行するのと同じクロックを1/4に分周したもの
2 タイマーのために外部から特別に入力したクロック
普通は1で十分です。特殊な値の周波数や精度が必要な場合は2を選びます。
また、タイマーはプリスケーラーと呼ばれるクロック周波数を分周(遅くする)する機能も内蔵しています。分周は1/2から1/256まで選べます。
これらの選択をするレジスタがOPTION_REGです。番地は81hです。つまりバンク1の1番地です。
このレジスタはタイマーだけでなく他の内蔵機能と共通になっていますので、タイマーの関連するビットだけ説明します。
このレジスタの初期値は各ビット1なので、0にする必要があるビットだけ0にします。ちなみに今回の回路でタイマー0を動かすには、T0CS、PSAの各ビットを0にする必要があります。
次回は、このタイマーを使って、1秒間隔ごとにLEDを点滅させるプログラムを作ってみます。
| 固定リンク
コメント