デジタル降魔録TOPページへ

thank you for your access
Flash PICの起動

【7】Flash PICの起動・・・

それでは実際にFlash PICを起動させて、簡単なLEDの点滅プログラムを作ってみましょう。

 PICで走るプログラムは前にも書きましたが2進数あるいは16進数の羅列です。これをマシン語と呼びます。いきなりマシン語を並べてPICに書き込んでもいいのですが、人間には到底理解できません。普通はアセンブリ言語というPICのアセンブラ命令を並べて記序して、それをアセンブラというアプリケーションでマシン語に変換します。

 アセンブリ言語はアセンブラ命令とか単にプログラムの命令といわれるもので、テキストエディッタを利用してキーボードから打ち込んでいくだけです。このようにして作られたファイルをソースプログラムとかソースコードと呼びます。
 テキストエディッタはWindowsのメモ帳などを利用しても可能です。Flash PICにもテキストエディッタが付いていますので、メモ帳で書き込んだソースファイルをコピーしてFlash PICのテキストエディッタに貼り付けることやその逆も可能です。本格的にやろうと思っている方ならソースコード作成を意識して作られたエディッタを購入されるといいと思います。私はMIFESを使っています。

 本物のPICでのプログラム作りは次のような流れになります。



 本物のPICを作成する場合はやはりイロイロと機材が必要になってきますが、MPLAB IDEは無料でダウンロードできますし、MPASM WINはMPLABに付属しています。また、コードシミュレーターも付属していますので、ライターでPICに書き込む前にある程度のテストは可能です。実際に必要なのはPICライターとPIC、それを動かす基板や電源ユニットなどです。


 次にFlash PICでのプログラム作りの流れです。



 基板丸ごとのシミュレーションですのでソースコードを書き込んだ後はそのままアセンブルしてすぐに動かせます。正しく動かない時は、本物のPICと同じようにソースコードの見直しをして再アセンブルします。1命令ずつ走らせる〝STEP〟モードや好きな位置でプログラムを停止させる〝ブレークポイント〟、レジスタの状況を表示する〝WATCH〟ウィンドウなど、デバッグ作業に適したツールが付属しています。これらのデバッグツールはMPLAB IDEのコードシミュレーターにも付いていますが、Flash PICがそれと大きく異なるのは基板丸ごとのシミュレーションが可能だというところです。


 それではFlash PICを起動 してみてください。


Flash PIC のページを開くと、上のツールボックスが出ています。

【RUN】ボタンは完成プログラムを走らせる時に押します。まだ押しません。

【RUN】ボタンの下に【+】と【-】のボタンがあります。これは、FPICの速度を上げる時に使います。1倍速~20倍速まで変化させることができます。これは速度の遅いFlash PICでの苦肉の策です。お使いのパソコンの速度が1.5GHz以上あれば、LED点滅ぐらいの簡単なプログラムでしたら、1~2倍速でじゅうぶんです。

【編集】ボタンを押すとソースプログラムを書くテキストエディッタや、マシン語に変換する《Build》ボタンや各種デバッグツールなどが入った重要な画面が開きます。

【SAMPLE】ボタンは各種サンプルソースファイルを読み込みます。

【ボードの変更】ボタンで3種類のトレーニングボードの選択をします。今回はLEDの点滅プログラムを作りますのでボード1を選択してください。ボード番号はツールボックスの一番上のバーに〝PCB-1〟、〝PCB-2〟と出ます。


 Flash PICを初めて開いた時はまだプログラムが入っていませんのでツールボックスは上の写真の状態ですが、前回作ったプログラムを保存していた場合は、自動的に読み込み、完了すると「プログラムが読み込まれました」というメッセージが出ます。


 【編集】ボタンを押してみてください。



 もうすでに何か書き込まれていますが、右側のボックスがソースウィンドウです。この中にソースコードを書きます。書くときはソースウィンドウの表面をマウスでクリックするとカーソルが表示され、キーボードから文字入力が可能になります。
 PICのアセンブラにはイロイロな種類があるようですが、ここではMPLAB IDEを意識していますので、本家のマイクロチップテクノロジー社の〝MPASM〟フォーマット(書き方のルール)で行います。その他のフォーマットではエラーが出ます。

 ソースウィンドウに書かれたソースコードをマシン語に変換するボタンが《Build》ボタンです。押されるとアセンブラが起動して、ソースコードがマシン語に変換されてFPICに送られます。送られたマシン語は左の逆アセンブルウィンドウに表示されます。

 PICのプログラム命令は35種類しかありません。これを組み合わせてプログラムしますが、この説明は次の項目でおこないますので、先にMPASMの擬似命令を説明します。



