和单片机的串口通信中,我写的上位机程序,每读串口都要先等2秒,才能读到正解数据,请各位帮着分析一下为什么?

sxslyy 丹东天康 技术主管  2003-12-12 06:04:44
我们每包数据为644个字节,以0xFF0xFF开头,以0XAA0XAA结尾,,如:有10包数据,我用一个循环来做每次发0x020x420x420x03命令开始读一包数据,处理后再发下一个0x020x420x420x03可在发下一次前我要Sleep(2000)才能正确收到一包不然数据就是乱,(数率是9600),请问问题出在哪是我程序读数据慢还是单片机送数据慢还是其它原因?
...全文
141 12 打赏 收藏 举报
写回复
12 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
sbit 2003-12-18
这里需要上下位机的相互配合,可以检测一下单片机方的程序,这两部分程序我都做过,我想你的握手机制可以改变一下
1.下微机采用的串口中断方式吗?
2.接收数据完毕后的应答?
3.不用怀疑时钟不准,只要你用的是好的石英晶体,但是太高的波特率可能有不支持情况
4.双向通讯是两方面的工作。
  • 打赏
  • 举报
回复
mldds 2003-12-17
单片机与计算机的时钟肯定是一致的,否则你收不到正确的数据。

你这儿要等较长的时间,很可能是单片机的程序设计问题,没有连续的发,所以等的时间要比计算的时间长。

最好建议用时间触发发式读,再从读到的数据中找你的数据包。象你原设计的一次读所需要的字节数,再处理的发式有较大的问题。只有在通讯不出错的前提下才能正常工作,否则可能导致程序死机或再也收不到后续的正确数据包,而设计通讯程序一定要考虑通讯出错的情况,除非你的程序只是发几个数据包就完事了,否则一个极小概率的出错事件,你在调试时不大有机会碰到。
  • 打赏
  • 举报
回复
zhang920171 2003-12-17
问题可能有两个方面,如果你下位机发了10个字节,而上位机要读11个字节就会超时,时间就可能长。如果下位机的晶振不准也有可能。你可以设置串口超时时间,设的短一点。
  • 打赏
  • 举报
回复
假以辞色 2003-12-16
定时去读,读上的数据自己判断是否是完整包, 不是就在读。
  • 打赏
  • 举报
回复
casinosun 2003-12-15
用一个字节收一次
  • 打赏
  • 举报
回复
sxslyy 2003-12-13
有一个问题就是:在读一包数据时,我用的是事件驱动,可是单片机发来的数据会解发几次事件,如每一次发来10字(ComStat.cbInQue=10),下一事件又发来100(ComStat.cbInQue=100),我是根据一包的长度将几次的结果组成一包,请问这种现象对吗为什么不是发一包触发一个事件一次就是接收到一包,数据,是因为单片机慢吗?
  • 打赏
  • 举报
回复
sxslyy 2003-12-13
TO nanjianhui(nan) ( ) :我没有示波器,但如单片机可能用的时间要长一些,因为如果我用计算机连续自发自收只要中间Sleep(10)就行了,请问这种情况如何解决!

TO liu_swallow(swallow):我想你可能是对如果我用计算机连续自发自收只要中间Sleep(10)就行了,我想这10MS个等待可能就是,使我不要向串口进行写操作,可为什么与单片机要等那么久,有什么解决方法
TO 3jaja(3++输入法) ( ) :我用就是事件驱动,不过现在功能上要求读一包就要停下来处理一下数据再读下一包,现在就是读完第一包后,如不等2000,再向串写一个命令串,所读下一包数据就是错的但我自发自收就不要等这么久,请教如何解决!
  • 打赏
  • 举报
回复
3jaja 2003-12-12
window串口事件驱动,不用Sleep(2000)。设置读数据长度,读完10包数据后停止即可。
如要提高速度,将波特率设置为19200或更高。
  • 打赏
  • 举报
回复
liu_swallow 2003-12-12
有时候虽然波特率都一样,但是单片机可能和pc用的时间不是很准=====
-------没有不准的可能
  • 打赏
  • 举报
回复
liu_swallow 2003-12-12
最小就是2000吗,想想应该1000就够用了
  • 打赏
  • 举报
回复
liu_swallow 2003-12-12
是通讯速度慢
9600/(8+1)=1700Byte
近1/3秒发送完毕,这其间你不能串口写操作
  • 打赏
  • 举报
回复
首先用示波器看一下你的计算机发送的一帧的数据的时间,再看一下单片机发送一帧的数据的时间。看看这两个时间是否相同。
有时候虽然波特率都一样,但是单片机可能和pc用的时间不是很准。
  • 打赏
  • 举报
回复
相关推荐
发帖
硬件/系统
加入

2611

社区成员

VC/MFC 硬件/系统
申请成为版主
帖子事件
创建了帖子
2003-12-12 06:04
社区公告
暂无公告