12F629 / 初期化

コンフィグワードの設定
__CONFIG(INTIO & WDTDIS & PWRTEN & MCLRDIS & BOREN & UNPROTECT);
こんな感じで指定します。
INTIO,WDTDISなどの定数は、pic.h からさらにインクルードされている各デバイスごとのヘッダーファイル(pic12f6x.hなど)に定義されています。
処理開始時の設定項目
OSCCAL の値のセット
// OSCCAL の値を読み出してセットする OSCCAL = _READ_OSCCAL_DATA();
出力ポート状態の初期化
// 出力ポート状態初期化 GPIO = 0b00000000; // 0b00000000 = all off //--543210
CMCON レジスタの初期化
CMCON レジスタはバンク0にある特殊レジスタで、コンパレータを制御するための各種設定をするレジスタです。コンパレータというのは、ある決められた電圧(リファレンス電圧)と入力電圧を比較し、それらの大小関係を判定する機能を指します。例えば、充電器などで、あらかじめ設定した電圧を超えたら充電を中止する、と言うような用途に使うことができます。
コンパレータはその性質上、入出力電圧をアナログ電圧として処理します。従って、その場合は、PIC12F629 の入出力用のピンは、アナログモードで動作します。一方、コンパレータを使わない場合は、入出力ピンは、デジタルモードで動作します。
つまり、デジタルモードで動作させるには、コンパレータを動作させない設定にしなければなりません。CMCON レジスタの下3桁はコンパレータのモードを指定するビットで、「000」から「111」まで、8種類のモード指定ができるようになっています。
詳しくは述べませんが、これを「111」にするとコンパレータは OFF となり、従って入出力ピンはデジタルモードで動作するようになるのです。従って、CMCON レジスタに 0b00000111 を書き込むと、それ以降、デジタル入出力を行うことができます(電源投入直後やリセット直後は、自動的にアナログモードになっている)。言い換えれば、デジタル入出力を行うためには、それに先立って、CMCON レジスタに 0b00000111 という値を書き込んでやらなければなりません。
// GPIO GP0 〜 GP2 のコンパレータ設定 CMCON = 0b00000111; // 0b00000111 = off
TRISIO レジスタの初期化
ポート0(7ピン)、ポート1(6ピン)、ポート2(5ピン)、ポート4(3ピン)は入力にも出力にも使えますから、どちらに使うのか指定しなければなりません。これを指定するのが、バンク1にある TRISIO レジスタで、0なら出力、1なら入力です。
ポート3は入力専用ですので、右から4番目のビットは1しかありえません。(入力専用のため、GP3を使用しない場合、外部でプルアップが必要)ポート5は出力専用ですので、右から6番目のビットは0しかありえません。
// 入出力指定 TRISIO = 0b00001000; //--543210