永发信息网

两个51单片机485串口通信接收数据出错原因?大概发送三、五次会有一次全部接收正确。程序如下:

答案:3  悬赏:70  手机版
解决时间 2021-01-12 14:14
两个51单片机485串口通信接收数据出错原因?大概发送三、五次会有一次全部接收正确。程序如下:
最佳答案
按你说的,要看你的数据长度及波特率,有可能是发送频率过快。
注意一下你的发送端的数据长度以及发送频率追问数据仅4个字节,波特率9600追答发现频率是多少,发送周期应该不少于10mS ,你可以用10、20 ms试一下。追问应该不是这个问题的,因为我是按键按下一次就把四个数发送出去。我把程序截图补发上来了,麻烦您帮我看看。追答你是按键发送的话,这样吧,不知道你那有示波器没?你可以把发送端接上示波器,检测一下发送的数据是否正常。比如你按键后,它是否发数据出去了,是否发正确的数据了。
全部回答
最近在做一个类似的实验,一开始总是出错,单片机用的12MHz晶振,设置9600的波特率,误差很大,每个字节的高四的经常出错。后来把波特率设置为4800,修改计数器T1的初值F3,这个精度更高,居然没有出错了。希望有人可以借鉴一下。
1.有人在发送数据之前,先关闭了串口中断!等待发送完毕后,再打开串口中断。
这样,在发送数据的等待期间内,如果收到了数据,将不能进入中断函数,也就不会保存的这个新收到的数据。
这种处理方法,就会遗漏收到的数据。
2.有人在发送数据之前,并没有关闭串口中断,当 TI = 1 时,是可以进入中断程序的。
但是,却在中断函数中,将 TI 清零!
这样,在主函数中的while(TI ==0);,将永远等不到发送结束的标志。
3.还有人在中断程序中,并没有区分中断的来源,反而让发送引起的中断,执行了接收中断的程序。
对此,做而论道发表自己常用的方法:
接收数据时,使用“中断方式”,清除 RI 后,用一个变量通知主函数,收到新数据。
发送数据时,也用“中断方式”,清除 TI 后,用另一个变量通知主函数,数据发送完毕。
这样一来,收、发两者基本一致,编写程序也很规范、易懂。
更重要的是,主函数中,不用在那儿死等发送完毕,可以有更多的时间查看其它的标志。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
天冷了,什么运动比较适合
为什么MACD日线是金叉,周线是死叉,月线又是
圆脸微胖适合大翻领还是小翻领大衣
喷香水的位置
立式长轴泵有哪些优缺点?
全国合并高考省份有哪些
“我的童年没有幽默,只有从荒寒的大自然感应
我家绿萝为什么叶子都黄了,刚换土
油炸蒜泥要不要放调理
誉王喜欢秦般若吗
名爵MG6这款车到底有没有顿挫感!
碱溶解酸沉淀的方法的原理及优点
计算(x-2)2的结果是A.x2-4B.x2+4C.x2-4x+4D
重庆三峡联合大学到底是个什么学校啊!
你好管理员进不去如何解决
推荐资讯
psv闪乱神乐哪部最好玩?
eight hundreds OR eight hundred ?
辛山兼酉灶位在哪里?
佩戴棺材有什么说法没
胡子会越刮越多么? 为什么?
装机总容量是什么意思
17岁后如何能长高?
几点看法:关于中国烟草与阿里巴巴,蚂蚁金
用合适的不定代词补全句子。 I felt bored an
23Ω.m<ρ<35Ω.m是什么意思?
金属硅生产复杂吗?能耗占成本多少?硅石成本
美国有私盐吗?
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?