PICBASICコンパイラ
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
まるでインタプリタ。でもコンパイラです。超カンタン超シンプルです。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
[第209回]
●PIC16F84(5)ERASE&WRITE
ここ数日あれこれ悩みながら作業をしていることがあって、時間がありません。
本当は時間をかけて丁寧に説明したいところなのですが要点のみ走り書きをして終ります。
もう何回も書いていることなのですが、どうしても解決できないことがあったときでも諦めてしまってはいけません。
それが長い人生の中で経験から掴んだ教訓です。
繰り返し考えて読み返して試してみてそれでも同じ結論結果しか得られなくても、もしそれで納得ができないときは諦めないで何回でもトライをしていると突然「わかったぞ!」という瞬間が訪れます。
至福の時です。
たまたま間違えたときなどがそのきっかけになったりしますから人生は面白くて止められません。
今回も何度も何度もプログラムを書き換えながら試していたときに偶然そのときが訪れました。
たまたまプログラムを書き間違えてしまったのですが、その結果を確認していておかしなことに気が付きました。
フラッシュメモリの「常識」としてデータを書くとき、’1’を’0’にすることはできるのですが’0’を’1’にはできません。
だから事前に「消去」という作業をして全ビットを’1’にしたうえで必要なビットに’0’を書き込みます。
ところが。
プログラムミスですでにデータを書き込み済みのエリアに別のデータを上書きしてしまったのですが、なんと’0’であったビットに’1’が上書きされてしまいました。
「常識」ではありえないことがおきてしまったのでした。
そこで気が付きました。
「そういうことだったのか!」
下はPIC16F84/84Aのプログラミングコマンドです。
[出典]Microchip Technology Inc.PIC16F8X EERROM Memory Programming Specification
このドキュメントを見たときに「違和感」を感じてはいました。
なんとなく表現がいまいちおかしい。
なぜBegin Erase Programming Cycleなのか?
PIC16F84Aの場合にはさらに疑問が深まります。
それとは別にBegin Programming Only Cycleがあるじゃないか?
これは?
ひょっとすると!
そういうことだったのでした。
[出典]Microchip Technology Inc.PIC16F8X EERROM Memory Programming Specification
ここではErase/ProgramとなっていてこれはErase and Programと解されます。
…executes an erase before writeと書いてあります。
消去してから書き込む!
おお!
それならば。
3F FFを書けば消去したことになるではないか!
実際に試してみてそうなることを確認しました。
念のために確認してみたところPIC16F627も同じでした!
[出典]Microchip Technology Inc.PIC16F62X EERROM Memory Programming Specification
こちらははっきりとEraseとProgrammingの間に/が入っています。
そういうことで。
やっと。
PIC16F627もPIC16F84も消去することができました。
ただし。
この方法ではもしコピープロテクトをかけていた場合にはそれを解除することはできません。
「但し書き付き」と書いたのはそのためです。
でもまあ個人ユースの場合普通はコピープロテクトをかけたりはしないでしょうから実用上は問題ないと思います。
PICBASICコンパイラ[第209回]
2025.2.1 upload
前へ
次へ
ホームページトップへ戻る