2025.1.29
前へ
次へ
ホームページトップへ戻る


PICBASICコンパイラ

〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
まるでインタプリタ。でもコンパイラです。超カンタン超シンプルです。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜

[第206回]



●PIC16F84(2)PIC WRITERプログラムを作成

PIC16F84用PIC WRITERプログラムを作成しました。
PIC16F84のPROGRAMMINGについてのドキュメントを参照しながら作っていきます。
PIC WRITERプログラム作成の定番の作業です。
下がそのドキュメントです。
Microchipのサイトから探してダウンロードします。


[出典]Microchip Technology Inc.PIC16F8X EERROM Memory Programming Specification

とはいえWRITERプログラムを最初から作るのはいかにも非効率です。
今までに作ったプログラムをもとにして変更すべきところを書き換えて作るというのが効率が良い方法です。
今回は前回作成したPIC16F627用のWRITERプログラムをもとにして作成したのですが、作成しながら16F627と共通しているところが多いというかうまく作ればそのまんまでいけるのでは、という印象を受けました。
ひょっとするとPIC16F627用と共通でいけるのでは。
実はその通りでした。
そのことはすでに確認済みです。
何回か前に書きましたPIC16F627についての記事での書き込みプログラムは今回のPIC16F84用のWRITERプログラムを使いました。
そのことについては後ほど補足的に書いておくことがあります。

それはともかくとして、そのようにしてPIC16F84用のWRITERプログラムができあがりました。
さっそくテストです。
下はそのログです。
実はPIC16F84用のWRITERプログラムはもう2週間ほど前に一応出来ていたのですがその後に細かいところを手直ししたりしたので念のために今回再度テストをしました。
logfile piciolog\0128155710.txt open
*** pic i/o ***
picio-30 connected
>/picrdf 16f84read250128.hex
startcode=01
type=04,uadrs=00
[08]
0000[10][05][28][FF][3F][FF][3F][FF][3F][C7][28][83][16][85][01][81][30]
0010[10][86][00][81][01][83][12][9C][01][86][01][27][20][90][30][8B][00]
0020[10][08][30][90][00][8E][01][0E][18][16][28][13][28][8E][01][0C][08]
0030[10][1C][18][23][28][99][00][80][3C][03][19][21][28][19][08][90][20]
0040[10][13][28][1C][14][13][28][9C][01][16][11][6B][20][13][28][95][01]
0050[10][B8][20][B8][20][00][30][96][00][03][30][7A][20][B5][20][B5][20]
0060[10][03][30][7A][20][B1][20][03][30][7A][20][B1][20][02][30][7A][20]
0070[10][B1][20][4A][20][03][19][3D][28][08][00][15][14][28][30][6B][20]

07C0[10][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F]
07D0[10][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F]
07E0[10][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F]
07F0[10][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F]
[01]
type=04,uadrs=01
[08]
0800[10][FB][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F]
[01]

いきなり/PICRDFを実行してPIC16F84の内容を読み出しています。
まずは/PICRDのテストから実行です。
すでに書き込み済みのプログラムが読み出されました。
冗長になりますから途中をカットしてあります。
最後の行はCONFIGです。
アドレスが0800になっていますがこれはCppプログラム側の手落ちでそのように表示されてしまいました。
ここは正しくは400Eとすべきところです。
PICRDFコマンドで作成されたHEXファイルでは正しくできています。

/ERASEコマンドを実行しました。
うまく消去できたかどうかを確認するためその後で/PICRDコマンドを実行しました。
>/erase
endcode=01
>/picrdf 16f84erase250128.hex
startcode=01
type=04,uadrs=00
[08]
0000[10][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F]
0010[10][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F]
0020[10][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F]
0030[10][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F]
0040[10][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F]
0050[10][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F]
0060[10][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F]
0070[10][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F]

07C0[10][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F]
07D0[10][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F]
07E0[10][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F]
07F0[10][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F]
[01]
type=04,uadrs=01
[08]
0800[10][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F]
[01]

うまく消去できているようです。

