【发布时间】:2009-08-01 10:58:10
【问题描述】:
我正在使 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;
}
有人可以验证它实际上只发送一次字符串吗?
编辑
看起来史蒂夫、布鲁克斯莫斯和尼尔一针见血,他们说这是在我的主要功能之后发生的事情导致了问题。我刚刚尝试了 Steve 提出的建议代码(更具体地说是 for(;;); 并在 main 之外定义 serTX),它运行良好。控制器可能已重新启动,因此相同的代码不断重复。
非常感谢您的帮助! :)
【问题讨论】:
-
我在PC上使用的软件是X-CTU for Xbee模块。这是我的微控制器上的代码:#include
void SerTx(unsigned char);无效主(无效){ TMOD = 0x20; TH1 = 0xFD; SCON = 0x50; TR1 = 1; SerTx('O'); SerTx('N'); SerTx('L'); SerTx('Y'); void SerTx(unsigned char x) { SBUF = x;而(TI==0); TI = 0;有人可以验证它实际上只发送一次字符串吗? -
请编辑您的问题,并插入代码,格式化为代码,以便于阅读。
-
@CodeConfused:很高兴我们都找到了解决方案!我还有两个要求给你。 (1) 对于这个问题,以及您在 Stack Overflow 上的所有其他问题,请通过单击您认为可以为您的问题提供最佳答案的大勾号,将答案标记为“已接受”。这对于将来可能有相同问题的其他人很有用,因为他们可以立即看到最佳答案。 (2) 在本题中,请将代码格式化为代码。为此,请编辑问题,选择代码,然后按代码按钮(它是带有 1 和 0 的按钮)。谢谢。
标签: c embedded serial-port microcontroller 8051