2025.1.11
前へ

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


PICBASICコンパイラ

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

[第196回]



●PIC16F1827(9)CONFIG

PICのCONFIGについては何回も書いています。
極端な言い方をするともうPICごとに書式が異なっているような感じで新しいPICを入手してプログラムを書いたり以前のプログラムを移植したりするときに毎回のように悩ませられます。
前回もCONFIGについてちょっとそんなようなことを書きました。
文句ばかり言っていても仕方がありませんから今回はCONFIGについて少しばかり深堀りしてみることにします。

下はPIC16F1827DataSheetのCONFIGの説明です。

[出典]Microchip Technology Inc.PIC16F1827DataSheet

PIC16F1827にはCONFIG1とCONFIG2があってそのアドレスは8007と8008であると書いてあります。

下はCONFIG1のビットごとの説明です。

[出典]Microchip Technology Inc.PIC16F1827DataSheet

CONFIGはPICのキモの部分でここをよく理解しないと期待した通りに動いてくれません。
もっとも大抵のビットは初期値(工場出荷時の既定値)が標準的な値になっていますからそのままでよいことが多いです。
ここでさわるとすればWDTEでしょう。
一番上のビット列のところで−1/1のように書いてあるのが初期設定値です。
WDTEはWatch Dog Timerです。
初期値ではイネーブルになっています。
WDTを使わないときはここをディスイネーブルにしておく必要があります。

下は上の説明の続きです。

[出典]Microchip Technology Inc.PIC16F1827DataSheet

FOSCでCPUクロックの設定をします。
初期値は外部にクリスタルをつける設定になっています。
使い方によってここを書き換える必要があります。

下はCONFIG2の説明です。

[出典]Microchip Technology Inc.PIC16F1827DataSheet

LVPは注意が必要です。
普通はさわる必要のないビットです。
初期値はVpp電圧を使わない低電圧プログラム書込モードになっています。
Vpp電圧書込モードではこのビットは無視されます。
ここを’0’にすると通常の電圧ではプログラムの書き換えはできなくなりますから安全のためのロックのようなものだと思います(普通はまずその心配はありません)。
PLLENはCPUクロックを内部で4倍にします。
初期値ではオンになっています。
WRTはライトプロテクトです。
初期値ではオフになっていますが通常はここをオンにする必要はないでしょう。

下は前回もお見せしたテストプログラムのアセンブラソースリスト(一部)です。


CONFIG1でINTOSC(内蔵発振クロック)を選択し、WDTオフにしています。
CONFIG2では4xPLLをイネーブルにしています。
4xPLLはもともとイネーブルになっていますからあらためて表記する必要はないのですがここを省略するとAKIプログラマにCONFIGがないよって叱られてしまいます。
上の方にも書きましたがこのCONFIG行の書き方がPICごとに異なっていて毎回閉口させられます。
実際のところこのCONFIG行はアセンブラによってどのようなマシン語に変換されるのでしょうか。
それを知るには前回と同様アセンブル時に作成されるLSTファイルを見れば一目瞭然です。

下はLSTファイルの該当部分です。


CONFIG1は8007 3FE4になっています。
WDTディスイネーブルはビット4とビット3を’0’にします。
FOSCを内部発振クロックモードにするのはビット2〜0を’100’にします。
それ以外のビットは既定値(’1’)のままです。
なんだ。
そのまんまじゃありませんか。
CONFIG2は8008 3FFFで既定値のままです。
たったこれだけのことなのに毎回のように悩ませられるなんてなんだかなあという感じです。
ところがPICアセンブラの堪らんところはこれだけじゃないのです。
アセンブラによって作成されるHEXファイルを確認してみますとなんじゃこりゃあとたまげてしまいます。

下が作成されたHEXファイルです。


CONFIGに関するところは8、9、10の3行です。
8ではCONFIGの上位アドレスを0001であると既定しています。
おいおいおい。
CONFIGアドレスはプログラムエリアと同じ上位アドレス0000の8007と8008なんじゃありませんか?
それがなんと次の9、10の行では下位アドレスは000Eと0010だと書いています。
もうめっちゃくちゃであります。

こちらはPIC16F1827のメモリマップです。

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

話がちごうとるじゃないのと言いたくなるのでありますが。
MicrochipさまのDataSheetをまともに読んだりするとまじ悩んでしまうことになります。
こういうところはこだわったりしないで「あ。そうなの」なんてさらりと受け流してしまうに限ります。
もう一度。
なんだかなあ。

[2025.1.12追記]
一晩寝ると頭がリセットされて見えなかったものが見えてきたりします。
上記の部分は私の早トチリでありました。
ちょいとおばかでありました。
Microchipさまはまともでありました。
そのあたりについては次回に訂正いたします。

PICBASICコンパイラ[第196回]
2025.1.11 upload

前へ

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