次はいよいよ書き込みのテストです。
前回作成したテストプログラムのHEXファイルをロードして/PICWRコマンドを実行しました。
>/hload 16f84test.hex
loading 16f84test.hex ...
i=167,binbfend=68
>/picwr
startcode=01
i=6,b=2,[04]0000
[05][04][02][00][00][00][00][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF]
[01]
i=12,b=2,[00]0000
[05][00][02][00][00][05][28][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF]
[01]
i=22,b=6,[00]000a
[05][00][06][00][0A][83][16][85][01][86][01][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF]
[01]
i=42,b=16,[00]0010
[05][00][10][00][10][83][12][21][08][85][00][10][20][A2][0B][0B][28][A1][03][09][28]
[01]
i=58,b=12,[00]0020
[05][00][0C][00][20][3E][30][A0][00][86][06][A0][0B][12][28][08][00][FF][FF][FF][FF]
[01]
i=64,b=2,[00]400e
[05][00][02][40][0E][FB][3F][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF]
[03]
picwrend


正しく書き込めたかどうか確認のためにVERIFYコマンドを実行しました。
>/verify
inbfend=0
startcode=01
i=6,b=2,[04]0000
[06][04][02][00][00][00][00][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF]
(01)(FF)(3F)(FF)(3F)(FF)(3F)(FF)(3F)(FF)(3F)(FF)(3F)(FF)(3F)(FF)(3F)
i=12,b=2,[00]0000
[06][00][02][00][00][05][28][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF]
(02)(05)(28)(FF)(3F)(FF)(3F)(FF)(3F)(FF)(3F)(FF)(3F)(FF)(3F)(FF)(3F)
[o][o]
i=22,b=6,[00]000a
[06][00][06][00][0A][83][16][85][01][86][01][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF]
(06)(83)(16)(85)(01)(86)(01)(FF)(3F)(FF)(3F)(FF)(3F)(FF)(3F)(FF)(3F)
[o][o][o][o][o][o]
i=42,b=16,[00]0010
[06][00][10][00][10][83][12][21][08][85][00][10][20][A2][0B][0B][28][A1][03][09][28]
(10)(83)(12)(21)(08)(85)(00)(10)(20)(A2)(0B)(0B)(28)(A1)(03)(09)(28)
[o][o][o][o][o][o][o][o][o][o][o][o][o][o][o][o]
i=58,b=12,[00]0020
[06][00][0C][00][20][3E][30][A0][00][86][06][A0][0B][12][28][08][00][FF][FF][FF][FF]
(0C)(3E)(30)(A0)(00)(86)(06)(A0)(0B)(12)(28)(08)(00)(A1)(03)(09)(28)
[o][o][o][o][o][o][o][o][o][o][o][o]
i=64,b=2,[00]400e
[06][00][02][40][0E][FB][3F][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF]
(10)(FB)(3F)(FF)(3F)(FF)(3F)(FF)(3F)(FF)(3F)(FF)(3F)(FF)(3F)(FF)(3F)
[o][o]
vfend
error=0
>/exit

リモート接続を終了しました
logfile closed at Tue Jan 28 16:03:48 2025

うまく書き込めているようです。

念のために/PICRDFコマンドで読み出してHEXファイルを作成しました。
>/picrdf 16f627test250109.hex
startcode=01
type=04,uadrs=00
[01]
0000[10][05][28][FF][3F][FF][3F][FF][3F][FF][3F][07][30][9F][00][83][16]
0010[10][85][01][86][01][83][12][21][08][85][00][12][20][A2][0B][0D][28]
0020[10][A1][03][0B][28][FA][30][A0][00][86][06][A0][0B][14][28][08][00]
0030[10][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F]
0040[10][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F]
0050[10][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F]

07D0[10][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F]
07E0[10][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F]
07F0[10][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F]
0800[10][05][28][FF][3F][FF][3F][FF][3F][FF][3F][07][30][9F][00][83][16]
0810[10][85][01][86][01][83][12][21][08][85][00][12][20][A2][0B][0D][28]
0820[10][A1][03][0B][28][FA][30][A0][00][86][06][A0][0B][14][28][08][00]
0830[10][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F]
0840[10][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F]
0850[10][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F]

0FA0[10][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F]
0FB0[10][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F]
0FC0[10][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F]
0FD0[10][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F]
0FE0[10][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F]
0FF0[10][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F]
[01]
type=04,uadrs=01
[03]
1000[10][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F]
[01]


作成したHEXファイルをWinMergeでもとのファイルと比較しました。



CONFIGも正しく書けていることが確認できました。

PICBASICコンパイラ[第206回]
2025.1.29 upload

前へ
次へ
ホームページトップへ戻る