2024年11月26日
東京の地下鉄で聴けた発車ブザーの音を再現するおもちゃを、PICマイコンを使って作るにあたり、アセンブラ(pic-as)によるソフトウェア開発に用いた統合開発環境MPLAB X IDE (v6.20)の使い方について、分かったことをまとめます。
ひとつ前の記事では、地下鉄の発車ブザー音を出すためのプログラムをアセンブリ言語(pic-as)で書き、インストールした基板での動作を確認しました。
ここでは、プログラムの開発環境について説明します。
マイクロチップ社の開発環境MPLAB X IDEを使うと、アセンブリ言語のプログラムを書いたり、プログラムのソースコードをアセンブルしてマイコンに書き込めるファイルを作ったり、マイコン書き込み器を制御してマイコンへの実際の書き込みを行ったりできます。
IDXは、MPLAB X IDEの公式ページから、無料でダウンロードできます。
このソフトをパソコンにインストールすれば、基本的に開発環境が整います。英語版のソフトですが、使われている英語は難しいものではないので、便利に使えます。
今回は、64bit版のWindows 10のPCが入ったパソコンで、MPLAB X IDE (v6.20)をインストールしましたが、LinuxやMac OSでも開発ができる様子です。
なお、最近の開発環境では、PICマイコンのアセンブラは、従来のMPASMからpic-asに切り替えられています。アセンブラpic-asは、バージョン2.50を用いています。
インストールの過程で、PICマイコン用のXC8コンパイラも併せてインストールするように選択する必要があります。XC8コンパイラは、C言語のコンパイラですが、アセンブラpic-asが同梱されているようです。インストールするときにモードの選択ができますが、「無料モード」を選んでもアセンブラはとくに制限なく使えるようです。
Windowsのスタートボタンなどから、MPLAB X IDEを起動すると、以下の画面となります。この画面の中で開発ができます。
MPLAB X IDEの起動直後の画面
PICマイコンのプログラムを新たに開発するときは、新しいプロジェクトを作成します。
メニューバーを[File]→[New Project]と操作すると、新規プロジェクト作成用のウインドウが開きます。
新規プロジェクト作成初期画面
上記の画面で、カテゴリに「Microchip Embedded」、その右側で「Application Project(s)」を選択して、[Next]を選択します。
マイコンとライタを選択する画面
上記の画面では、開発に使うマイコンの種類と、PICマイコンの書き込み器の種類を選びます。
上段はマイコンのおおまかな分類で、PIC12F1822であれば[Mid-Range 8-bit MCUs]を選びます。
次に中段から、マイコンの型番を選びます。例えばPIC12F1822を選びます。
下段ではPICマイコンの書き込み器の機種を選びます。なければとりあえず[No Tool]としても先へ進めます。
[Next]を選ぶと、次にDebug Headerを選ぶ画面となります。
デバッグヘッダを選ぶ画面
上記の画面では、特別な事情がなければ、[None]のまま次の画面へ進みます。
コンパイラ選択画面
上記の画面では、ビルドに使う言語を選びます。[pic-as]の左側の[+]をクリックすると、[pic-as]に対応したパス名が展開されるので、そのパス名をクリックして選択します。
さらに[Next]を選ぶと、プロジェクト名入力と文字コード選択の画面となります。
プロジェクト名入力画面
上記の画面では、プロジェクト名は半角英数で適当につけ、文字コードは[UTF-8]を選び、[Finish]を選択すると、新規プロジェクトの作成が完了します。
文字コードをUTF-8とすれば、プログラムに日本語の文字も入力できるようになりますが、海外のソフトなので、プログラムはなるべく半角の英数字だけにしておいたほうが無難だと思われます。
なお、上記の選択は後からでも変更できます。メニューバーから[File]→[Project Properties(プロジェクト名)]を選択すると、プロジェクトの設定画面が開きます。
プロジェクトの設定画面
上記の画面で、左側で[Conf: [default]]を選択すると、画面の右側が上記の画像のようになります。表示された項目を選択し直して、[OK]を選べば変更した結果を保存できます。
新しいプロジェクトが作られると、以下のように画面左上に、プロジェクトに含まれるファイルなどを整理して表示する領域ができます。(表示されない場合はメニューバーで[Window]→[Projects]を選択すると表示されます。)
プロジェクトを作った直後の画面
上記の画面で、アセンブラのソースコードを書くためのファイルを作るために、プロジェクト名の下にある[Source Files]を右クリックして、[New]→[pic-8b-asm-func.asm...]を左クリックして選択します。
新規ファイル作成画面
上記の新規ファイル作成画面が表示されたら、[File Name]に main と入力し、[Extension]に S (大文字)を選ぶと、 main.S というアセンブラのソースファイルを作成できます。
PICマイコンのアセンブラだけで開発をするときは、拡張子は大文字のSにしておいたほうがよい様子です。
無事にファイルが新規作成できると、以下のようにある程度初期のソースコードが入力済みのウインドウが開きます。
新規ソースファイルを作成した直後の画面
あとは、ソースファイルを入力・編集して保存していくことになります。テキストエディタと同じように、Ctrl+Sでソースファイルを保存できます。
プログラムの最初は、マイコンの指定で始まります。以下のように、PROCESSOR文で、PICマイコンの型番から先頭の"PIC"を取り除いた文字列を指定します。
2行めのinclude文は、最初から入力されていたものがそのまま使えます。
PROCESSOR 12F1822 #include <xc.inc>
上記以外で最初に自動生成されたソースコードの内容は、消しておくことをおすすめします。
次に、マイコンのコンフィギュレーションビットを設定するソースコードを作成します。IDEにコンフィギュレーションビットを設定する機能があるので、メニューバーから[Window]→[Target Memory Views]→[Configuration Bits]を選択します。
Configuration Bits編集画面
この画面では、各行でOptionまたはSettingの列をクリックすると、選択肢が出てくるので、設定したい内容を選びます。
最初の行から最後の行まで全て設定内容を入力したら、最後に[Generate Source Code to Output]を選択すると、[Output]のタブが開き、アセンブラで使えるソースコードの一部が表示されます。
Configuration Bitsを設定するアセンブラコード
上記の画面に表示されたソースコードを、最初から最後までコピーして、自身が作成中のアセンブリファイルの後ろのほうにペーストすれば、ソースコードで意図した内容でコンフィギュレーションビットを設定できます。
なお、ペーストした中に含まれるinclude文は、元からあったinclude文と重複するので削除しておきます。
ここから後ろは、自身で考えたソースコードを直接入力して書いていきます。
定数・変数の定義の後に、リセットベクタ(電源投入時・リセット時のプログラム開始番地)や、割り込みベクタ(割り込み発生時プログラムがジャンプする先)を先頭にして、アセンブリ命令でプログラム本体を書きます。プログラムの内容については、ひとつ前の記事なども参考になると思います。
プログラムを作る上でとくにポイントとなることは、以下の通りです。ひとつ前の記事で作ったプログラムの内容を例に説明します。
EQU は、定数定義などに使える、シンボルに数値を固定で割り当てる機能です。
例えば、 consta EQU 169 と書けば、constaというシンボルが数値の169として扱えるようになります。
変数ではないので、メモリの割り当てなどはありません。
PSECTは、メモリの領域(プログラムセクション)を定義する機能です。
例えば、 PSECT udata_shr と書けば、ここから下は、udata_shrというセクションのメモリ領域に展開するエリアが続くことになります。
counta: や resetVec: はラベルで、直下に定義しているもののアドレスを示す記号となります。
例えば、counta:は、直下の"DS 1"に関連づけられているため、1バイト確保したRAMのアドレスを指すことになります。変数名として機能します。
また、beeploop1:は、直下の命令decf counta,Fが格納されるアドレスを意味します。プログラムをここへジャンプさせたいときは、goto beeploop1のようにして、ラベルを使うことができます。
pic-asでプログラムを書く上での細かいルールは、「MPLAB XC8 PIC Assembler User's Guide」というドキュメントとして、マイクロチップ社が公開しています。ここには、アセンブラやリンカのひじょうに多くの機能が説明されています。Googleなどで検索すれば、PDFファイルが見つかると思います。
プログラムには、ソースコードだけでは不足する情報があるので、「リンカ」に対し設定を行う必要があります。
メニューバーから[File]→[Project Properties(プロジェクト名)]を選択して、プロジェクトの設定画面を開き、さらに画面左側の[pic-as Global Options]の左側の「+」をクリックして展開し、展開されて出てきた[pic-as Linker]を選択すると、画面の右側に、リンカのオプションを入力する欄が表示されます。
リンカオプションを入力する画面
「Additional Options:」の欄に、 -Wl,-presetVec=0h -Wl,-pintrVec=04h のようなリンカオプションを入力し[OK]を選択すると、リンカの設定が有効となります。
"-Wl,-p"の後ろに、メモリ領域名=領域先頭アドレスを足すと、その領域の先頭のアドレスを指定できます。
例えば、"-Wl,presetVec=0h"であれば、領域resetVecの先頭を0h番地にするという意味になります。
設定を複数行うときは、半角のスペースで区切って複数個指定できます。
上記では、resetVecを00h番地から、intrVecを04h番地から始めるように指定しています。なお、数値の後ろの"h"は、16進数を意味しています。
メニューバーから[Production]→[Build Main Project]を選択すると、アセンブラとリンカが動作し、マイコンに書き込み可能なHEXファイルを作ることができます。
成功すれば、画面の下のほうにビルドに成功した旨のメッセージが出ます。
ビルドに成功した場合の例
なお、ビルドに失敗した場合は、エラーメッセージなどが表示されるので、メッセージを参考に、プログラムを修正する必要があります。
ビルドに成功した場合は、HEXファイルをはじめとした成果物が、ディレクトリ C:\Users\ユーザ名\MPLABXProjects\プロジェクト名.X\dist\default\production 以下に生成されます。ただし、ディレクトリ名は環境により異なる可能性があります。
ビルドしただけでは、マイコンのチップへの書き込みは終わっていません。書き込み器の準備ができた状態で、メニューバーから[Production]→[Make and Program Device Main Project]を選択すると、ビルドとマイコンへの書き込みを、一気に実行できます。
ちなみに、ビルドが終わった段階で、マイコンのプログラムメモリのどの番地に何が書き込まれるかを、視覚的に確認できます。メニューバーから[Window]→[Target Memory Views]→[Program Memory]を選択すると、下の画像のように、プログラムメモリの最初の番地から最後の番地まで1ワードずつ、書き込まれる命令を確認することができます。
ビルド後のプログラムメモリの値
マイコンにプログラムを書き込むには、書き込み器が必要です。次の記事では、MPLAB Snapという市販のデバッガ装置につないで、PIC12F1822に書き込みを行うための基板の製作について紹介します。
次の記事:MPLAB Snapにつなぐマイコン書き込み基板の作成
手前の記事:地下鉄ブザーを作る--マイコンのプログラムを作る
製作・著作:杉原 俊雄(すぎはら としお)
(c)2024 Toshio Sugihara. All rights reserved.