▽擬似命令△

ソースコードにはプログラムの命令以外にアセンブラに対しての命令(指示)も一緒に書きます。この命令はPICのプログラムとは直接関係ありませんので擬似命令と呼ばれています。MPASMの擬似命令はたくさんありますが、Flash PICでは今のところ2種類だけに対応しています。擬似命令が少なくても簡単なプログラムは可能です。例えばマイクロチップテクノロジー社で公表されているアプリケーションノートのプログラムをFlash PICで使える擬似命令だけに修正すればアセンブル可能です。特に16C(F)57,54,84などは、ほとんどそのまま入ります。

 MPASMの擬似命令で最低限必要なものをあげてみました。緑字が擬似命令で黒字がそれに付加されるオプションです。文字と文字の区切りにはスペースが必ず1文字以上必要です。行の先頭にスペースが必要な場合もあります。大文字、小文字は区別しませんどちらでも可能です。赤文字は説明です。


#include "file_name"
file_nameという外部のソースコードをいまのソースコードに取り込む

#define CARRY STATUS,0
ソースコードに CARRY という文字列があったらSTATUS,0 に置き換えてアセンブル
します

 org 0x10
プログラムの開始番地を0x10からにする。先頭に1文字以上のスペースが必要

LABEL EQU 0x0A
LABEL という文字に0x0Aという数値を代入します。
それ以降ソースコードに LABEL という文字列が出てくると、アセンブル時に 0x0A に
置き換えられます

Flash PICで使えるのは〝EQU〟と〝org〟の2種類だけです。特に〝EQU〟は行の先頭から書かれている文字列(ラベル名)に数値を代入数する擬似命令ですので頻繁に使われます。

 〝org〟はアセンブルして変換されたマシン語をプログラムエリアのどこから並べていくかの指定をするものです。使う時はラベル名と混同しないように、行の先頭から一文字以上のスペースを書いてから記序するのがルールです。先頭から書くとMPASMでは〝Found directive in column 1. (org)〟という注意が出ます。Flash PICでは〝org〟擬似命令から以降をプログラム命令と判断していますので、先頭にスペースが無いと〝org〟というラベル名と誤判断されて、それ以降のプログラム命令すべてに〝未定義エラー〟が出ます。

 〝#define〟擬似命令も大変便利なものですので、いずれFlash PICでも使えるようにしたいと思っています。


 では、ソースウィンドウに書かれていたソースコードを見てみましよう。

INDF		EQU	0x00
TMR0		EQU	0x01	;(TMR0は、まだ使用できません)
PCL		EQU	0x02
STATUS		EQU	0x03
FSR		EQU	0x04
TRIS_A		EQU	0x05
TRIS_B		EQU	0x06
TRIS_C		EQU	0x07
PORT_A		EQU	0x08
PORT_B		EQU	0x09
PORT_C		EQU	0x0A
;
		org	0x00
;ここからプログラムコードを書きます。
		MOVLW	0x3F
		MOVWF	TRIS_A
		CLRW
		MOVWF	TRIS_B
		MOVWF	TRIS_C
		MOVWF	PORT_B
		MOVWF	PORT_C

解りやすくするために色分けをしてみました。赤文字の部分が擬似命令で〝org 0x00〟以降がプログラムです。〝;〟セミコロン(Semicolon)から始まっている部分はコメントです。プログラムの説明などを書きます。プログラム自体には何も影響しません。コメントには全角文字が使えます。それ以外は半角英数字のみです。

 ソースコードの先頭から〝EQU〟擬似命令を使って〝INDF〟を〝0x00〟~〝PORT_C〟は〝0x0A〟に設定してます。この部分が〝SFR〟レジスタの割り当てを行っている部分です。PICの各デバイスによって少し異なっていますので、デバイスごとに変更が必要です。FPICの場合はこのような割り当てになっていることを【6】メモリーとレジスタ・・・で説明しています。

 〝INDF〟とか〝TMR0〟というラベル名は自由につけてもいいわけですが、SFRに関しては他者とのプログラムの共通性のことを考えてMPASMの記序と同じにするべきです。そこで、マイクロチップテクノロジー社ではMPLAB IDEをインストールする時に、全デバイスのSFRレジスタのラベル名を〝EQU〟擬似命令で書き込んだファイルも一緒にインストールします。それが〝P16F84.inc〟とかのデバイス名別に
              〝C:\Program Files\Microchip\MPASM Suite〟
