|
在使用pic单片机时(pic18f25k80),发现串口没有空闲判断,以下是结合网上和自己看手册的延迟方法。
1、根据字节+定时器判断
一个字节,按传统的算:一个起始位+8个数据位+一个结束位 = 10位 波特率如果为 B , 一个字节所需要时间 t = (1/B) * 10
定时器时间定为: T = 1.5 t ,一般情况是如此,根据实际情况设定,但不会超2t.
在中断里每接收完一个字节,接收完一字节时间应该为t,如果定时器没为0 ,将定时器重新恢复初值(1.5t),如果为0,说明这一帧已经接收完了。
后来调试发现一个问题,就是在485通信时,多个丛机发给主机,就会出现接收到一帧数据,两个从机数据在一起,为什么请自己思考一下?
2、根据位+定时器判断
如图2所示,会有一个起始位和停止位,这个方法,网上讲述最多。这个就是解决上面两个从机发送的数据在主机接收的同一帧中,
这种现象称为黏包。
根据停止位为高,延迟3.5个位 的时间,判断是否一直为高,如果 是 一帧接收完全,否,继续接收。
以上两种我是都用的,具体讲述第一种:根据字节+定时器判断 。
|
-
2.png
(27.78 KB, 下载次数: 71)
-
1.jpg
(60.77 KB, 下载次数: 85)
|