LEDフラッシャー ソフト処理説明 |
タイトル;******************************************************** ; ; The LED flash control processing ; ; Author : Seiichi Inoue ;********************************************************
LISTコマンド list p=pic16f84a
INCLUDEコマンド include p16f84a.inc
定義ファイルはMPLABをインストールしたときにインストールされます。ファイルのインストール先は通常以下の場所にあります。 c:\Program Files\Mplab\p16f84a.inc PCによってはドライブが異なりますので注意して下さい。 __CONFIGコマンド __config _hs_osc & _wdt_off & _pwrte_on & _cp_off
詳細はサインボードの「コンフィギュレーションワード」を参照してください。 ERRORLEVELコマンド errorlevel -302 ;Suppress bank warning
ラベル定義 ;**************** Label Definition ********************
LED点灯パターンデータ定義 ;************* Pattern Data Definition **************** ; '1':OFF '0':ON
プログラム開始 ;**************** Program Start ***********************
今回の回路では割り込み機能は使用していないので、4番地からプログラムが走り始めることはありません。ですが、いずれ割り込みを使うことがあるかもしれないので、4番地から走り始めても問題がないようにしました。 ですから、実質的なプログラムは5番地からです。 初期化処理 ;**************** Initial Process *********************
ポートの設定の後、LEDの消灯処理を行っています。これも特に行わなくても良いのかも知れません。 キースキャン ;**************** Key Scan Process ********************
各々のスイッチを順番にチェックするので、全てのスイッチを押すと、順番に各パターンのLED点滅制御が実行されます。 スイッチが押されていない場合には、このキースキャン処理が繰り返し実行されます。 LED点滅制御サブルーチン ;*********** Pattern 0 Output Subroutine ***************
今回の場合、プログラムメモリに余裕はあるので、分かりやすさの点でサブルーチン化はしませんでした。 サブルーチン化する場合、スタックの数に注意する必要があります。 今回の場合、スタックは以下のように使われます。(タイマーとして1秒タイマーを使用した場合)
スタックは最大8段までですから、まだ、余裕はあります。 タイマーサブルーチン ;******************************************************** ; Timer Subroutine for 10MHz clock ;********************************************************
2つの方法を比べると以下のような得失があります。
本来はハードタイマーを使った方が良いと思いますが、今回の処理ではソフトウェアを理解すると言う名目で全てソフトで行いました。 タイマー処理としては、まず、1ミリ秒のタイマーを作ります。今回のクロックには10MHzを使っているので、周期は0.1マイクロ秒です。命令の実行サイクルはその4倍なので、1命令実行サイクルの時間は0.4マイクロ秒になります。ですから、1ミリ秒の時間に実行させるサイクル数は2,500サイクルになります。今回の処理では2,501サイクルになりました。少しの誤差がありますが、実質的には問題はありません。 100ミリ秒のタイマーは1ミリ秒のサブルーチンを100回繰り返します。500ミリ秒は100ミリ秒のサブルーチンを5回、1秒は500ミリ秒を2回繰り返すというようにしています。 コンフィギュレーションワード
|