« 「天文屋のためのマイコン入門」サブルーチンについて考える | トップページ | よっちゃんとのトーク解説その1 »

2014年6月16日 (月)

「天文屋のためのマイコン入門」PICマイコンのコンフィグレーション

今日は今まで説明を後回しにしてきた次の一行

__CONFIG H'2007', H'3F18'

について詳しく解説していきたいと思います。

16進数表記をレジスタと同じにすればこのようになります。

__CONFIG 2007h, 3F18h

この一行は、端的に言うと、PICマイコン16F88の初期設定(コンフィグレーション)を行っている一文です。機械的な説明をすると、番地2007hのプログラムメモリに値3F18hに設定していると見ることができます。

実は、16F88はプログラムを格納するためのプログラムメモリの一部を借りて、そこをPICのコンフィグレーションの設定場所としているのです。番地は決まっていて2007h番地と、2008h番地ですが、2008h番地は使用頻度は高くないので、今後省略します。

1406162 

次に__CONFIGの一文ですが、これはMOVLWなどと同じ命令でしょうか? NOです。これはマイコンが実行する命令ではありません。ENDなどと同じ擬似命令(開発ツールに対する指示)の部類です。

__CONFIGがマイコンの命令ではないことは明らかです。PICの命令の中にはプログラムメモリに書き込む命令はありません。(できない、ということではない) レジスタなどのデータメモリに書き込む命令はありますが、プログラムメモリに書き込む命令はありません。

また仮にそのような命令があったとしても、そもそもコンフィグレーションが終わっていないと、何の命令も実行できませんから、意味がありません。

ということで、2007h番地への書き込みは、ビルドしたプログラムを書き込むときに一緒にコンフィグレーション設定値も書き込んでおくほかありません。__CONFIGはそのための命令です。したがって、この一文は、

__CONFIG 2007h, 3F18h

プログラムを書き込むときに、2007h番地に3F18hも一緒に書き込んでおけという、MPLABに対する命令です(マイコンに対する命令ではない) つまり擬似命令ということができます。

それでは、このコンフィグレーションの設定値について詳しく説明します。

2007h番地の各ビットは数ビットづつのグループに分かれていて、次のような記号を持ちます。

1406161_2

記号の意味は後で出します。

この各ビットを1または0に設定するのが、コンフィグレーションです。

サンプルプログラムでは設定値を16進数に変換して書きましたが、16進数が苦手な人は、2進数でもかまいません。

__CONFIG 2007h, B'11111100011000'

さて、ここは1または0を正しく設定しないと、マイコンが動作しなかったり、ポートの一部が使えなかったりします。

ですから、非常に重要な設定です。それなのに、このコンフィグレーションについて分かりやすい説明はあまり見ません。そこで私が、3日ががりで作ったPDFがあるので、それをよく読んで利用してください。

「16F88コンフィグ説明書」をダウンロード

補足事項

●デフォルト値は'1'です。なぜなら、プログラムメモリはフラッシュメモリであり、何も書込みしなければ1だからです。

●どのビットも必ず、1か0か選択してください。この機能は利用しないから、どちらでもいいやと思うと、意図しない設定になって動作しません。

|

« 「天文屋のためのマイコン入門」サブルーチンについて考える | トップページ | よっちゃんとのトーク解説その1 »

コメント

コメントを書く



(ウェブ上には掲載しません)




« 「天文屋のためのマイコン入門」サブルーチンについて考える | トップページ | よっちゃんとのトーク解説その1 »