サインボード 2 ソフトウェア データ設定 |
この処理はメイン処理に組み込んで使用します。
この処理だけではLEDへの制御は行われません。 他の表示効果処理と組み合わせて使用します。 ソースリスト
解説
サインボードではEEPROMに表示するデータを記憶させました。その場合、64バイトのデータしか記憶させることができません。プログラムメモリは1Kワードの容量がありますので、多くのデータを記憶させることができます。ただし、プログラムを含めてですから、全てをデータの記憶には使えません。 プログラムメモリは1ワードが14ビットで構成されているので、そのままでは8ビットのデータを記憶させることができません。そこで、RETLW命令を使用して8ビットのデータを扱っています。 RETLWはサブルーチンから戻るときに使用する命令で、戻るときに命令で指定した8ビットのデータをWレジスタに格納して戻ります。ですから、サブルーチンから戻ったときにWレジスタを読めばデータを取り出すことができます。 今回のルーチンではDATA1_READがデータ読み出し用のサブルーチンです。この処理ではデータテーブル(DATA1)の先頭アドレスにインデックスを加算してジャンプさせています。 プログラムメモリのアドレスはSFRのPCLATH(上位5ビット用)およびPCL(下位8ビット用)により管理されています。 PCLは8ビットなので0から255(FFh)までのアドレスしか管理できません。256以上のアドレスではPCLATHが設定されます。データテーブルがアドレス255以内であればPCLATHを意識する必要はないのですが、実際はそうではないのでジャンプ先のアドレスを算出するときにはPCLにインデックスを加算した後、桁上げをチェックし、桁上げがあればPCLATHを1つ加算します。算出したアドレスへのジャンプはPCLを書き換えることにより行います。 PCLATHを扱うときに注意することは設定した値はプログラムの実行アドレスが255以内になっても変わらないことです。例えば、DATA1の先頭アドレスが250で末尾アドレスが265であったとします。末尾のデータにジャンプする計算で250(FAh)+15(Fh)=265(109h)を行うとPCLは8ビットなので09hになります。桁上げが発生しているのでPCLATHに1を加算します。処理が進んでプログラムの実行アドレスが255以内になったとしてもPCLATHの値は1のままです。再度、データ設定サブルーチンに来たときにも1のままで、そのまま処理すると算出アドレスが違ってしまいます。そこで、データ読み出しサブルーチン(DATA1_READ)の先頭で再度データテーブルの先頭アドレスの上位ビットをPCLATHに設定しています。 データテーブルの構成は先頭が表示部では最左端になり、末尾が最右端になります。また、ビット0が最上端、ビット6が最下端です。設定データは'0'が点灯を示し、'1'が消灯を示します。ビット7は使っていません。(周囲LEDの回転方向指定用で、データテーブルの値は使っていません。) データを何種類も作る場合にはこのサブルーチンの名称(DATA1)を各サブルーチン毎に変えて作成します。ラベルが重複しないように気を付ける必要があります。リストの赤字の数字を変更します。メモリを節約するためにはデータテーブルをテーブル指定インデックスで切り替えられるようなルーチンにしても良いと思います。 31行目と32行目は以下のように一行で書くこともできます。アッセンブル結果は同じです。(2ワードの命令が作成されます) addcf pclath,f ;PCLATH + Carry 上記のリストの表示パターンは以下のようになります。
|