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

ナビゲーション

プロフィール

Photo Hondarer  My status

自分に正直に、目指す物を目指すかたちで、全ての人が幸せになれるシステムを削り出す職人でありたい。

Powered by
HndWiki 012405