| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1063 人关注过本帖
标题:[求助]用MScomm控件进行PC与单片机的通讯协议及相关问题
只看楼主 加入收藏
milk713785
Rank: 1
等 级:新手上路
帖 子:39
专家分:0
注 册:2007-5-9
收藏
 问题点数:0 回复次数:3 
[求助]用MScomm控件进行PC与单片机的通讯协议及相关问题

我在做毕业设计,要用VB的MScomm控件进行PC与单片机的通讯。
但是貌似那个设计单片机固件程序的老师把协议材料给弄丢了,只剩下些已经编写过的通讯程序。我希望哪位编程达人能帮我推测下他的通讯协议内容,最好也帮我编程方法出出点子,谢谢各位了!

程序内容:

MSComm1.PortOpen = True ‘通讯模块打开
MSComm1.CommPort = 2 ‘通讯口打开
----------------------------------------------------------------
Private Sub Timer1_Timer()
buf = MSComm1.Input '将通信端输入的信号放入缓存器中
b1 = InStr(buf, "A") '输入信号中有标志位“A”,这样有利于信号的采集
b = Val(b1)
q1 = Mid(buf, b + 2, 8) '取标志位后的八位输入信号
Text1.Text = q1
End Sub
-----------------------------------------------------------------
q2 = Text9.Text
For ij = 0 To 7
aaa(ij) = Val(Mid(q2, ij + 1, 1))
Next ij
-----------------------------------------------------------------
'信号分离
''信号判断输出
For ij = 0 To 7
DD(ij) = 2 ^ (7 - ij)
If aaa(ij) = 1 Then
p(0) = p(0) Or DD(ij)
Else
DD(ij) = 255 - DD(ij)
p(0) = p(0) And DD(ij)
End If
Next ij
MSComm1.Output = p
End Sub

问题1. 程序接近最后使用了and,or来进行信号分离,但是and,or怎么来计算不是True,False的数字呢?
问题2.这个信号分离是什么意思?我可以用其他方法实现信号分离吗?
问题3.程序中在标志数A后面是空开一位再进行取数据的,那一位是停止位吗?协议中其他要求是什么?我只知道MSComm.Settings是使用默认值。
问题4.我使用的是MSComm的ComEvReceive事件来收集接收的数据。A是标志数,从接收到它开始取数据.
Case comEvReceive
ReceiveTemp = ReceiveTemp + MSComm.Input
If InStr(3, ReceiveTemp, "A") <> 0 Then
Call LoadInput
If Mid(ReceiveTemp, 2, InputAndOutputNumber + 1) <> InputValue Then
If Len(InputValue) = InputAndOutputNumber + 1 Then
InputValue = Mid(ReceiveTemp, 3, InputAndOutputNumber + 1)
Call ShowInput
Else
MsgBox "数据传输出错!"
ReceiveTemp = "A"
End If
End If
End If
InputValue是程序中存放输入数据的变量,InputAndOutputNumber是输入输出位数,ShowInput是将InputValue的值显示到窗体的子程序。

这样是否也可以进行数据接收呢?我这样就不需要Timer控件了。

拜托哪位给我答一下,希望哪位高手给我个答案!

搜索更多相关主题的帖子: MScomm控件 单片机 通讯协议 固件 模块 
2007-05-09 17:36
milk713785
Rank: 1
等 级:新手上路
帖 子:39
专家分:0
注 册:2007-5-9
收藏
得分:0 
问题4的程序已经改进:
Case comEvReceive
ReceiveTemp = ReceiveTemp + MSComm.Input
If InStr(3, ReceiveTemp, "A") <> 0 Then
Call LoadInput
If Mid(ReceiveTemp, 3, InputAndOutputNumber + 1) <> InputValue Then
Dim i As Integer
For i = 1 To InputAndOutputNumber + 1
If Mid(ReceiveTemp, 2 + i, 1) <> "0" And _
Mid(ReceiveTemp, 2 + i, 1) <> "1" Then
ReceiveTemp = "A"
MsgBox "数据传输出错!"
Exit Sub
End If
Next i
InputValue = Mid(ReceiveTemp, 3, InputAndOutputNumber + 1)
Call ShowInput
Else
ReceiveTemp = "A"
End If
End If
End Select

2007-05-10 11:25
milk713785
Rank: 1
等 级:新手上路
帖 子:39
专家分:0
注 册:2007-5-9
收藏
得分:0 
前2个问题已经解决!

2007-05-14 18:49
milk713785
Rank: 1
等 级:新手上路
帖 子:39
专家分:0
注 册:2007-5-9
收藏
得分:0 
问题已解决,结贴!

2007-05-15 16:39
快速回复:[求助]用MScomm控件进行PC与单片机的通讯协议及相关问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.041777 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved