我正在使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)并且它工作得很好.控制器可能重新启动,因此相同的代码不断重复.
非常感谢你的帮助! 原文链接:https://www.f2er.com/c/115835.html