8051 マイクロコントローラーをコンピューターとワイヤレスで通信させています。マイクロコントローラーはシリアル ポート (DB9) に文字列を送信し、コンピューターはこの文字列を受信して操作します。
私の問題は、8051 に文字列を 1 回だけ送信させる方法がわからないことです。PC 側で文字列を操作する必要があるため、一度だけ受信する必要があります。現在、C コードでは文字列を 1 回送信していますが、コンピューターでは同じ文字列を継続的に受信しています。これは、SBUF にあるものが継続的に送信されるためだと思います。文字列を 1 回だけ送信する方法はありますか? SBUF を空にする方法はありますか?
DB9 の RTS (Request to Send) ピン (7 番目のピン) を使用しようとしました。そのピンの電圧を無効にすると、シリアル ポートへのデータの流れが停止することをどこかで読んだためです。そこで私がしたことは、文字列を送信するようにマイクロコントローラーをプログラムし、DB9 RTS ピンに接続された出力ピンに論理レベル 0 を送信することでした。しかし、それはうまくいきませんでした。
誰か提案はありますか?本当に感謝しています。
編集
私が PC で使用しているソフトウェアは、Xbee モジュール用の X-CTU です。これは私のマイクロコントローラのコードです:
include reg51.h
void SerTx(unsigned char);
void main(void)
{
TMOD = 0x20;
TH1 = 0xFD;
SCON = 0x50;
TR1 = 1;
SerTx('O');
SerTx('N');
SerTx('L');
SerTx('Y');
}
void SerTx(unsigned char x)
{
SBUF = x;
while(TI==0);
TI = 0;
}
誰かが実際に文字列を一度だけ送信していることを確認してもらえますか?
編集
Steve、brookesmoses、Neil は、問題を引き起こしているのは私の主な機能の後に起こっていることだと彼らが言ったとき、頭に釘を打ったようです。Steve が提示した提案されたコード (より具体的には for(;;); と main の外で serTX を定義する) を試してみたところ、完全に機能しました。コントローラーはおそらく再起動されるため、同じコードが繰り返されます。
助けてくれてどうもありがとう!:)