VB串口发送接收

按钮发送HEX数据:93939393,单片机接收到后会反馈HEX数据5d,现在是发送成功了,但是文本框接收不到反馈的数据,请大神帮解解。。代码如下:PrivateSubC... 按钮发送HEX数据:93 93 93 93 ,单片机接收到后会反馈HEX数据5d,现在是发送成功了,但是文本框接收不到反馈的数据,请大神帮解解。。
代码如下:

Private Sub Command1_Click() ‘发送HEX数据93 93 93 93
Dim send(4) As Byte

send(0) = "&H93"
send(1) = "&H93"
send(2) = "&H93"
send(3) = "&H93"
MSComm1.Output = send
End Sub

Private Sub Form_Load()
'串口初始化
MSComm1.Settings = "9600,n,8,1"
MSComm1.InputLen = 0
MSComm1.InputMode = comInputModeBinary
MSComm1.InBufferSize = 64
MSComm1.OutBufferSize = 64
MSComm1.RThreshold = 34 '设置接收字节长度
MSComm1.SThreshold = 1
MSComm1.InBufferCount = 0
MSComm1.OutBufferCount = 0
MSComm1.CommPort = 1 '串口号
MSComm1.PortOpen = True
Timer1.Interval = 0
End Sub

Private Sub MSComm1_OnComm()
Dim strBuff As String
Dim strdata As String
Dim str() As Byte

Select Case MSComm1.CommEvent
Case comEvReceive

strBuff = MSComm1.Input
str() = strBuff

For i = 0 To UBound(str) '接收16进制数据
If Len(Hex(str(i))) = 1 Then
strdata = strdata & "0" & Hex(str(i))
Else
strdata = strdata & Hex(str(i))
End If
Next

Text1.Text = strdata
Call Timer1_Timer
End Select

End Sub

Private Sub Timer1_Timer()
strdata = ""
MSComm1.InBufferCount = 0
End Sub
展开
 我来答
zdingyun
2013-09-22 · 知道合伙人软件行家
zdingyun
知道合伙人软件行家
采纳数:15429 获赞数:48179
1982年上海业余工业大学化工系毕业 现退休

向TA提问 私信TA
展开全部

LZ的代码错在:

Dim send(4) As Byte

它定义的Byte数组有5个元素,所以单片机不返回数据。应该改为:

Private Sub Command1_Click() '发送HEX数据93 93 93 93

    Dim send(3) As Byte

    send(0) = "&H93"

    send(1) = "&H93"

    send(2) = "&H93"

    send(3) = "&H93"

    MSComm1.Output = send

End Sub

这样才发送4字节指令,此外从MSComm1.RThreshold = 34看是设置接收字节长度为34字节。


以下修改了LZde1代码,供参考:

Option Explicit
    Dim strdata
Private Sub Command1_Click() '发送HEX数据93 93 93 93
    Dim send(3) As Byte
    send(0) = "&H93"
    send(1) = "&H93"
    send(2) = "&H93"
    send(3) = "&H93"
    MSComm1.Output = send
End Sub

Private Sub Form_Load()
    '串口初始化
    MSComm1.Settings = "9600,n,8,1"
    MSComm1.InputLen = 0
    MSComm1.InputMode = comInputModeBinary
    MSComm1.InBufferSize = 1024
    MSComm1.OutBufferSize = 512
    MSComm1.RThreshold = 34 '设置接收字节长度
    MSComm1.InBufferCount = 0
    MSComm1.OutBufferCount = 0
    MSComm1.CommPort = 1 '串口号
    MSComm1.PortOpen = True
    Timer1.Interval = 0
End Sub

Private Sub MSComm1_OnComm()
    Dim i As Long
    Dim strBuff As String
    Dim strdata As String
    Dim str() As Byte
    Select Case MSComm1.CommEvent
        Case comEvReceive
        strBuff = MSComm1.Input
        str() = strBuff
        For i = 0 To UBound(str)    '接收16进制数据
        If Len(Hex(str(i))) = 1 Then
            strdata = strdata & "0" & Hex(str(i))
        Else
            strdata = strdata & Hex(str(i))
        End If
        Next
        Text1.Text = strdata
        Call Timer1_Timer
    End Select
End Sub

Private Sub Timer1_Timer()
    strdata = ""
    MSComm1.InBufferCount = 0
End Sub
名字不断在改
2013-09-22 · 超过39用户采纳过TA的回答
知道小有建树答主
回答量:228
采纳率:0%
帮助的人:94万
展开全部
修改这里。。。

Private Sub MSComm1_OnComm()
Dim strBuff As String
Dim strdata As String
Dim str() As Byte

Select Case MSComm1.CommEvent
Case comEvReceive
strBuff = MSComm1.Input
str() = strBuf
在这里添加接收字符长度的判断,长度够了再接收。处理。。
For i = 0 To UBound(str) '接收16进制数据
If Len(Hex(str(i))) = 1 Then
strdata = strdata & "0" & Hex(str(i))
Else
strdata = strdata & Hex(str(i))
End If
Next
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
36000天
2013-09-22 · TA获得超过527个赞
知道小有建树答主
回答量:658
采纳率:77%
帮助的人:276万
展开全部
你简单的个通讯给你写的这么复杂。
你直接发送output
然后等待50ms最少
直接input就OK了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式