目次PIC入門


ソフトウェアとは?




PICがいろいろな動作をするのはプログラムメモリーに記録させている命令を順番に実行するからです。
電源を入れると必ずプログラムメモリーの0番地に書かれている命令が実行されます。そこにGOTO命令が書かれていればその内容に従ってプログラムの実行番地が変化し、そこのメモリーに書かれている内容が実行されます。

ソフトウェアを作るということはPICに行わせる動作の順番を作ることです。ですから、まず、PICに何をさせたいかを決める必要があります。
例えば、LEDの点滅をさせるとか、入力の状態を判断させるとか、特定の信号を出すとか

目的の動作をさせるためにどのような順番で命令を並べるかを考えるのがソフトウェアを作るということになります。



ソフトウェアのイメージを理解するために以下のような例で説明します。

    PICにさせたいこと
      メモリの特定番地の内容をカウントアップする。
      (これ自体では処理の意味は無いのですが、あくまで例です。)

    条件
      カウントアップするメモリーはRAMファイルレジスタの0Ch番地とする。

    処理の流れ
      電源投入直後の処理はプログラムメモリーの0番地からスタートします。
      実際のプログラムでは最初にいろいろな初期化処理を行う必要があるのですが、ここでは省略します。
プログラムメモリ番地処理内容使用命令



0000h0Ch番地の内容をクリア(0)にするCLRF
0001h0Ch番地の内容をカウントアップするINCF
0002h0001hにジャンプするGOTO


    実際にプログラムメモリーに書かれる内容は以下のようになります。
プログラムメモリ番地メモリ内容コメント



0000h 赤い部分がCLRF命令を示します。
緑の部分がファイルレジスタのアドレス(0Ch)を示します。
0001h 赤い部分がINCF命令を示します。
青い部分が結果をファイルレジスタに格納することを示します。
緑の部分がファイルレジスタのアドレス(0Ch)を示します。
0002h 赤い部分がGOTO命令を示します。
緑の部分がプログラムアドレスを示します。


    上記のような内容をプログラムメモリーの先頭から3ワードに書いて電源を入れると最初に0番地でファイルレジスタの0Ch番地がクリアされ、1番地で0Chがカウントアップされます。その次に2番地でGOTO命令が実行され1番地にジャンプします。そして再びカウントアップされるという動作を繰り返します。この処理は電源を切るまで終わりません。

    PICは上記の例のようにプログラムメモリーに書かれた0と1の組み合わせで命令を判断して動作します。この0と1が組み合わされたものを機械語と呼んでいます。どんなに大きなコンピュータでも機械語にもとずいて動作をしています。スーパーコンピュータも、みなさんが使っているパソコンもそうです。ただ、機械語の内容はそれぞれのプロセッサによって違いますので、PICの機械語でペンティアムで動かそうとしても動きません。

    上の内容は手計算で行いましたが、少し処理の数(ステップ)が多くなるととても手でプログラムを書くわけにはいきません。
    そこで必要となってくるのが、アッセンブラーとかコンパイラーと言われるソフト作成ツールです。これらのツールは人がソフトウェアを作り易くするためのものです。(命令を文字で表現する。メモリの番地にラベルという文字列を使う。)
    また、機械語が違うハードウェアで同じソフトウェアを動かそうとした場合、機械語の変換を変えれば可能という場合があります。
    そのような場合には、アッセンブラまたはコンパイラが自動的にそのハードウェアに合った機械語に変換するので、人は機械語を意識せずにソフトウェアが作れるという利点もあります。

    上記の処理をMPASMというMicrochip社が無償提供しているアッセンブラを使って機械語に自動変換する(アッセンブルすると言います)と以下のようになります。
    アッセンブラの入力情報(ソースプログラム)はEditorを使って作ります。このソースプログラムは人が作ります。この作業をコーディングと言っています。Editorとしてはテキスト文書が作れるものであれば何でも使えます。メモ帳でもOKです。Editorの中にはソフトウェアのコーディングが行い易いような機能をもっているものもあります。私は秀丸エディターを使っています。

ソースプログラムリスト
                LIST            P=16F84A
                ORG             0
                CLRF            0C
LOOP            INCF            0C,1
                GOTO            LOOP
                END

ファイルレジスタのアドレス(0Ch)指定は16進数を使っています。MPASMではデフォルトが16進数なので、そのまま書くと16進数と扱われます。H'0C'と書いてもOKです。
10進数で指定する場合にはD'12'または.12(ドット12)と書きます。2進数で書く場合にはB'1100'と書きます。


アッセンブルリスト
LOC  OBJECT CODE     LINE SOURCE TEXT
  VALUE

                      00001                 LIST            P=16F84A
0000                  00002                 ORG             0
0000   018C           00003                 CLRF            0C
0001   0A8C           00004 LOOP            INCF            0C,1
0002   2801           00005                 GOTO            LOOP
                      00006                 END

LOC欄はプログラムメモリ番地を示します。
OBJECT CODE欄が変換された機械語を示します。
手書きのものと同じ内容になっていることが分かります。