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


PICBASICコンパイラ

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

[第165回]



●PICプログラマERASEチェックの怪

前回に続いて今回も摩訶不思議なお話です。
なんでこんなおかしなことばかり起きるのか。
って今に始まったことではないのですけれど。
ここには魔物が棲んでいるのですよ。
悪霊がときどき悪さをするのであります。
それで。
なにが起きたかといいますと。
前回はどういうわけかPIC18F13K50に16バイトバッファを想定して書いたPIC WRITERプログラムを実行したところまさかのエラーなく書き込みができてしまいました。
実はその過程でそれとは別の悩ましいことが起きていたのでありました。
前回も書きましたように今まではPIC18F14K50に対して書き込みテストをしてきたのですがそれがうまく出来たので次は同じ仲間のPICとして一番近いPIC18F13K50に対して書き込みテストをしようとしました。
そのためにまずはテスト用のPIC18F13K50に対して/ERASEコマンドで全クリアを行い、さらに念のためにそれが正しく行なわれているかどうかを確認するために秋月のPICプログラマでERASEチェックをしてみました。
ところがまさかのERASEエラーになってしまいました。
PIC18F14K50では/ERASEコマンドは正しく実行されてPICプログラマでもERASEチェックはOKになったのですがPIC18F13K50ではまさかのエラーです。
/ERASEコマンドがPIC18F13K50に対してはうまく機能しなかったかと思ってそのPIC18F13K50に対して念のためにPICプログラマでERASEを実行しました。

Erasing device Completeです。
で。
続いてBlank Checkをしてみたところ。

やっぱりエラーになってしまいました。
なんてことだ。
ひょっとしたら、このPIC18F13K50にはなにか不都合なことがおきているのかも。
PIC18F13K50は秋月から購入してから使っていないままのものもいくつか所有していますから念のためにそいつもチェックしてみました。
そしたらこんな表示が出てしまいました。

おいおい。
それはないだろうよ。
まさかねえ。
購入する前になにかテストデータでも書かれていたのか?
そこでこいつもERASEいたしました。
ええ。
ねんのため。

Erasing device Completeであります。
ところが。

悪霊のしわざじゃあ。

ふと正気に戻ってPIC18F14K50に対して同じことをしてみましたら。

おお。
正気の世界に戻って来れました。
正気に戻ってつらつら考えてみるに。
これはどうやらPIC18F13K50とPIC18F14K50との間に相違があるらしい。
両者をしっかり比較してみました。
問題はCONFIG。

PICプログラマ様はConfiguraitionがnot blankだとのたもうております。
そりゃそうでしょうが。
Configurationはblankにはなりませんよお。
工場出荷時の初期値に戻るだけです。
チェックして読み出されたConfigurationの値は右上に表示されています。
これをPIC18F14K50の値と比べてみると1ビットを除いて全て同じです。
なのにPIC18F14K50ではエラーにならないのにPIC18F13K50ではエラーになってしまいます。
違っている1ビットがおかしいのか?
PIC18F14K50では”0005”になっているところがPIC18F13K50では”0045”になっています。
本来はクリアすれば”1”になるのが通常のルールなので、それが”0”でもエラーにならないのに”1”でエラーになるというのは逆じゃね、つう話です。
その相違しているビットはどこじゃ、ということで確認してみました。

[出典]Microchip Technology Inc.PIC18F1XK50 Flash Memory Programming Specification

位置と表示されている値から見てCONFIG4Lのようです。
問題のビットはビット6のXINSTのようですが。
あれ?
右側のDefaultを見ると10−− 0101になっています。
−1−− 01−1じゃないの?
そこでまた別のData Sheetを確認。

[出典]Microchip Technology Inc.PIC18F1XK50 DATA SHEET

おお。
こちらのData Sheetでは−0−− 01−1になっています。
こちらが正しいようです。
あれ?
XINSTのDefault値は0?
ということになるとやっぱりPIC18F13K50の問題か?
はて?
XINSTとはなんじゃいな?
そこでまたData Sheetを確認。
なかなかに面倒なことです。

[出典]Microchip Technology Inc.PIC18F1XK50 DATA SHEET

うむむむ。
Extended Instruction Set Enable bit?
このビットが1のときはイネーブルで0のときはディスイネーブルと?
あれ?
初期値はイネーブルではないの?
で。
またData Sheetを確認。

[出典]Microchip Technology Inc.PIC18F1XK50 DATA SHEET

うーん。
いろいろごちゃごちゃ書いてありますけれど。
ほかの命令はともかく、MOVSSは便利なので使っていますよお。
ええ。
PIC18F14K50でも。
ちゃんとエラーにならずに動きますです。
こんなことになっているとは知らなかったのでそこについてはCONFIGの設定などしていません。
Cコンパイラではありませぬ。
MPLABのPICアセンブラです。
なんとも面妖な。
でもまあこの問題については実際には今のところ特に支障なく使えているようなので、とりあえずは、まあいいか、ということにしておきます。
Microchipに限らないのですが、こういうことは、まま、よくあることです。

PICBASICコンパイラ[第165回]
2024.11.27 upload

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