Microchipは我々を陥れるため、思わぬ設定をデフォルトにしています。
入門用といわれるPIC16F84Aの上位互換品であるPIC16F648A。
互換性があるとおもってそのままソースをコピーすると罠にはまります。
まず、デジタル・アナログ兼用のRA0/AN0ピンなどにおいて、
アナログ入力がデフォルトになっています。
普通に考えて最も良く使う設定はデジタルI/Oです。
だれだってデフォルトはデジタルI/Oだと思います。僕もそう思います。
しかし、現実は無情。何もしないとアナログ入力(アナログコンパレータ。ADコンバータではない)なのです。
HI-TEC C Pro-LITEの場合、
CMCON = 0x07;
をいれてアナログコンパレータを無効にすることでRA0〜RA3がデジタルI/Oとして使えるようになります。
PIC16F84AからPIC16F648Aへの移植にはもう一つの罠があります。
そのままソースをコピーすると、RB4ピンが使えません。
これは、PIC16F648AにはLVP(Low Voltage Programming)モードすなわち、
低い電圧でプログラミングを行なえるモードがあり、それがデフォルトで有効になっています。
RB4ピンはLVP用のプログラム用入力PGMピンと兼用になっており、なにもしないとデジタルI/OであるRB4としては使えないのです。
HI-TEC C Pro-LITEの場合、下のようにコンフィグ設定でLVPDISをいれてLVPを無効にすることでRB4が使えるようになります。
__CONFIG(UNPROTECT & BORDIS & PWRTEN & WDTDIS & INTIO & MCLRDIS & LVPDIS);
PIC16F84Aと並ぶ入門用PICとして、8ピンのPIC12F675があります。
これにもアナログ・デジタル兼用ピンがあります。
これもやはりアナログ入力がデフォルトになっています。
しかもアナログ入力には2種類あります。
すなわち、ADコンバータ入力と、アナログコンパレータ入力です。
この両方を無効にしないとデジタルI/Oとして使えません。
HI-TEC C Pro-LITEの場合、以下のようにして無効にします
ANSEL = 0x00;
CMCON = 0x07;
デフォルト設定の話から外れますが、もう一つピンの名前についての罠があります。
PIC16F648AのAN0ピンはアナログコンパレータ入力を指します。
一方PIC12F675のAN0ピンはADコンバータ入力を指し、アナログコンパレータ入力のピン名はCINです。
つまり、同じAN0という名前なのに違う機能を意味します。
PIC16F648AにADコンバータはありません。
ここまでくるとむしろ、詐欺にさえ思えます。
僕は思いっきり勘違いしてADコンバータがあると思ってPIC16F648Aを買いました(-_-;)