「天文屋のためのマイコン入門」PICマイコンのコンフィグレーション
今日は今まで説明を後回しにしてきた次の一行
__CONFIG H'2007', H'3F18'
について詳しく解説していきたいと思います。
16進数表記をレジスタと同じにすればこのようになります。
__CONFIG 2007h, 3F18h
この一行は、端的に言うと、PICマイコン16F88の初期設定(コンフィグレーション)を行っている一文です。機械的な説明をすると、番地2007hのプログラムメモリに値3F18hに設定していると見ることができます。
実は、16F88はプログラムを格納するためのプログラムメモリの一部を借りて、そこをPICのコンフィグレーションの設定場所としているのです。番地は決まっていて2007h番地と、2008h番地ですが、2008h番地は使用頻度は高くないので、今後省略します。
次に__CONFIGの一文ですが、これはMOVLWなどと同じ命令でしょうか? NOです。これはマイコンが実行する命令ではありません。ENDなどと同じ擬似命令(開発ツールに対する指示)の部類です。
__CONFIGがマイコンの命令ではないことは明らかです。PICの命令の中にはプログラムメモリに書き込む命令はありません。(できない、ということではない) レジスタなどのデータメモリに書き込む命令はありますが、プログラムメモリに書き込む命令はありません。
また仮にそのような命令があったとしても、そもそもコンフィグレーションが終わっていないと、何の命令も実行できませんから、意味がありません。
ということで、2007h番地への書き込みは、ビルドしたプログラムを書き込むときに一緒にコンフィグレーション設定値も書き込んでおくほかありません。__CONFIGはそのための命令です。したがって、この一文は、
__CONFIG 2007h, 3F18h
プログラムを書き込むときに、2007h番地に3F18hも一緒に書き込んでおけという、MPLABに対する命令です(マイコンに対する命令ではない) つまり擬似命令ということができます。
それでは、このコンフィグレーションの設定値について詳しく説明します。
2007h番地の各ビットは数ビットづつのグループに分かれていて、次のような記号を持ちます。
記号の意味は後で出します。
この各ビットを1または0に設定するのが、コンフィグレーションです。
サンプルプログラムでは設定値を16進数に変換して書きましたが、16進数が苦手な人は、2進数でもかまいません。
__CONFIG 2007h, B'11111100011000'
さて、ここは1または0を正しく設定しないと、マイコンが動作しなかったり、ポートの一部が使えなかったりします。
ですから、非常に重要な設定です。それなのに、このコンフィグレーションについて分かりやすい説明はあまり見ません。そこで私が、3日ががりで作ったPDFがあるので、それをよく読んで利用してください。
補足事項
●デフォルト値は'1'です。なぜなら、プログラムメモリはフラッシュメモリであり、何も書込みしなければ1だからです。
●どのビットも必ず、1か0か選択してください。この機能は利用しないから、どちらでもいいやと思うと、意図しない設定になって動作しません。
| 固定リンク
コメント