目次>5章 第2ステップ(色々な実験)>(5)TMR0割込みを使ってみる(LEDを点滅させる)
TMR0割込みを使ってみる(LEDを点滅させる)
「(1)LEDを点滅させる」を改造して、緑と赤のLEDを点滅させるプログラムを作ってみます。
今回は、「(2)TMR0割込みを使う」方法を説明します。 |
割込みとは | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
「割込み」を日常生活に例えると、読書をしている時に電話がかかってくるようなケースです。
読書をしている時に電話がかかってくると、一旦読書を中断して電話に出ます。
このように、継続的に行っている事を別の要因で中断される事を「割込み」と言い、通常は割込みされた要因の対応が終わると今までの処理に戻ります。
プログラムの場合も同様です。
・初期処理で、1秒毎に割込みを発生させるように設定します。
通常処理では、いつ割込みが発生するかを意識する必要がありません。
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
PIC16F84の割込み | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
TMR0割込みの使い方 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
TMR0割込みを使うためには、以下の3つのレジスタ操作が必要になります。
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
実験回路 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
実験回路は今まで使っていたものをそのまま使用します。「(4)スイッチでLEDの点滅パターンを変更」でスイッチを追加していてもそのまま使用できます。
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
TMR0割込みを使うプログラム(処理の概要) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
それでは、TMR0割込みを使用するプログラムを作成しましょう。 仕様は、「緑と赤のLEDを0.5秒毎に点滅させる」です。
しかし、TMR0の最大時間は、上で説明した通り約26.2mSです。
メインルーチンのフローは以下のようになります。
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
TMR0割込みを使うプログラム(主要な処理の説明) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
主な処理の説明をします。それ以外の処理は、さほど難しくありませんので、プログラム全体を参考にして下さい。 また、初めて出てきた命令は、PICの命令一覧も参考にして下さい。
TMR0の初期化は次のように行います。
割込みルーチンの先頭では、割込み処理の開始アドレスとして、4番地を設定します。
割込みルーチンの最後では、STATUSレジスタとWレジスタの内容を復元した後、RETIF命令により割込み時点に復帰します。
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
プログラム全体 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
上記の処理を組み込んだプログラムはこちらです。 メモ帳などのテキストエディタに取り込んで、LED6.ASMという名で保存し、MPLABでアセンブル&PICライタでPICに書き込んで動かしてみて下さい。
|