目次PIC入門


PICソフトウェア書き込みツール




作成したプログラムをPICのメモリに書き込むためには”ライター”というツールを使用します。PIC16F84Aの場合、プログラムを書き込むための機能がPIC側に ICSP として用意されています。このICSPを制御するためにライターが必要になります。


PICへのデータ書き込み
    アッセンブラーでソースプログラムをアッセンブルすると、HEXファイル(拡張子は.hex)が作られます。ヘキサファイルと言ったり、ヘックファイルと言ったり、ヘックスファイルと言ったりします。
    これがPICに書くプログラムのデータになります。このデータをPICに書くためには以下のような処理をする必要があります。
( 1 )HEXファイルの内容を解釈してPICでのメモリアドレスおよびデータを認識する。

( 2 )PICをICSPモードにする。

( 3 )ICSPモードのための電圧(+13V)を作る。

( 4 )PICが受け取れる電気信号に変換する。

( 5 )PICのICSP手順に合わせてこれらのデータをPICに送り込む。

( 6 )PICに書かれた内容をチェックする。




PICへのデータ書き込み環境
    HEXファイルの内容をPICに書くために、通常はパソコンとライターおよびライターソフトウェアを使います。

    上記の処理をどの装置が分担するかは、各種のライターシステムによって多少異なります。
    いずれのシステムでも ( 3 ) および ( 4 ) はPICライターで行われます。 ( 2 )以降の機能をPICライターで行うシステムもあるようです。
    通常は (1 )、( 2 )、( 5 ) および ( 6 ) をパソコンとライターソフトで行わせ、( 3 ) および ( 4 ) をライターが行うようにしているシステムが多いようです。




PICライター
    私は秋月電子通商で販売している「PICプログラマキット」を使用しています。




    Microchip社ではPICライターとして「PRO MATE U: Universal Device Programmer」と「PICSTART Plus : Low-Cost Development Kit」を販売しています。MPLABから直接制御可能になっています。英語ではライターのことをプログラマーと言っています。
    私は使ったことがありませんので、詳しいことは分かりません。

左の写真は PICSTART Plus です。

構成品は以下のようになっています。
・PICSTART Plus プログラマー本体
・RS-232 ケーブル
・9V 電源装置
・MPLAB-IDE ソフトウェア
・ブランクPIC





HEXファイルの構造
    MPASMで作られるHEXファイルは以下のような構造になっています。

    :BBAAAATTHHHHHHHH・・・・・・HHCC
記号名称説 明
BBレコードサイズ 1行に書かれているデータの数をバイト数で表しています。
1行に書かれるデータは最大16バイトです。
16バイト以上のデータがある場合は次の行に改行されます。
ですから、BBで表される最大値は '10h' です。
AAAAアドレス データを格納するアドレスをバイトで表しています。
プログラムは1ワードが2バイト(実際には14ビットなので上位2ビットは0)なのでプログラムのアドレスとしては1ビットシフトした値になります。例えば、プログラムアドレス'0001h'の場合、AAAAでは'0002h'と表されます。
2行目以降は16バイトの整数倍の先頭から始まります。
例えば先頭の行のアドレスが '000Ch' の場合、'000Fh'までは同じ行に書かれ、 '0010h' からは次の行に移ります。
:04000C008D018E01D3
:100010008F01900191019201930194019601970142
:08002000980199019A019B016E
:00000001FF
TTタイプ 行の形式を表しています。
最終行は'01h'、そうでない場合には'00h'になります。
通常は最終の行に ':00000001FF' が書かれます。
HHHHデータ PICに書き込むデータです。2バイト単位で作られます。
下位バイト、上位バイトの順に書かれています。
アッセンブルで出力された機械語が '018C' の場合、 '8C01' となります。
CCチェックコード データの内容の正常性を確認するためのチェックビットです。
その行に書かれている先頭のバイトから全てを加算した値の2の補数が使われています。
例えば、':040002008C018C0A' の場合、全バイトを合計すると '129h' になります。
下位バイトのみが対象となります。 '29h' の2の補数を計算すると 'D7h' になります。
これがチェックコードとして末尾に付けられます。
データの正常性を確認する場合には末尾のバイトを除いたバイトを合計し、その結果とチェックコードを加算してゼロになれば、データは正常と判断します。 29h + D7h = 00h (桁上げは無視)