PICBASICコンパイラ
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
まるでインタプリタ。でもコンパイラです。超カンタン超シンプルです。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
[第221回]
●PIC16F627(16)念のため動作テスト
PIC16F627のBULK ERASEができなかったことで何日も悩んでいたのですけれど。
どうやらプログラムのバグのせいらしいというなんともお恥ずかしい結末になりました。
多分それで問題は解決ということになりそうですがそこはやっぱりテストをして確認をしてみなければなりません。
前回書きましたようにPIC16F627WRITERプログラムを修正しました。
今回はそのテストの記録です。
まずはPIC16F627に対して/PICRDFを実行して消去済みを確認しました。
logfile piciolog\0204121810.txt open *** pic i/o *** picio-30 connected >/picrdf 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] 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] > |
全部3FFFです。
消去済みであることが確認できました。
冗長になるので途中は省略してあります。
テストプログラムを書きます。
/HLOADでテストプログラム16F627.HEXをロードして/PICWRを実行しました。
>/hload 16f627test.hex loading 16f627test.hex ... i=175,binbfend=72 >/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][07][30][9F][00][83][16][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF] [01] i=42,b=16,[00]0010 [05][00][10][00][10][85][01][86][01][83][12][21][08][85][00][12][20][A2][0B][0D][28] [01] i=62,b=16,[00]0020 [05][00][10][00][20][A1][03][0B][28][FA][30][A0][00][86][06][A0][0B][14][28][08][00] [01] i=68,b=2,[00]400e [05][00][02][40][0E][F9][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][07][30][9F][00][83][16][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF] (06)(07)(30)(9F)(00)(83)(16)(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][85][01][86][01][83][12][21][08][85][00][12][20][A2][0B][0D][28] (10)(85)(01)(86)(01)(83)(12)(21)(08)(85)(00)(12)(20)(A2)(0B)(0D)(28) [o][o][o][o][o][o][o][o][o][o][o][o][o][o][o][o] i=62,b=16,[00]0020 [06][00][10][00][20][A1][03][0B][28][FA][30][A0][00][86][06][A0][0B][14][28][08][00] (10)(A1)(03)(0B)(28)(FA)(30)(A0)(00)(86)(06)(A0)(0B)(14)(28)(08)(00) [o][o][o][o][o][o][o][o][o][o][o][o][o][o][o][o] i=68,b=2,[00]400e [06][00][02][40][0E][F9][3F][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF] (10)(F9)(3F)(FF)(3F)(FF)(3F)(FF)(3F)(FF)(3F)(FF)(3F)(FF)(3F)(FF)(3F) [o][o] vfend error=0 > |
正しく書き込みできました。
さらに念のために/PICRDFで読み込んでちゃんと書けていることを確認し、同時に16F627TEST250204.HEXファイルを作成しました。
>/picrdf 16f627test250204.hex startcode=01 type=04,uadrs=00 [08] 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] 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][F9][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F] [01] > |
ここまではOKです。
次はいよいよBULK ERASEのテストです。
/ERASEを実行しました。
そのあと/PICRDFで読み込んで消去されていることを確認し、同時に16F627ER250204.HEXファイルを作成しました。
>/erase endcode=01 >/picrdf 16f627er250204.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] 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] > |
全部消去できたようです。
もっともここまでは今までの「但し書き付き」のプログラムでもできていました。
問題はコピープロテクトをかけたPIC16F627を消去できるかどうかです。
それをテストするためにコピープロテクトをかけたPICプログラム16F627TEST2.ASMを用意しました。
下はソースプログラムです。
;;;pic p16f627 test2(cp) ;25/1/7 1/8 1/27 ; #include <p16f627.inc> __CONFIG _CP_ALL & _WDT_OFF & _INTRC_OSC_CLKOUT ; ;int CLOCK 4MHz ; w=0 f=1 c=0 z=2 ; cntr0=20 testcntr=21 testcntr2=22 ; org 0 goto start ; org 5 start movlw 7;a0-a3 is digital movwf CMCON bsf STATUS,5 ;bank 1 clrf TRISA clrf TRISB bcf STATUS,5 ;bank0 ; testloop movf testcntr,w movwf PORTA testloop2 call t1ms decfsz testcntr2 goto testloop2 decf testcntr goto testloop ; ;1msec timer t1ms movlw 0fa;=250 movwf cntr0 t1ms2;4micros xorwf PORTB;1 decfsz cntr0;1 goto t1ms2;2 return ; end ; |
__CONFIGのところに_CP_ALLを追加しました。
HEXファイル16F627TEST2.HEXをロードして/PICWRを実行しました。
>/hload 16f627test2.hex loading 16f627test2.hex ... i=175,binbfend=72 >/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][07][30][9F][00][83][16][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF] [01] i=42,b=16,[00]0010 [05][00][10][00][10][85][01][86][01][83][12][21][08][85][00][12][20][A2][0B][0D][28] [01] i=62,b=16,[00]0020 [05][00][10][00][20][A1][03][0B][28][FA][30][A0][00][86][06][A0][0B][14][28][08][00] [01] i=68,b=2,[00]400e [05][00][02][40][0E][F9][03][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF] [03] picwrend > |
コピープロテクトをかけたので書き込みをおこなった後は読み出してベリファイをすることはできません。
念のために/PICRDFを実行して読み出し確認をすると同時に、16F627TEST2_250204.HEXファイルを作成しました。
>/picrdf 16f627test2_250204.hex startcode=01 type=04,uadrs=00 [08] 0000[10][00][00][00][00][00][00][00][00][00][00][00][00][00][00][00][00] 0010[10][00][00][00][00][00][00][00][00][00][00][00][00][00][00][00][00] 0020[10][00][00][00][00][00][00][00][00][00][00][00][00][00][00][00][00] 0030[10][00][00][00][00][00][00][00][00][00][00][00][00][00][00][00][00] 0040[10][00][00][00][00][00][00][00][00][00][00][00][00][00][00][00][00] 0050[10][00][00][00][00][00][00][00][00][00][00][00][00][00][00][00][00] 07C0[10][00][00][00][00][00][00][00][00][00][00][00][00][00][00][00][00] 07D0[10][00][00][00][00][00][00][00][00][00][00][00][00][00][00][00][00] 07E0[10][00][00][00][00][00][00][00][00][00][00][00][00][00][00][00][00] 07F0[10][00][00][00][00][00][00][00][00][00][00][00][00][00][00][00][00] [01] type=04,uadrs=01 [08] 0800[10][F9][03][00][00][00][00][00][00][00][00][00][00][00][00][00][00] [01] > |
コピープロテクトがかかっているので中身は読み出せません。
読み出したデータはすべて00です。
CONFIGは読み出せていますね。
ま。
CONFIGぐらいはよいでしょう。
念のため。
読み出して作成した16F627TEST2_250204.HEXの中身です。
>:020000040000FA :1000000000000000000000000000000000000000F0 :1000100000000000000000000000000000000000E0 :1000200000000000000000000000000000000000D0 :1000300000000000000000000000000000000000C0 :1000400000000000000000000000000000000000B0 :1000500000000000000000000000000000000000A0 :1007C0000000000000000000000000000000000029 :1007D0000000000000000000000000000000000019 :1007E0000000000000000000000000000000000009 :1007F00000000000000000000000000000000000F9 :02400E00F903B4 :00000001FF |
やっぱりプログラムは全く読み出せていません。
そこまで確認したのでこれをもう一度消去してみます。
コピープロテクトが解除されて同時に全消去できればBULK ERASEできたことが確認できます。
/ERASEを実行しました。
そのあと/PICRDFで読み込んで消去されていることを確認し、同時に16F627ER2_250204.HEXファイルを作成しました。
>/erase endcode=01 >/picrdf 16f627er2_250204.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] 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] >/exit リモート接続を終了しました logfile closed at Tue Feb 04 12:25:53 2025 |
さきほどはコピープロテクトがかかっていたので読み出しても中身は全部00だったのですが、コピープロテクトが解除されて同時に中身が全消去されたので3FFFが読み出されました。
正しくBULK ERASEできたことが確認できました。
実はログの日付にありますように今回ここに書きましたのは2週間前の作業です。
もう少し早く書ければよかったのですが、ほかにいろいろやらねばならぬことがいっぱいあったのでこういうことになってしまいました。
ちょいとお恥ずかしい備忘録でありました。
PICBASICコンパイラ[第221回]
2025.2.19 upload
前へ
次へ
ホームページトップへ戻る