PIC(2)-タイマー割り込み機能

このエントリーをはてなブックマークに追加

本日は、PICを使用したタイマー割り込み機能です。タイマー割り込み機能は、一定周期で処理をしたい場合などに使用します。下記のコードは、タイマー機能を使用して、50ms毎にLEDランプが点灯、消灯を繰り返す機能になります。

タイマーのカウント数について考えていきます。今回、クロックは4MHzに設定しています。内部クロックの場合、カウンタは4周期に1カウントするので、今回は1000000カウントできることになります。この場合、LEDの点灯、消灯は1μsecになります。今回は、50msecという設定なので、500000カウントすれば良い事になります。ただし、タイマーのカウントは8bitしか用意されていません。ようするに、256回までしかカウントできません。

そこで、プリスケーラを活用します。プリスケーラは8bit用意されているので、これを活用すると256×256で65536カウントできます。これなら50000カウントできるので、50msecの周期をつくれそうです。50000カウンタをプリスケーラ値256で割ると、約195カウンタになります

タイマーのMAX値の256カウントから195カウントを引いた値をタイマーの初期値にすることで、50msec後にタイマー0割り込みが発生するような機能が構築できます。TMR0にカウンタの初期値を入力するので、TMR0=0x3Dとなっております。このカウンタ値の設定は、メイン関数の部分の他にも、タイマー0割り込み関数でも設定しております。

それでは、コーディングしていきたいと思います。タイマー機能を使用して、50ms毎にLEDランプが点灯、消灯を繰り返す機能のソースコードは下記のようになります。