- 締切済み
PICのシリアル通信について
現在PICで電子工作を勉強中です。 PIC16f628Aを使ってパソコンとのシリアル通信をしようと思っています。 しかし、PICから"Hit some key for test"という文字列をおくったところ、 文字化けして"ソ3!・ソ)5"といった感じで出力されてしまいました。 文字化けが起きる原因としては何が考えられるのでしょうか? なお、パソコン側の端末にはTera Termを使用しています。 どなたかご教授お願いします。 以下にソースコードを示します。 #include <pic.h> __CONFIG(MCLRDIS & PWRTEN & BORDIS & UNPROTECT & WDTDIS & LVPDIS & HS); __IDLOC(628A); unsigned char getchr(void) { while(RCIF == 0); return (RCREG); } void putchr(unsigned char c) { while(TXIF == 0); TXREG = c; } void puts(const unsigned char *s) { while(*s) putchr(*s++); } void main(void) { PORTB = 0; TRISB = 0b00000010; SPBRG = 129; TXSTA = 0b00100100; RCSTA = 0b10010000; puts("Hit some key for test\n"); puts("\n"); while(1) putchr(getchr()); }
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- ricardo_
- ベストアンサー率19% (14/72)
1バイトだけ送信して調べるといい。 文字も010101と並ぶ物や、00001111となるものなど、パターンを考えます。 それとターミナルで表示される文字を比較すれば、見当が付くでしょう。
- N-Ishikawa
- ベストアンサー率25% (1/4)
goosyuさんも回答されていますが、シリアル通信(非同期通信)は以下 パラメータで設定されており、これらが全て一致しないとまともに通信できません。 #エラーが発生するわけではないから困ったものなんですが。 ・データのビット数 ・時間間隔(BPS) ・ストップビットの長さ(1、1.5、2) ・パリティの有無 ・パリティを利用するときの偶奇 これらは PIC側はもちろん、PC側にもある設定です。 PIC側のパラメータ(TXSTAレジスタ及びSPBRG レジスタ)を見る限り、 9600bpsで接続しようとしているように見えますが、その他パラメータが よくわかりません。 PCではデバイスマネージャ経由で各パラメータが設定可能ですので そちらで調整しつつ、PICがどのようなパラメータで送信しているのか 確認されるとよいかと思います。
- goosyu
- ベストアンサー率58% (36/62)
文字化けの原因として一般的なことになりますが ・PIC側とパソコン側の通信設定に誤りがある(通信速度,データビット,スタートストップビット,パリティ有無) ・OSCの周波数からPIC側のボーレイトが決定されていると思いますがその計算があっていない為,通信速度が正しくない。 ・通信ケーブルに異常がある。
- ymmasayan
- ベストアンサー率30% (2593/8599)
PICはよく知りませんが双方の文字コード表が食い違っている可能性が強いです。 PCではいくつもの文字コード表が使われていますがPICは恐らく1つでしょう。 文字コード表が合わない場合PC側で変換してやるのが普通です。
お礼
迅速なご回答ありがとうございます。 今回のテストでは英字しか使用しておらず、どのような文字コードであったとしても 文字化けが発生するとは思えないのですがどうなのでしょうか?