加急!求助各位!使用MSCOMM控件和51单片机通讯数据存在冲突。
我的MSCOMM控件和多个单片机通讯,当我收到一串数据后进行处理然后再发送一串数据,
在发送数据时经常性的和别的单片机发的数据冲突(主要是我的数据插入单片机数据中导致两串数据都失败),在我发送数据前我通过检测MSCOMM接收缓冲区是否为空来判断当前是否有单片机数据在发送中,即使这样为什么还是冲突呢?
很急,求助各位了,在线等!
For i = 0 To 10
If BusIdle = True Then
MSComm.Output = bytOrder()’发送数据
Exit For
Else
DoEvents
Sleep (40)’延时40MS后再检测
DoEvents
End If
Next
Public Function BusIdle() As Boolean
'检查串口数据线是否为空闲
Dim i As Integer
Dim MaxNo As Integer
MaxNo = 2 + (MachineAddr * 2)
For i = 0 To MaxNo
If (frmMain.MSComm.InBufferCount = 0) And (frmMain.MSComm.OutBufferCount = 0) Then
If i = MaxNo Then
BusIdle = True
Else
DoEvents
Sleep (2) '延时2MS
DoEvents
End If
Else
BusIdle = False
Exit For
End If
Next
End Function
问题点数:100、回复次数:12Top
1 楼popularhand(同是天涯沦落人)回复于 2005-06-10 09:04:07 得分 0
说明:我是采用三条线(数据发送和接收,地)和单片机通讯的。Top
2 楼domhuang(不名)回复于 2005-06-10 09:18:12 得分 40
在你检测的时候没有发送 。 但是在你发送的过程中 其他的单片机可以发送啊
这样不就产生了 冒险竞争了吗
你可以多用一根握手线 在发送前检测握手线 为L 可以发送 在发送同时把 握手线置为H
同样单片几在发送前也要做这样的检测 这样就能保证每次只能有一个机器在发送Top
3 楼popularhand(同是天涯沦落人)回复于 2005-06-10 09:55:57 得分 0
目前是我使用上面的程序,偶尔使我在发送数据时其实单片机已经正在发送数据了,我打乱别人的数据。我不知道为什么上面的代码不可靠?Top
4 楼DooDu(杜霖:I want,I can(开关拉))回复于 2005-06-10 09:57:20 得分 0
domhuang(不名)说的很正确。
另外,sleep的时候用doevents是不管用的。Top
5 楼Wenking003(文君)回复于 2005-06-10 10:07:56 得分 50
你采用的方法有点类似:共享总线的方式,没有一个控制的方式,很容易会出现“抢线”的问题。
通常采用的解决方法:由PC机对各点进行轮询,没“问”到的机器就不发言。
不足之处可能是:影响效率。Top
6 楼popularhand(同是天涯沦落人)回复于 2005-06-10 10:11:33 得分 0
我PC是对各单片机的数据进行处理并回复处理结果,主动方在单片机那。PC是不控制单片机的且单片机数量很多。Top
7 楼domhuang(不名)回复于 2005-06-10 10:17:41 得分 10
单片机是你自己做吗??
你的每一个单片机发言(通信)前也要检测握手线的 不然很容易产生冲突
要不你就用 Wenking003(文君) 说的轮询的方法
Top
8 楼Wenking003(文君)回复于 2005-06-10 10:18:23 得分 0
任何机器在任何时候都可以自由“发言”,当然很容易产生信息的互串互插,这不是你的程序的问题,应该属于系统设计、系统控制的问题。Top
9 楼Wenking003(文君)回复于 2005-06-10 10:21:38 得分 0
而且你采用的是三线的方式,没有握手的控制。
不管你怎样判断缓冲区的状态,由于程序的运转是有时间性的,总存在控制的差异性,都无法在你“发言”时不让其它机器发言。Top
10 楼oyzd(阳阳)回复于 2005-06-10 10:49:34 得分 0
建议如下:
1.)既然是一台电脑带多个单片机机,就应该给每一个单片机一个ID号(单片机本身应该支持设置自
己的ID号),无论是电脑向单片机发送命令(数据)或是单片机向电脑传送数据都应该以唯一的
ID号(打头)做标识;
2.)上面几位大侠都提过,建议传送数据或命令之前进行一次握手通讯操作。Top
11 楼gg137zeus(分在脚下)回复于 2005-06-10 11:00:08 得分 0
关注Top
12 楼popularhand(同是天涯沦落人)回复于 2005-06-10 11:39:13 得分 0
根据各位所言不建立握手PC与单片机通信是无法保证可靠传输对吗?Top
相关问题
- 菜鸟问题!!!怎样用mscomm控件与单片机通信?一定给分!!!急急!!!
- 用MSCOMM控件实现与MCS-51单片机握手,ONCOMM事件怎么不响应的?
- 高分求救!!!如何控制另一台pc机串口连接的单片机 mscomm控件
- MSCOMM控件一次OnComm事件只能获取8个,那么单片机里面是不是也是一次只能收8个?
- pc→单片机的串口通讯,使用spcomm控件,发送时好时坏,怀疑是pc与单片机不同步,应该怎么调?
- 谁有dxDBGrid控件 for delphi5的?加急.................
- ********续"用MSCOMM挂断 计算机-MODEM-MODEM-单片机 连接的方法"************
- 在OCX控件中怎样使用OCX控件?(加急)
- 单片机
- 求mscomm控件




