こんばんは!
このところ月1ペースで友達の結婚式に参加して、もはや自分も結婚した気でいるゆってぃです。

ていうか、よくテレビとかでカップルが
「友達の結婚式で出会って、そのまま付き合うことに・・・」

とか言ってるの見ますが

あれ、どうやるの??

いや、普通に無理でしょ!
だって、初対面だよ??
何を話せば良いのだよ!
大体ね、そんな高レベルのコミュ力がもともと備わっているなら
わざわざ結婚式で出会ってなくてもとっくに相手ができてるっつーの!(涙)


デュフンデュフン!!!!


さて、今日はPICマイコンのコンフィグレーションビットの設定方法についてお話いたします。
そもそもコンフィグレーションビットは、PICの設定項目の中でも、絶妙に厄介な項目です。
ここで躓いてしまう人も結構いるでしょう。
その原因は、他のレジスタの様に、プログラム上で設定できない
ことにあると思います。

後述しますが
PORTA = 0x01;
みたいな要領では設定が出来ない、ある意味ロックな設定値なのです。

なんでそんな事になっちゃってるのか。
PIC16Fシリーズを例に取ると、、そもそもこのシリーズのPC(プログラムカウンタ)は13bitしかありません。

------------------------------------------
<勝手にコラム PCとはなんぞや>
マイコンにしろメディアプロセッサにしろ、CPUにはPCとよばれるレジスタが必ず存在します。
このレジスタには、次に実行する命令のアドレスが格納されます。
例えば、ある関数がROM上の0x0FFに配置されていて、関数呼び出しでそこにジャンプする場合は、PCの値が0x0FFになります。

-----------------------------------------------------------------

PCが13bitしかないということは、使用できるアドレスは0x000~0x1FFまでということです。
PIC16FXXシリーズは、基本的にこの構造になっているはずです。
にも関わらず、コンフィグレーションビットのアドレスは、0x2007(PIC16F84A / PIC16F88など)に配置されていたりします。
ここはPCの範囲を超えた特別な領域であり、当たり前ですがソフト動作時にはアクセスできません。
ですので、プログラムを書き込むときに、一緒に書き込んでしまうのです。

ソフト動作時にアクセスできないということは、他のレジスタの様に
PORTA = 0x01;
とかは出来ない訳です。

じゃ、どうするか。
XC系統のコンパイラでは、pragma指令でコンフィグレーションビットを設定します。
例えば
#pragma config PWRT = 0
の様に書きます。

まぁ、PIC16F8Xシリーズの様にコンフィグの数が少なければこれでも良いのですが
例えば、PIC18Fシリーズなどになると、コンフィグレーションビットの数がかなり増えちゃいます。
実際に書くと、以下の様な感じになります。


// CONFIG1H
#pragma config FOSC = INTIO7
#pragma config FCMEN = OFF
#pragma config IESO = OFF

// CONFIG2L
#pragma config PWRT = 0
#pragma config BOREN = SBORDIS
#pragma config BORV = 18

// CONFIG2H
#pragma config WDTEN = OFF
#pragma config WDTPS = 32768

// CONFIG3H
#pragma config CCP2MX = PORTC
#pragma config PBADEN = ON
#pragma config LPT1OSC = OFF
#pragma config HFOFST = ON
#pragma config MCLRE = ON

// CONFIG4L
#pragma config STVREN = ON
#pragma config LVP = ON
#pragma config XINST = OFF

// CONFIG5L
#pragma config CP0 = OFF
#pragma config CP1 = OFF

// CONFIG5H
#pragma config CPB = OFF
#pragma config CPD = OFF

// CONFIG6L
#pragma config WRT0 = OFF
#pragma config WRT1 = OFF

// CONFIG6H
#pragma config WRTC = OFF
#pragma config WRTB = OFF
#pragma config WRTD = OFF

// CONFIG7L
#pragma config EBTR0 = OFF
#pragma config EBTR1 = OFF

// CONFIG7H
#pragma config EBTRB = OFF



ひとつひとつ手で書いていくのは、ちょっと大変ですね。
そこで、MPLAB Xでは、このコードが自動生成できるようになっています。

メニューから、Windowを選択します。
(事前に、自動生成を行うプロジェクトを、メインプロジェクトにしておいてくださいね)
次に、PIC Memory Viewsを選択し、最後にConfiguration Bitsを選択します。
すると、コンフィグレーションビットの設定画面が表示されます。
ここで、データシートを見ながら必要な設定をしたあと、Generate Source Code to Outputボタンを押すと
あら素敵!
pragma指令されたソースコードが表示されます。

あとはこれを、自分のコードにコピペすればOKです。
とっても便利な機能なのですけど、もし出来れば、一度は自分の手でプログラミングしてみて下さいね^^

最後までお読み頂いて、ありがとうございました!
関連記事
スポンサーサイト
コメント
コメントの投稿
トラックバック URL
トラックバック
ご訪問者様
プロフィール

ゆってぃ

Author:ゆってぃ
経歴7年の組み込み系・制御系エンジニアです。
("ど素人"という文言は取りました…笑)
ソフトウェア開発経験ゼロの状態から、なんとか実務がこなせるようになってきた現在に至るまでの経験を、備忘録代わりに綴っていきたいと思います。
入門者の方、大歓迎!
(上級者の方、ごめんなさい…)

あと、ブログには全然関係ないですが、Bumpy Headというバンドのギターをやっています。
ライブ情報なんかも書いたりすることがあるので、その時に「行ってもいいよ~」といった感じのコメントを戴けると、泣いて喜びます(泣)
ブログ読んでくださってる方なら、チケット代サービスしちゃいます!

最後に…滅多に流用することは無いでしょうが、このブログに書かれているソースは、特に指定の無い限りMITライセンスとします。ただし、一部それ以外のものもございますのでご注意下さい。
※ブログのリンク先にあるコードに関しては、リンク先のポリシーに従ってください。

最新記事
最新コメント
カテゴリ
RSSリンクの表示
メールフォーム

名前:
メール:
件名:
本文:

twitter
リンク
ブロとも申請フォーム
スポンサードリンク