请高手指教:用VB控件Winsock的UDP协议,发送16进制数到单片机出现问题?
我总共需要发送12个(byte型)16进制数到单片机,然后用串口助手从单片机取回我发到单片机的数据。出现以下问题:1.结果和数据个数不对,我总共发送了12个16进制的数据...
我总共需要发送12个(byte型)16进制数到单片机,然后用串口助手从单片机取回我发到单片机的数据。出现以下问题:
1.结果和数据个数不对,我总共发送了12个16进制的数据,串口助手上却出现4个错误的数据。
2.比如我向单片机发送16进制的3和4,sckClient.SendData 3
sckClient.SendData 4
结果串口助手上显示的是33 00 34 00 ,33是字符3的16进制ASCII码,34是字符4的16进制ASCII码,还会重复两次再现00???
下面是发送16进制数据的程序,如下:
Private Sub cmdSend_Click() '发送数据
Dim i, j As Integer
Dim fsData(11) As Byte
For i = 0 To 11
If txtData(i).Text = "" Then
MsgBox "请输入第" & i + 1 & "位数据!", vbInformation, "提示"
Exit Sub
Else
fsData(i) = "&H" & txtData(i).Text
End If
Next i
For j = 0 To 11
sckClient.SendData fsData(j) '这里发送了12个16进制的数据,结果串口助手上显示了4具错误的数据??
Next j
End Sub 展开
1.结果和数据个数不对,我总共发送了12个16进制的数据,串口助手上却出现4个错误的数据。
2.比如我向单片机发送16进制的3和4,sckClient.SendData 3
sckClient.SendData 4
结果串口助手上显示的是33 00 34 00 ,33是字符3的16进制ASCII码,34是字符4的16进制ASCII码,还会重复两次再现00???
下面是发送16进制数据的程序,如下:
Private Sub cmdSend_Click() '发送数据
Dim i, j As Integer
Dim fsData(11) As Byte
For i = 0 To 11
If txtData(i).Text = "" Then
MsgBox "请输入第" & i + 1 & "位数据!", vbInformation, "提示"
Exit Sub
Else
fsData(i) = "&H" & txtData(i).Text
End If
Next i
For j = 0 To 11
sckClient.SendData fsData(j) '这里发送了12个16进制的数据,结果串口助手上显示了4具错误的数据??
Next j
End Sub 展开
3个回答
展开全部
我用mscomm控件也遇到了同样的问题,问题出现在发送的方式不对:
错误1.
sckClient.SendData 3
这么发是不对的,如果想发送数值型数据,必须把数值保存在byte数组中,以二进制方式发送,这里你想发送3和4,试一下这样行不行:
dim a(0 to 1) as byte
a(0)=3
a(1)=4
sckClient.SendData a
错误2:
fsData(i) = "&H" & txtData(i).Text
这样的话你的byte数组中可能会是文本,试试改成这样:
fsData(i) = clng("&H" & txtData(i).Text)
错误3:
For j = 0 To 11
sckClient.SendData fsData(j) '这里发送了12个16进制的数据,结果串口助手上显示了4具错误的数据??
Next j
不要用循环发送,直接发送数组:
sckClient.SendData fsData
错误1.
sckClient.SendData 3
这么发是不对的,如果想发送数值型数据,必须把数值保存在byte数组中,以二进制方式发送,这里你想发送3和4,试一下这样行不行:
dim a(0 to 1) as byte
a(0)=3
a(1)=4
sckClient.SendData a
错误2:
fsData(i) = "&H" & txtData(i).Text
这样的话你的byte数组中可能会是文本,试试改成这样:
fsData(i) = clng("&H" & txtData(i).Text)
错误3:
For j = 0 To 11
sckClient.SendData fsData(j) '这里发送了12个16进制的数据,结果串口助手上显示了4具错误的数据??
Next j
不要用循环发送,直接发送数组:
sckClient.SendData fsData
更多追问追答
追问
谢谢你的回答我先验证下.
有个疑问:为什么发送数组的时候,只发数组名就可以了呢?
追答
好像只有byte数组才是这样的,也许是由数据类型决定的吧。我想问一下,你用winsock控件是如何与单片机进行通信的呢?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
用microsoft comm control 控件 不会出错 编程超简单 控件在工程->部件里 祝你好运
追问
你这个是串口编程用的,我现在用的是通过PC网口与单片机通信。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
等待高手的出现
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询