PICマイコンへの道 〜その5 マシン語プログラミング2〜

                              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に焼き込む。

 実装して動作確認するが、何度かアセンブルにミスがありうまく動かない。

 時間はかかったが完成した。

 test2_.mp4

 右から5ビット目の点滅が約1秒。

 

 PIC、流石に早いわ。

 タイマーが上手く作動できたので、次はドットマトリクス表示機に挑戦する。

 

 

                                                    つづく

 PICマイコンその6に進む

 PICマイコンその4に戻る