vb与单片机通信问题

我用vb接收单片机上传的字符串“220210200”,想让Text1(0).Text中显示220,但是结果显示50050,哪位大侠帮忙分析一下,急!PrivateSubM... 我用vb接收单片机上传的字符串“220210200”,想让Text1(0).Text中显示220,但是结果显示50050,哪位大侠帮忙分析一下,急!
Private Sub MSComm1_OnComm()
On Error Resume Next
Dim var As String
Dim str() As Byte
Select Case MSComm1.CommEvent
Case comEvReceive
var = MSComm1.Input
str() = var
Text1(0).Text = str(0) & str(1) & str(2)
Text2(0).Text = Text1(0).Text / 2
Text3(0).Text = Text1(0).Text * Text2(0).Text / 1000
Text5(0).Text = Text2(0).Text / Text1(0).Text * 100
SaveData
End Select
End Sub
展开
 我来答
Zaxife
2009-11-19 · TA获得超过1254个赞
知道小有建树答主
回答量:1138
采纳率:0%
帮助的人:495万
展开全部
1 在打开串口前清空缓存;
2 接收数据后清空接收数据长度;

不过,还是建议你用接收每个字符,接收完一包数据后再
提取里面的字符串。
以前我做过的一个例子:ttp://z.baidu.com/question/125317000.html

这是根据你的要求实现的:增加了通讯超时再恢复后数据仍然保持正确。

Private Sub Form_Load()
MSComm1.Settings = "9600,n,8,2"
MSComm1.CommPort = 3
MSComm1.InputMode = comInputModeText
MSComm1.InputLen = 9
MSComm1.InBufferCount = 0
MSComm1.OutBufferCount = 0
MSComm1.RThreshold = 9
MSComm1.InBufferSize = 100
MSComm1.PortOpen = True
Timer1.Interval = 3000
Timer1.Enabled = MSComm1.PortOpen
End Sub
Private Sub MSComm1_OnComm()
On Error Resume Next
Dim var As String
Dim str() As Byte
Timer1.Enabled = False
Me.Cls
Select Case MSComm1.CommEvent
Case comEvReceive
var = MSComm1.Input
MSComm1.InBufferCount = 0
str() = var
Text1(0).Text = Left(var, 3) '& " " & Mid(var, 4, 3) & " " & Mid(var, 7, 3)
Text2(0).Text = Val(Text1(0).Text) / 2
Text3(0).Text = Text1(0).Text * Text2(0).Text / 1000
Text5(0).Text = Text2(0).Text / Text1(0).Text * 100
SaveData
Timer1.Enabled = True
End Select
End Sub
Private Sub Timer1_Timer()
Dim var As String
var = MSComm1.Input
MSComm1.InBufferCount = 0
Me.Cls
Me.Print "通讯错误!!!"
End Sub
萍水e相逢
2009-11-19 · TA获得超过3万个赞
知道大有可为答主
回答量:5.9万
采纳率:46%
帮助的人:1.7亿
展开全部
你这里 Text1(0).Text = str(0) & str(1) & str(2)
str(0) 获得的是传输过来的字符的ascii码
2 的ascii码 就是 50
还有,传输的是 多字节字符,所以 str(1) 的值 为0

你 可以 这样
Text1(0).Text = chr(str(0)) & chr(str(2)) & chr(str(4))

祝你顺利
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
kumu0531
2009-11-19 · TA获得超过740个赞
知道小有建树答主
回答量:557
采纳率:0%
帮助的人:653万
展开全部
Dim RecvMsg() As Byte ' COM 中地内容
Dim Reclen As Integer '用来判断COM是否有内容
Private Sub MSComm1_OnComm()
On Error Resume Next
Select Case MSComm1.CommEvent
Case comEvReceive
Reclen = MSComm4.InBufferCount
ReDim RecvMsg(Reclen)
RecvMsg = MSComm4.Input
Dim i As Integer
在这段代码里最好加一个接受到特定字符就退出程序的判断
For i = 0 To UBound(RecvMsg)
If Len(Hex(RecvMsg(i))) = 1 Then
strData = strData & "0" & Hex(RecvMsg(i))
Else
strData = strData & Hex(RecvMsg(i))
End If
Next

End Select
End Sub
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
呵呵JWVDM
2009-11-19 · TA获得超过569个赞
知道小有建树答主
回答量:351
采纳率:0%
帮助的人:237万
展开全部
把:Text1(0).Text = str(0) & str(1) & str(2)
改为:Text1(0).Text = (str(0) - 48) & (str(2) - 48) & (str(4) - 48)
看看,注意str(0)是2的ASCII值50.
其实把 var = MSComm1.Input
str() = var
改为 str=MSComm1.Input 就直观多了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式