STC单片机,普通IO口模拟串口通讯,不使用定时器,使用软件程序延时,相同的延时程序,能够正常发送数据。

STC单片机,普通IO口模拟串口通讯,不使用定时器,使用软件程序延时,相同的延时程序,能够正常发送数据。,第1张

STC单片机不是有独立波特率发生器么?干嘛不用呢

如果你不用PWM模块的话,PWM也可以做定时器,

为什么一定要软件模拟呢

如果一定要用延时的方式来接收,首先你必须用中断来接收起始位,并且在中断中完成所有的接收工作,如果是用定时器查询的话,使用中间点检测,并且保证此时只有定时器一个中断在开放

多数情况下,因为下位机对上位机的响应数据是不确定的,上位机指令发出后,通过延时一定时间,再读取串口返回数据,可以正确读取所有返回数据,程序上也比较好处理。

当然,如果下位机返回数据长度固定的话,也可以通过MSComm控件的OnComm事件来触发接收处理过程。

问题原因可能是如下几个方面:

1、是否使用的是USB转串口的转换线?这种方式目前出问题太多了,系统正常运行状态下还好点,如果单片机设备频繁上下电问题就特别多,而且好像没有太好的解决方法。

2、通讯双方的协议是否不匹配?波特率不说了,还有比如是否都是1个起始位+8个数据位+1个停止位,二者应一致。

3、PC机一端问题。这种可能性不大,如果使用的是串口调试助手之类的软件就更不会有问题。

4、单片机一端软件可能有问题。而且问题出在接收时的可能性较大。具体的:

a、在软件流程中是否有对REN控制位修改的指令?如果有需要检查当REN=0时的相关语句。

b、应特别关注TI的清零 *** 作。接收时RI有效后将数据读入内存、清RI标志,即可退出接收 *** 作;而发送时最后1个字节送入SBUF后,发送 *** 作并未完成,必须等待这次发送完成后TI置位,然后清0,才能根本上保证下次 *** 作的正确性的情况。

c、如果串口收发未使用中断方式,需要检查主程序流程中是否有较长时间的延时程序,会不会造成数据接收遗漏的情况。以9600波特率为例,1个字节的发送或接收需要差不多1ms的时间,延时 *** 作如果有超过1ms的就可能会造成数据丢失。

d、其它中断处理软件是否会长时间占用CPU资源,使得串口数据的接收出现数据丢失情况?串口如果采用了中断,其中断级别是否是高级别?

5、设备运行环境。是否有外部强电磁干扰?比如电机的起停。处理方法就说不清了。

以上就是关于STC单片机,普通IO口模拟串口通讯,不使用定时器,使用软件程序延时,相同的延时程序,能够正常发送数据。全部的内容,包括:STC单片机,普通IO口模拟串口通讯,不使用定时器,使用软件程序延时,相同的延时程序,能够正常发送数据。、vb串口通讯为什么要延时、单片机串口通信时而正常,时而不正常,硬件没问题,应该是时序问题,一般会有什么时序问题呢等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10120061.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存