C51单片机串口丢包的几种情况分析!

C51单片机串口丢包的几种情况分析!

3、发数据过程

(1)用户把TI置1

(2) 系统产生中断,内核轮询到TI为1,跳转至串口中断服务函数

(3) 用户把1byte要发的数据装载至SBUF

(4)硬件发送器发送数据,发送完成自动把TI置1

(5)系统产生中断,重复(2)~(4)

(6) 当用户不再往SBUF装数据时,发送数据过程结束

发数据也是1byte 1byte发,每1byte先产生中断再装载数据。

 

数据流向过程如下图:

C51单片机串口丢包的几种情况分析!

又如果,串口中断服务函数里面太长,前一次还没处理完,新的中断又到了,就会自己耽误自己。

4、当前数据还没发完,用户又把新数据装到我的SBUF中

我的硬件在发数据,此时TI已经被用户程序清0了,

如果程序员逻辑不够清晰,马上又要发一包新数据,把TI置1 了,那么CPU会马上进入中断服务函数,中断服务函数马上会把新的1byte 数据装到我的SBUF里,我刚刚正在发的那1byte 数据还没发完就被新数据覆盖弄丢了。

解决:程序串口驱动层接口发数据前,先判断当前是否处于发送数据过程中,若正在发送过程中,不用再将TI置1.

5、  我们这里总中断关了,对方还发数据给我

总中断关了,对方给我发数据,我的硬件还是能收到数据的,我也会把RI置1,但是此时就不会产生中断,不会进入中断服务函数了,如果对方马上又给我发了新的1byte数据,用户这时还是没有把总中断打开,刚刚那1byte数据还在SBUF中会被新来的数据覆盖,用户没取走丢掉了。

解决:对方增加重发逻辑。

6、我硬件能力不够,收发速度跟不上

用户竟然选择了系统时钟才2M,我的波特率却被设置成了115200这么大,

此时我的波特率发生器产生的波特率已经不能达到115200了,数据还是能1byte 1byte的发出去,只是就是发出去的数据电平的长度可能不对了,

标准串口每1byte数据 = 1bit起始位+ 8bit数据位+奇偶校验位(1或1.5或2或无)+停止位(1bit),起始电平是低电平,无数据时是高电平。

C51单片机串口丢包的几种情况分析!

1.外媒谈英伟达-Arm并购案~

2.这里聚焦了全球嵌入式技术风景~

3.航天器、导弹喜欢用单片机/p>

4.工程师的硬核单片机编程思想~

5.嵌入式开发需要架构设计吗/p>

6.【技术转管理必备】嵌入式产品的研发流程

C51单片机串口丢包的几种情况分析!

免责声明:本文系网络转载,版权归原作者所有。如涉及作品版权问题,请与我们联系,我们将根据您提供的版权证明材料确认版权并支付稿酬或者删除内容。

文章知识点与官方知识档案匹配,可进一步学习相关知识Java技能树首页概览91513 人正在系统学习中

来源:嵌入式资讯精选

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2021年2月19日
下一篇 2021年2月19日

相关推荐