フォルダにズラズラっと並んでいるファイルです。

 ほとんどのPICのソースコードでは先頭の方で〝#include "P16F84.inc"〟と書かれていると思います。ここで外部から〝SFR〟のアドレスを〝EQU〟擬似命令で定義したファイルを取り込むことになりますので、プログラマーが意識することなくコード上で〝INDF〟と書き込んでもエラーが出ませんし、デバイスが変わってもアドレスを意識することも無いようになっています。ただし間違ったラベル名を書くとエラーとなります。
 Flash PICではデバイスが1種類ですので、外部の定義ファイルは準備していません。その代わりソースウィンドウを初期に戻した時に、その部分をあらかじめ記序してあるというわけです。

 アセンブラではユーザーが自由に使うメモリーの番地を16進で直接記序してもかまいませんが、プログラムが解りにくく保守がたいへんになりますので、SFRレジスタを定義したのと同じようにラベル名を決めて〝EQU〟擬似命令で定義します。また、二重定義や定義し忘れを防止するために、ソースコードの先頭部分に書くようにします。


 プログラムコードの書式ですが、これにもルールがあります。

 擬似命令もそうですが、プログラムも1行1命令ずつ書きます。同じように行の先頭から文字列を書くとそれはラベル名と判断されます。
 プログラムエリアでのラベル名というのは、プログラムの処理順を変更する命令を書く時に使うものです。プログラムによっては、ある場所へ飛んで(ジャンプ)そちらの処理へ移ったり、ある場所へ飛んでまた戻って来たりすることがあります。このジャンプ先をラベル名という名前で決めておきます。ジャンプ先はプログラムのアドレスを16進で直接指定してもいいわけですが、プログラムが追加されたり削除されたりしますと、ジャンプ先のアドレスも変化してそのつど変更しなくてはいけなくなります。ラベル名で場所を決めておけばプログラムの長さが変更されても、アセンブラが自動的にラベル名のあるアドレスを計算してジャンプ先を決めてくれます。

以下がFlash PICでの1行の書式です。MPASMと同じです。


↓ラベル名      ↓ニーモニック  ↓コメント
START:          MOLW    0x3F    ;Wregを0x3Fにする
                        ↑オペランド
                MOVWF   TRIS_A

コメント以外はすべて半角英数字で書きます。プログラムの命令(アセンブラコード)はニーモニックと呼ばれる命令を表す記号とそれに付属するオペランドで構成されています。オペランドが複数必要な命令もあります。

●ラベル名
 ・行の先頭から書きます。
 ・アルファベットで始まる半角英数字で、続けて後ろに命令が来る場合は〝:〟コロンで終わります。
●ニーモニック
 ・行の先頭からひとつ以上のスペースあるいはタブが必要です。
 ・前にラベルが付いている場合はラベルとのあいだにひとつ以上のスペースあるいはタブが必要です。
●オペランド
 ・ニーモニックの次に1個以上のスペースかタブで区切ります。
 ・オペランドが続く命令の場合はスペースを空けずに〝,〟カンマで区切ります。
 ・格納の先の指定(to_Wなど)の場合のみ〝,〟の次に1個のスペースは許可されます。
●コメント
 ・オペランドからひとつ以上のスペースかタブで区切り、〝;〟セミコロンから始まり行の最後まで(改行位置)に書けます。コメントは全角文字が使えます。


 --Flash PICでのご注意--
 ※プログラム記序は1行で完結する必要があります。コメントが長くなって2行にまたがる(折り返す)と行番号が狂いますので右端までに改行してください。


【7】Flash PICの起動・・・ ----------(ここまで)