我正在制作一个 8051 微控制器与计算机进行无线通信。微控制器将向其串行端口 (DB9) 发送一个字符串,计算机将接收该字符串并对其进行操作。
我的问题是我不知道如何让 8051 只传输一次字符串。由于我需要在 PC 端操作字符串,因此只能接收一次。目前,即使在 C 代码中我发送了一次字符串,但在我的计算机上我连续接收到相同的字符串。我认为这是因为 SBUF 中的任何内容都是连续传输的。有什么方法可以让我的字符串只发送一次吗?有没有办法清空 SBUF?
我尝试使用 DB9 上的 RTS(请求发送)引脚(第 7 个引脚),因为我在某处读到,如果我否定该引脚上的电压,它将停止数据流向串行端口。所以我所做的是对我的微控制器进行编程以发送字符串,然后将逻辑电平 0 发送到连接到我的 DB9 RTS 引脚的输出引脚。然而,这并没有奏效。
有没有人有什么建议?我真的很感激他们。
编辑
我在 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;
}
有人可以验证它实际上只发送一次字符串吗?
编辑
看起来史蒂夫、布鲁克斯莫斯和尼尔一针见血,他们说这是在我的主要功能之后发生的事情导致了问题。我刚刚尝试了史蒂夫提出的建议代码(更具体地说是 for(;;); 并在 main 之外定义 serTX),它运行良好。控制器可能已重新启动,因此相同的代码不断重复。
非常感谢你的帮忙!:)