マイコンを始めたいと思っているフレッシュマンへ。
電気のデの字も知らない超初心者の方でも、このブログどおりに実行すれば、マイコンをすぐに動かせるようになります。年齢関係なし、パソコンさえあれば、小さなお子様から、ご年配の方まで、誰でも、超簡単です。
文系の人にぜひ動かして欲しい!
デバッグしよう
デバッグとはプログラムが間違っていないかを確認する作業です。

↑この続きです。
プログラムのエラーを修正して、正常な状態から始めます。
パソコンからマイコンの動きを見てみましょう
デバッグモードで書き込みます

↑part6で行った書き込みは、マイコンにプログラムが書き込んであるので、ブレッドボードの電源を再投入しても動きます。今回も書き込みますが、デバッグ用の書き込みですので、ブレッドボードの電源を一度切ったら、もう動きません。デバッグ終了後は、ちゃんと書き込みます。
では、デバッグしましょう。
電源を入れて「PICkit3」をパソコンにつないでください。
※思ったとおりに動かない場合は「Configure」から「Select Device」や「Configuration Bits」を確認してください。「part6」を参考にしてください。↑
メニューからDebugger→Select Tool→PICkit3を選択。↓
下記のダイアログが出たらOKを押してください。↓
こうなればOKです。↓
次に、マイコンの中身を消します。↓
Debugger→Erase Flash Deviceを選択します。PICkir3がピカピカしますが気にしないでください。↓
正常に消せるとこうなります。↓
※↑「part6」で書き込みましたので、LEDの1個(RB0-LED2_回路図参照)は消えます。
メニューからProject→Build Allを選択。↓
BUILD SUCCEEDEDでOK。↓
どんどん進みます。メニューからDebugger→Programを選択。↓
こんなのが出たらOKを押してください。↓
↑こんなのが出たら「はい」を押してください。
これで書き込みOKです。↓ ※RB0-LED2は点灯しません。
「Watch」ウィンドウを開きます
「Watch」は、レジスタやメモリーのデータの状態を確認するウィンドウです。
レジスタとはメモリーの一部です。数は少ないですが、演算や加工をするためにCPUが素早くアクセスできます。
メモリーはプログラムやデーターを保管するエリアです。レジスタは元々あるエリア、メモリーはこちらかつくって入れるエリアと思っていただいてよいと思います。レジスタもメモリーも、番地で指定して中身のデータにアクセスするものです。
メニューのView→Watchを選択。↓
Symbol Nameの空白をダブルクリックして、1段目に「LATB」、2段目に「TRISB」を入力します。↓
こうなればOK。↓
↑プログラムで書いたAddressや、Value、Binaryが自動的に表示されます。
※「Value」は16進数が表示されます。「Binary」は2進数。「Value」に表示されている数値の頭の「0x」(ぜろえっくす)は「H」や「h」と同じ16進数の意味です。ちなみに「0xBF」と「10111111」は同じ値です。「H’0BF’」も「0BFh」も同じ値です。
※「Value」や「Binary」の欄にはレジスタ「LATB」や「TRISB」の中身のデータが表示されます。最初は適当な(いいかげんな)データが表示されます。このデータはマイコンが動き出すと、プログラムどおりに次々に変化していきます。
画面でマイコンの動きを見ます
緑色の矢印がプログラムの先頭になります。↓
緑色の矢印がこの位置になかったら、「リセット」ボタンを押してください。↓
↑これもリセットです。
リセットを押すとこうなります。↓
では、プログラムを動かしていきます。
Watchウインドウの「LATB」のデータに注目しながら「Step Into」ボタンを1回だけ押します↓」
下記のようなダイヤログが出たら、OKやYesを押してください。↓
最初の状態。前記のとおり、あなたの「Value」や「Binary」のデータと異なる可能性があります。↓
「Step Into」ボタンを1回だけ押すと「CLRF」の位置に矢印が移動 (図1)↓
「Step Into」ボタンを2回目。 (図2)↓↓
「Step Into」ボタンを3回目。 (図3)↓↓
3回押してプログラムは終了です。
解説します。
(図1)、1回だけ押すと、「SETF H’0F8A’」を実行します。これは出力「LATB」を全部1にしなさい(LEDを消す)という命令です。「LATB」のデータを見てちゃんと実行されましたか?
(図2)、「CLRF H’0F93’」は「TRISB」をクリアーしなさい(I/Oを出力に設定する)という命令です。全部0になっています。と言いたいところですが、「Binary」の一番左(7bit目-RB7)が0になりません。なぜだ? と不信感をあらわにすれば一歩前進。
回路図をご覧ください。↓
「RB6」と「RB7」にはPICkit3がつながっています。ここは書き込みで必要な端子なのです。命令では変化しません。だったら、入出力(I/O)として使えないじゃないか、と疑問に思えば二歩前進です。←偉そうに。
この回路図ではそうなっていませんが、I/Oに使用できるように回路をつくることはできます。今は疑問だけでよいと思います。
ということで、「RB6-6bit目」と「RB7-7bit目」は無視してください。←なんじゃそりゃ!
(図3)、「BCF H’0F8A’,0」は「LATB」の0bit目を0にしなさいという命令です。ちゃんと0になりましたね?
では、「BCF H’0F8A’,0」が実行されたとき、ブレッドボードの「LED2」を見てください。点灯しているはずです。
見落としたなら、「リセット」ボタンを押すと「LED2」が消えて、プログラムの先頭に戻りますので、「Step Into」ボタンを一つひとつ押していって確認してください。何度でも繰り返せますので、心行くまでデバッグしてください。
↑このプログラム、数値ばかりで今ひとつピンときません。part10では、もう少し分かりやすく書き換えてみましょう。←先にそうしろよ。で、ですよね……。