2015-10-05 Mon
新しい環境で、諸兄の書いてくれたシリアル通信のプログラムを自分の環境で実現するべくもがいていました。
コンパイルはすんなり通るのに思った動作をしてくれません。
全部疑って、一つ一つつぶして、やっと思うような動作ができ
るようになりました。
まず、はまったのが、デバックのために、プログラムの間に
書き込んだ書式です。
int count=1000;
RA0=1;
RA1=0;
while(count>0){count--;}
count=1000;
RA0=0;
RA1=1;
while(count>0){count--;}
LEDが交互に点滅するはずですが、RA1に当てはまるLED
の変化がありません。
もしやと思い
PORTA=0b00000001;
PORTB=0b00000000;
・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・
PORTA=0b00000000;
PORTB=0b00000001;
のように変更したら動きました。「RA」の表記では、ポート
全体の値を書き換えてしまってるようでした。
よく見てみるとポートのビットの操作の記述が変更に変更に
なってました。
RA1→→PORTAbits.RA1
のように書かないとだめでした。
次にはまったのが、外部オシレーターの使用でした。
これは、デバックの方法の手落ちでした。外部オシレーター
でプログラムがうまく動いているのか確かめるのに、LEDの
点滅プログラムを挿入しましたが、ウエイトタイムが短くて
点灯しっぱなしで、うまく動いてないように見えてしまいま
した。何回、書き直したことか。
丸一日かかって、諸兄のプログラムの再現ができました。
PICのUART機能を使って、PCからのキー入力を
エコーバックするプログラムです。
それから、とんでもないミスをしてました。RXとTXのピンアサ
インを私の教科書(キットで遊ぼう電子回路シリーズNo9)で
確認しながらしてましたが、これが間違いでした。
教科書のPICは、16F627AというPICで、今回使ったのは、
16F88というPICでした。同じ18ピンのICなので、同じだろう
たたかをくっくってたのが間違いでした。なんと、
16F627
TX--8ピン(RB2)
RX--7ピン(RB1)
16F88
TX--11ピン(RB5)
RX-- 8ピン(RB2)
なんと、TXとRXが入れ替わってました。これでは、動きません
ね。やはり、データシートみないとだめなんですねえ。
TOP PAGE △