何故、RS232Cポートが思ったように動かなのでしょうか?
問題はいくつか考えられます。順に解説します。
*送信中など他のタスクを行なっているときに受信データが入ってきて、データが失われてはいませんか。 getc()関数をもっとも高い位置(優先順位の高いところ)においてデータを落とさないようにプログラムを再構成します。
もし、ポーリングでデータを得てる場合、kbhit()を使うと1/3の時間で受信データのチェックが行なえます。また、9600bpsのとき、kbhit()関数をおおよそ35μSで呼び出して受信をチェックしないとデータを落とします。
トライステート・レジスターの設定が正しいことを確認してください。使用されるモード(standard, fast, fixed)は
#USE RS232に遭遇した時のモードになります。デフォルトのSTANDARDモードを使用するのが最も安全です。
main() {
while(TRUE)
putc('U');
}
ロジックプローブ、スコープなどを使用してXMITピンのアクティビティを確認してください。
スコープで見ることができる場合は、ビット時間(1/BAUD)を確認してください。
レベルコンバータの後にもう一度点検してください。
main() {
printf("start");
while(TRUE)
putc( getc()+1
);
PCに接続した時、Aを入力するとBがエコーバックされます。もし、なにも戻ってこない場合(初期の"Start"を除)、
PIC®MCUのRCVピンをロジックプローブでチェックします。
HIGH状態であることを見ることが出来ますが、PCでキーが押されたときパルスがLowになるはずです。
それがどこに失われているかを調べるためにバックトレースします。