PIC16F687のCポート

PIC16F687に7セグLEDをつないで回路をつくりました。


C3とC4が制御出来ずにはまりました。C3に出力しようとしても無反応。C4に出力するとC3とC4がhighになってしまいました。

しばらくはまりましたが、データシートにこんな記述を発見。

Note : The ANSEL (11Eh) and ANSELH (11Fh) registers must be initialized to configure an analog channel as a digital input. Pins configured as analog inputs will read ‘0’.

inputについては書いてありますがoutputについては特に書いてありませんが、ANSELとANSELHをセットしなければいけないようです。さらにCM2CON0とCM2CON1もセットしないと出力できませんでした。結果次のようなコードで無事に動きました。

CCS-Cコンパイラを使っています。
プログラムの冒頭部分で

#byte ANSEL = 0x11E
#byte ANSELH = 0x11F

#byte CM2CON0 =0x11A
#byte CM2CON1 =0x11B

main関数の中で

 set_tris_c(0x00);

  CM2CON0 = 0x00;
  CM2CON1 = 0x00;

   ANSEL  = 0x00;
   ANSELH = 0x00;

とりあえずこれでいけるようです。

参考にさせていただいたサイトは
http://www.robotsfx.com/robot/robohow/RoboHow43/RoboHow43.html
でした。