![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
現在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件)
- 最新から表示
- 回答順に表示
No.4
- 回答日時:
1バイトだけ送信して調べるといい。
文字も010101と並ぶ物や、00001111となるものなど、パターンを考えます。
それとターミナルで表示される文字を比較すれば、見当が付くでしょう。
No.3
- 回答日時:
goosyuさんも回答されていますが、シリアル通信(非同期通信)は以下
パラメータで設定されており、これらが全て一致しないとまともに通信できません。
#エラーが発生するわけではないから困ったものなんですが。
・データのビット数
・時間間隔(BPS)
・ストップビットの長さ(1、1.5、2)
・パリティの有無
・パリティを利用するときの偶奇
これらは PIC側はもちろん、PC側にもある設定です。
PIC側のパラメータ(TXSTAレジスタ及びSPBRG レジスタ)を見る限り、
9600bpsで接続しようとしているように見えますが、その他パラメータが
よくわかりません。
PCではデバイスマネージャ経由で各パラメータが設定可能ですので
そちらで調整しつつ、PICがどのようなパラメータで送信しているのか
確認されるとよいかと思います。
No.2
- 回答日時:
文字化けの原因として一般的なことになりますが
・PIC側とパソコン側の通信設定に誤りがある(通信速度,データビット,スタートストップビット,パリティ有無)
・OSCの周波数からPIC側のボーレイトが決定されていると思いますがその計算があっていない為,通信速度が正しくない。
・通信ケーブルに異常がある。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語でユーザ関数を利用して入力された文字列を反転させるプログラムを作りたいです。 3 2023/01/29 19:47
- C言語・C++・C# c言語配列の結合についてです。 なぜうまくいかないのでしょうか。 #include <stdio.h 4 2022/05/30 22:42
- C言語・C++・C# 宣言する関数の形が決まっている状態で、 str1とstr2の文字列をこの順に引っ付けてstrに保存し 2 2022/05/30 18:21
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# カードシャッフルのブログラムを使ってc言語でブラックジャックをしたい 2 2022/04/12 15:13
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# const char** p;のとき、free(p)でC4090エラーとなるのはなぜですか 3 2023/03/31 16:28
- C言語・C++・C# Cのdoubleの浮動小数点表示について 3 2023/04/17 13:14
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
gcc: incompatible pointer type
-
一定時間ごとにプログラムを起...
-
コンパイルエラー: LNK2001
-
4桁7セグでダイナミック点灯
-
C# Controls.Addで動的に配置し...
-
C++にてtemplateで受け取った任...
-
VC++でGetKeyboardStateがうま...
-
プログラムの実行時に'<'でリダ...
-
信頼区間の1.96や1.65ってどこ...
-
複数桁10進数の*桁目だけを抽出...
-
数学 確率変数Xは、X=2またはX...
-
Enterキーを押されたら次の処理...
-
反転した数値を表示させるやり方
-
2÷3などの余りについて
-
中学生で数学です。 √84nが自然...
-
「Aに対するBの割合」と「Aに対...
-
ボール同士の衝突
-
std::set<int> で、ある値が何...
-
変数とパラメータとは違うもの...
-
漢字のソートについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
既定のコンストラクタがありま...
-
【gcc・cygwin】multiple defin...
-
戻り値を返す関数の前に(void)...
-
C++にてtemplateで受け取った任...
-
多重定義が起きている?--lnk20...
-
gcc: incompatible pointer type
-
静的でないメンバ関数の呼び出...
-
int main()、void main()、void...
-
Notepad++の関数リスト表示の変...
-
C# KeyDownイベントでショート...
-
C# Controls.Addで動的に配置し...
-
ArduinoでMouse関数を使用して...
-
(void)0 はどんな意味ですか
-
DLLの関数呼び出しで引数がある...
-
void*型の配列について
-
ウインドウの移動禁止
-
const_castのつかいどころを教...
-
VC++でGetKeyboardStateがうま...
-
C言語 プロトタイプ宣言
-
stddef.hって何?
おすすめ情報