[PIC]16F88でRB6,RB7が入出力ピンとして使えない時にチェックする事

PIC16F88等の18ピンのPICを使用している場合、RB6,RB7ピンが入力として使えない場合があります。
このような際ににチェックする事を羅列してみました。

RB6,RB7が入出力ピンとして使用できないときのチェックポイント


Check1:アナログ入力ピンとの競合

RB6,RB7は、アナログ入力のAN5,AN6と共用になっています。
PORTBのデジタル入出力として利用したい場合は,ANSELレジスタの値を0にする必要があります。
[PIC]PIC16F88でPortAを入出力ピンとして動作しない場合にチェックする事

HI-TECH Cによるコード例

void main( void )
{
    ANSEL = 0;
    ...
}



Check2:デバッグピンとの競合

16F88は、RB6,RB7がデバッグ用のピンになっています。
__CONFIG()マクロでDEBUG_ONにしている場合は、OFFにしてデバッグ機能を無効にします。

PicKit3などのライタを使用している場合、ライタが接続されていると、RB6,RB7を入力用ピンとして使用できません(PicKit3側の回路が生きるため)。
この為、テストを行う場合は都度、ライタを外す必要があります。

HI-TECH Cによるコード例

#include <htc.h>
 
__CONFIG (  DEBUG_OFF & ... )   // ICDデバッグを無効にする
 
void main( void )
{
    ...
}




Check3:Timer1機能との競合

Timer1タイマを使用している場合、RB6,RB7はクロック供給のピンとして使用可能です。

内部オシレータ等をクロックソースとして使用する場合は、T1CONレジスタのT1OSCENビットを0にする必要があります。外部オシレータを使用する場合は、RB6,RB7をデジタル入出力として使えません。

HI-TECH Cによるコード例

void main( void )
{
    T1CONbits.T1OSCEN = 0;
    ...
}




Check4:Input/Outputの指定が逆になっている

該当ポートを出力として使いたいのに入力モードになっている(もしくはその逆)になっていると、当然ながら正しく動作しません。

PORTBのピンに対する入出力モードはTRISBレジスタで指定でき、入力モードにしたい場合は対応するビットを”1″、出力にしたい時は”0″にします。

HI-TECH Cによるコード例
1:RB6,7を入力にする場合

void main( void )
{
    TRISBbits.TRISB7 = 1;   // RB7を入力モードにする
    TRISBbits.TRISB6 = 1;   // RB6を入力モードにする
    ...
}



2:RB6,7を出力にする場合

void main( void )
{
    TRISBbits.TRISB7 = 0;   // RB7を出力モードにする
    TRISBbits.TRISB6 = 0;   // RB6を出力モードにする
    ...
}


関連記事

One Response to “[PIC]16F88でRB6,RB7が入出力ピンとして使えない時にチェックする事”

  1. nori より:

    久しぶりにPIC16F88を使ってみたのですが、みごとにANSELの設定にはまりました。
    お蔭さまで解決しました。ありがとうございました。

nori へ返信する コメントをキャンセル

メールアドレスが公開されることはありません。