電子書籍の厳選無料作品が豊富!

現在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());
}

A 回答 (4件)

1バイトだけ送信して調べるといい。


文字も010101と並ぶ物や、00001111となるものなど、パターンを考えます。
 それとターミナルで表示される文字を比較すれば、見当が付くでしょう。
    • good
    • 0

goosyuさんも回答されていますが、シリアル通信(非同期通信)は以下


パラメータで設定されており、これらが全て一致しないとまともに通信できません。
#エラーが発生するわけではないから困ったものなんですが。

・データのビット数
・時間間隔(BPS)
・ストップビットの長さ(1、1.5、2)
・パリティの有無
・パリティを利用するときの偶奇

これらは PIC側はもちろん、PC側にもある設定です。
PIC側のパラメータ(TXSTAレジスタ及びSPBRG レジスタ)を見る限り、
9600bpsで接続しようとしているように見えますが、その他パラメータが
よくわかりません。

PCではデバイスマネージャ経由で各パラメータが設定可能ですので
そちらで調整しつつ、PICがどのようなパラメータで送信しているのか
確認されるとよいかと思います。
    • good
    • 0

文字化けの原因として一般的なことになりますが


・PIC側とパソコン側の通信設定に誤りがある(通信速度,データビット,スタートストップビット,パリティ有無)
・OSCの周波数からPIC側のボーレイトが決定されていると思いますがその計算があっていない為,通信速度が正しくない。
・通信ケーブルに異常がある。
    • good
    • 0

PICはよく知りませんが双方の文字コード表が食い違っている可能性が強いです。


PCではいくつもの文字コード表が使われていますがPICは恐らく1つでしょう。
文字コード表が合わない場合PC側で変換してやるのが普通です。
    • good
    • 0
この回答へのお礼

迅速なご回答ありがとうございます。

今回のテストでは英字しか使用しておらず、どのような文字コードであったとしても
文字化けが発生するとは思えないのですがどうなのでしょうか?

お礼日時:2009/09/16 02:20

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!