PICマイコン簡単プログラム入門 part7 – プログラムの解説

マイコンを始めたいと思っているフレッシュマンへ。

電気のデの字も知らない超初心者の方でも、このブログどおりに実行すれば、マイコンをすぐに動かせるようになります。年齢関係なし、パソコンさえあれば、小さなお子様から、ご年配の方まで、誰でも、超簡単です。

文系の人にぜひ動かして欲しい!

スポンサーリンク

「MPLAB IDE v8.92」からプログラムの立ち上げ方

マイコンてこんなに簡単! 文系の人にぜひ動かして欲しい! part6(初めての書き込み)
このブログどおりにすれば、マイコンへの書き込みも簡単にできてしまいます。手順を間違えたらやり直せばいいだけです。得に文系の人に、是非、マイコンを動かしていただきたい。マイコンの面白さを知って欲しいのです。

この続きを始めます。↑

「MPLAB IDE v8.92」を立ち上げて、メニュー→Project→Openを選択します。↓

「part5_1.mcp」を開く。↓

もしこれがでたら「Absolute」を選択。↓

この表示にします。↑

2進数、10進数、16進数について

 10進数 2進数 16進数
 0 0 0
 1 1 1
 2 10 2
 3 11 3
 4 100 4
 5 101 5
 6 110 6
 7 111 7
 8 1000 8
 9 1001 9
 10 1010 A
 11 1011 B
 12 1100 C
 13 1101 D
 14 1110 E
 15 1111 F
 16 10000 10
 17 10001 11
 18 10010 12
 26 11010 1A
 31 11111 1F
 255 11111111 FF
 3978 111110001010 F8A

以上ですが、どれも単なる数値です。

筆記による計算方法はありますが、覚える必要はありません。下記のサイトで簡単に変換できます。検索すればフリーソフトもありますのでご利用ください。

https://www.muryou-tools.com/sinsuu-change.php
https://hogehoge.tk/tool/number.html

プログラムの解説

スポンサーリンク


list P=PIC18F4520

これは、アセンブラに対し、使用するPICの名称を伝える役目をします。

これはどんなに複雑なプログラムでも、簡単なプログラムでも必要です。「list P=」のあとに、マイコンの型式を書きます。何も考えずに入れてください。

SETF H’0F8A’

「SETF」は「H’0F8A’」番地(アドレス)に格納されている8ビットのデータをFFにしなさい、という命令です。

「FF」は16進数です。2進数であれば「11111111」←8個あるから8ビットです。10進数で「255」になります。

アセンブラブログラムはたいてい16進数か2進数で書いていきます。もちろん10進数で書いてもよいですが、16進数や2進数のの方が分かりやすいのです。参考書もこう書いてありますので、いちいち10進数に変換するのも面倒ですし。

「H’0F8A’」番地に格納されている8ビットのデータとはいったい何だ?

以下の表を見てください。PIC18F4520のデーターシートの一部です。↓

なんじゃこりゃ! ですよね。

これは、スペシャルファンクションレジスタ(SFR)といいます。これは役割が決まっているメモリです。

全部見る必要はありません。赤四角のAddress(番地)の「F8Ah」の1行だけ見てください。

その前に「H’0F8A’」とか「F8Ah」ってなんだよ! ですよね。

大文字の「H」と小文字の「h」はHEX(16進数)を表します。プログラムでの記述はどちらでも構いません。わたしは数値を「H’0F8A’」と書いています。

ただし、「F8Ah」は「0F8Ah」と書きます。「H’0F8A’」も「H’F8A’」ではありません。プログラムの場合、先頭が英文字になる場合は、頭に「0」が必要です。16進数には英文字があります。

では、続きですが、

データーシートから、Address(番地)「F8Ah」には「LATB」とあります。「LATB」とは、下記回路図のRB0~RB7の8個(8ビット)の出力のことです。入力の名称は「PORTB」になりますが、これはずっと後に解説します。

これらをI/Oポート(アイオーポート-入出力ポート)といいまして、設定で入力にも出力にもなります。たいへん便利です。

まず初めにRB0~RB7の8個(8ビット)のポートを全部「1」にしなさい、という命令が、「SETF」です。アドレスにアクセスして、そこのデータを変化させます。

「1」にすると、どうなるのか?

LEDが点灯しません。LEDのプラス側が5Vに接続されています。従って「1」です。反対側は680Ωの抵抗を通して、マイコンにつながっています。このマイコンの端子が何ボルトだか分かりません。

この「SETF」命令で強引に「1」にしてしまいます。従って、LEDの上も下も「1」ですから、点灯しません。

これが「SETF H’0F8A’」です。

長かったですね。

CLRF H’0F93′

上記のスペシャルファンクションレジスタ(SFR)を見てください。青四角アドレス「H’0F93’」=「F93h」は「TRISB」です。

この行はRB0~RB7の8個(8ビット)のI/Oポートを入力にするか、出力にするかを決定する命令です。

「CLRF」は全部「0」にしなさいという命令です。

この命令で「TRISB」を「0」にすると出力に、「1」にすると入力になります。全部入力にしたい場合は「SETF H’0F93’」となります。ここでは「CLRF」命令ですから「0」にして全部出力にしています。

BCF H’0F8A’,0

「BCF」は8ビットのうちの1つのビットを「0」にする命令です。最後にある「,0」が0ビット目を指しています。

アドレス「H’0F8A’」の内容「LATB」の0ビット目は「RB0」になります。↓

命令で「LATB」の中身はこうなります。↓

7bit目6bit目5bit目4bit目3bit目2bit目1bit目0bit目
RB7RB6RB5RB4RB3RB2RB1RB0
11111110

これについては、part8でプログラム動かしながら説明します。

NOP

これは何もしないで通過しろという命令です。PICマイコンには何の変化もありません。

では、なぜ入れたのか?

マイコンはクロックに同期しながら、書かれた命令を一つひとつ処理していきます。

LEDを点灯させる命令「BCF H’0F8A’,0」は、次の命令の「NOP」が始まるタイミングで点灯するのです。

入れなくても点灯するかもしれまんせん。ずーっとちゃんと動くかもしれません。

けれども、「たぶん大丈夫」ではなく、確実に実行される命令文を書くほうが安心できますよね。

何もしない「NOP」命令を入れることはプログラムではよくあります。

END

プログラムは最後に「END」を入れて終わりです。プログラムがこれで終わりだとPICマイコンに指示する命令です。これは必ず入ります。何も考えず入れてください。

次のpart8ではパソコンの画面から、マイコンの中身がどう動いているのかを見ていきます。

←part6           part8→