1.有人在发送数据之前先关闭了
串口中断!等待发送完毕后,再打开串口中断
这样,在发送数据的等待期间内如果收到了数据,将不能进入中断函数也就不会保存的这个新收到的数据。
这种处理方法就会遗漏收到的数据。
2.有人在发送数据の前并没有关闭串口中断,当 TI = 1 时是可以进入中断程序的。
断函数中将 TI 清零!
这样,在主函数中的while(TI ==0);将永远等不到发送结束的标志。
3.還有人在中断程序中并没有区分中断的来源,反而让发送引起的中断执行了接收中断的程
对此,做而论道发表自己常用的方法:
接收數据时使用“中断方式”,清除 RI 后用一个变量通知主函数,收到新数据
发送数据时,也用“中断方式”清除 TI 后,用另一个变量通知主函数数
这样一来,收、发两者基本一致编写程序也很规范、易懂。
更重要的是主函数中,不用在那儿死等发送完毕可以有更哆的时间查看其它的标志。
按你说的要看你的数据长度及波特率,有可能是发送频率过快
注意一下你的发送端的数据长度以及发送频率
发现频率是多少,发送周期应该不少于10mS 你可以用10、20 ms试一下。
应该不是这个问题的因为我是按键按下一次就把四个数发送出去。我把程序截图补发上来了麻烦您帮我看看。
你是按键发送的话这样吧,不知道你那有示波器没你可以把发送端接上示波器,检测一下发送的数据是否正常比如你按键后,它是否发数据出去了是否发正确的数据了。
本回答由广州晓网电子科技有限公司提供
最近在做一个類似的实验一开始总是出错,单片机用
的12MHz晶振设置
9600的波特率,误差很大每个字节的高四的经常出错。后来把波特率设置为4800修
改计數器T1的初值F3,这个精度更高居然没
有出错了。希望有人可以借鉴一下
下载百度知道APP,抢鲜体验
使用百度知道APP立即抢鲜体验。你的手機镜头里或许有别人想知道的答案