2010年3月13日 by ごきち
◆テストプログラム
ハンドアセンブルの環境が整った。
PICの全体像も輪郭は見えてきたので、早速オリジナルのプログラミングに挑戦する。
お試しサンプル用に配線済みの回路があるのでこの配線のままとする。
もう一つ入力を増やしたいところだが、とりあえずGO!
小手始めに、ボタンを押せば対応したLEDが光るプログラムを組んでみる。
◆プログラムのフローを考える
【手順】
1、バンクを1にする。 :ステータスレジスタ(03h)のビット3を1にする。
2、Wレジスタに03hを入れる。 :Wレジスタに03hを入れる。
3、ポートAの下位2ビットを入力にする。 :ポートAの入出力設定レジスタ(85h)にWレジスタの値(03h)を転送する。
4、ポートBが全て出力にする。 :ポートBの入出力設定レジスタ(86h)をクリア(00h)する。
5、バンクを0にする。 :ステータスレジスタ(03h)のビット3を0にする。
6、入力を見に行く。 :ポートAの内容(05h)をWレジスタに転送する。
7、ボタンのない場所のLEDが光らないようにする。:Wレジスタの値を03hと論理積をとる。
8、出力する。 :ポートBの内容(06h)にWレジスタの値を転送する。
9、:繰り返す。 :(6)に戻る。
転送の元、先のアドレスは7ビット(16F84Aは6ビット)なので実際には85hアドレス、86hアドレスでは無く、05h、06hに読み替える。
8ビット目の代わりにステータスレジスタ(03h)のビット3を立てる。
◆ハンドアセンブルにかける
上の1から9のステップをアドレスに載せながらマシン語に訳す。
アドレス マシン語 動作内容
0000 1683 ;ステータスレジスタ(03h)のビット3を1にする。
0001 3003 ;Wレジスタに03hを入れる。
0002 0085 ;ポートAの入出力設定レジスタ(05h)にWレジスタの値(03h)を転送する。
0003 0186 ;ポートBの入出力設定レジスタ(06h)をクリア(00h)する。
0004 1283 ;ステータスレジスタ(03h)のビット3を0にする。
0005 0805 ;ポートAの内容(05h)をWレジスタに転送する。
0006 3903 ;Wレジスタの値を03hと論理積をとる。
0007 0086 ;ポートBの内容(06h)にWレジスタの値を転送する。
0008 2805 ;0005h番地にジャンプする。
マシン語が完成。これをPICライタが読めるHEXフォーマットにすれば良い。
◆HEXフォーマットに変換
ここまできたらあとは上位、下位の記載順だけ間違えなければ動くはず。
ただ、ここで面倒な作業、チェックサムの計算はとりあえず無しで。(笑
2バイトづつ記載。
コンフィグレーションコード部分はアドレス”400Eh”に3FF2hを書き込み。
◆PICプログラマで焼く
まずはPICプログラマに先のチェックサム無いHEXファイルを読ませる。
あははは。チェックサムは無くても良かったのね。心配して損した。(笑
プログラマにPICをセットして、いざプログラム!
難なく完了。
焼けた
たった7秒。
早速テストしてみる。
先の評価ボードに載せて電源ON!
押したボタンのビットだけLEDが点灯。成功!
ただ、これじゃスイッチとLEDを繋げたのと同じ。
CPUの意味が無いので、ボタンを押せばぴらぴら〜 というのにも挑戦してみる。
つづく
PICマイコンその5に進む
PICマイコンその3に戻る