单片机串口通信数据丢失原因
利用按键通过串口向上发送对应命令,收到上面发下来的数据在LCD上显示。第一次按按键串口发送的指令正确且能把数据正确的显示出来,在第二次按按键串口发送的指令出现丢失的状况,...
利用按键通过串口向上发送对应命令,收到上面发下来的数据在LCD上显示。第一次按按键串口发送的指令正确且能把数据正确的显示出来,在第二次按按键串口发送的指令出现丢失的状况,故没有数据传下来。按第三次,发送的指令又正常且能把数据正确的显示出来。请问我串口哪里出现问题,或者是不是那个地方需要延迟久一点,望高手指点!
展开
推荐于2017-09-26
展开全部
单片机串口通信数据氏兄丢失很大一部分原因灶碰是:mscomm的inputlen设置设置有问题;
解决方案:
mscomm的inputlen设置为0吧(读取整个缓冲区),读完一次,清空一次缓冲区试试;
隐核谈 参考如下:
窗体初始化事件中建议将mscomm的这几个属性做如下设置:
mscomm.inbuffersize=8 '接收缓冲区大小
mscomm.rthreshold=4 '促发oncomm事件的字符数
mscomm.inputlen=0 '默认读取整个缓冲区
mscomm.inputmode=cominputmodetext '以文本方式接收
mscomm.inbuffercount=0 '清空缓冲区
oncomm事件中,建议处理完接收数据后用mscomm.inbuffercount=0清空缓冲区
解决方案:
mscomm的inputlen设置为0吧(读取整个缓冲区),读完一次,清空一次缓冲区试试;
隐核谈 参考如下:
窗体初始化事件中建议将mscomm的这几个属性做如下设置:
mscomm.inbuffersize=8 '接收缓冲区大小
mscomm.rthreshold=4 '促发oncomm事件的字符数
mscomm.inputlen=0 '默认读取整个缓冲区
mscomm.inputmode=cominputmodetext '以文本方式接收
mscomm.inbuffercount=0 '清空缓冲区
oncomm事件中,建议处理完接收数据后用mscomm.inbuffercount=0清空缓冲区
展开全部
程序逻辑让御混乱,出现不确定现象,测试结果时好时坏。理顺一下银滑穗程序思锋卜路,保证采集按键、发送、接收数据、显示为一个完整的周期跟后面其他的操作没有关系。
更多追问追答
追问
关键是出现的错误不是杂乱无章的,错误出现的比较有规律的。
两块单片机(A(上位机),B)上电,B控制LCD显示一个主界面,通过B的外设键盘控制进入一个子界面并向上位机发送一串指令(错误出现在这个地方),A收到相应的指令后向下发送一串数据,B接收到数据通过LCD显示。
错误出现,打开串口16进制显示发送的指令不正确。怀疑是数据错乱或者丢失!
追答
怎么样的规律,可以贴出来看看吗?或许你的串口接收缓存区(不是单片机的特殊功能寄存器,而是你存放数据的内存区域)没有清理,导致显示的数据并不是当前接收到的。接收数据之前或是显示之后就把缓冲区清理,保证接收到什么数据存放的就是什么数据,即便接收到的是错误的数据也能检查出来是什么问题。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
利用搏逗按键通过串口向上发送对应命令,收到上面发下来的数据在LCD上显示。第一次按按键串口发基大卖送的指令正确且能把数据正确的显示出来,在第二次按按键串口发送的指令出现丢失的状况,故没有数据传下来。按第三次,发送的指令又正常且能把数据正确的显示出来。请问我串口哪里出现问题,或者是不是那个地方需要延迟仿轿久一点,望高手指点!
波特率设置问题!
波特率设置问题!
更多追问追答
追问
我的两块单片机设置的波特率都是9600,晶振都是11.0592
追答
按键是否消抖处理?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
尝试每次发送之前初始化关键参数
更多追问追答
追问
这个我也想过,但是关键的参数是指那一块?接收缓存还是LCD上的一些参数?指点一下
追答
我用串口也是会出现经常性的乱码,尤其在电脑和单片机通讯时,应该和LCD无关
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
感觉是你发送函数的问题
更多追问追答
追问
在没有接收数据的时候,一切都很正常!
追答
在没有接收数据的时候,一切都很正常!这本身就是不正常的事情!!
你把代码贴上来看看吧。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询