2010年3月14日 by ごきち
◆マシン語プログラミング
オリジナルでハンドアセンブルしたプログラムが一応動いた。
とは言っても、ボタンを押したら、単純にLEDが光るだけのプログラム。
マシン語の仕組み、レジスタ、ファイルの仕組みが分かってきた。
ステップアップしてタイマールーチンを作ってみる。
【動作仕様】
・LEDの点滅状態を、スイッチを押すことでインクリメント、デクリメントさせるプログラム。
・変化が見えるように間に時間待ちを入れる。
・例によって、評価ボードは以前のまま。
クロックが10MHz。基本が4クロックで1ワード。
8ビットの減算だと3重ぐらいにしてやっと秒単位だろうか。
Z80で時間待ちルーチンを作った頃は16ビットの減算カウンタ一発で0.5秒程の時間待ちが作れた。
あの頃は2.5MHz動作で4クロック命令も数少なかった。
試しに、8ビット減算を2重にしたタイミングでUP/DOWNさせたフォルダを表示させれば、大体の速さが分かるだろう。
早速フローを考えてみた。
1、ポートA下位2ビットを入力、ポートBを全て出力に設定する。
2、ポートAのビット0を見て1だったら表示フォルダをデクリメントルーチンに飛ぶ。
3、ポートAのビット1を見て1だったら表示フォルダをインクリメントルーチンに飛ぶ。
4、2に戻る
5、時間待ちサブルーチン
6、20hのフォルダをタイマカウンタ1にしてFFhを入れる。
7、21hのフォルダをタイマカウンタ2にしてFFhを入れる。
8、何もしない。(笑
9、21hのデータをデクリメントして0だったら11に進む。
10、8に戻る。
11、22hのデータをデクリメントして0だったら13に進む。
12、7に戻る。
13、サブルーチンから戻る
14、デクリメントルーチン
15、ポートBの値をデクリメント
16、時間待ちルーチン
17、サブルーチンから戻る
18、インクリメントルーチン
19、ポートBの値をインクリメント
20、時間待ちルーチン
21、サブルーチンから戻る
◆ハンドアセンブル
出来たフローを元にして参考書を片手にマシン語に変換。
エクセルを使うと便利だわ。
次にマシン語をHEXファイルに変換する。
◆HEXファイル化
30行弱のプログラムなのに意外に時間がかかった。
◆実装検証
プログラムライタにHEXファイルを読み込ませ、PICに焼き込む。
実装して動作確認するが、何度かアセンブルにミスがありうまく動かない。
時間はかかったが完成した。
右から5ビット目の点滅が約1秒。
PIC、流石に早いわ。
タイマーが上手く作動できたので、次はドットマトリクス表示機に挑戦する。
つづく
PICマイコンその6に進む
PICマイコンその4に戻る