各位,本人新学习串口通讯,需要利用串口接受来自单片机的数据(三组数据),可是我利用他人的例子接受到的是怪异的字符,而用常规的串口通讯测试软件就没有问题。希望大家给予帮助,我的代码如下:
Private Sub DatainStart() '数据采集模块
'On Error GoTo ErrH
Dim aa As Variant
    Dim Instring As String
    Toolbar1.Buttons(1).Enabled = False
    Toolbar1.Buttons(2).Enabled = True
    
    ' 使用 COM1。
    If MSComm1.PortOpen = True Then MSComm1.PortOpen = False
   ' MSComm1.CommEvent = 2
    MSComm1.CommPort = 1
    ' 4800 波特,无奇偶校验,8 位数据,一个停止位。
    MSComm1.Settings = "4800,N,8,1"    ' 当输入占用时,
    ' 告诉控件读入整个缓冲区。
    MSComm1.InputLen = 1
    MSComm1.NullDiscard = False
    ' 打开端口。
    MSComm1.InputMode = comInputModeBinary
    MSComm1.InBufferCount = 0
    MSComm1.InBufferSize = 1024
    MSComm1.PortOpen = True
    ' 将 attention 命令送到调制解调器。
    MSComm1.Output = "ATV1Q0" & Chr$(13) ' 确保
    ' 调制解调器以"OK"响应。
    ' 等待数据返回到串行端口。
    Do
       DoEvents
       If DataSti = False Then Exit Sub
    'Buffer$= MSComm1.Input
    aa = MSComm1.Input
    aa = CVar(aa) 'MSComm1.Input
    'aa = Hex(aa)
    Debug.Print MSComm1.Input, "   aa" & aa
    'Dataass Buffer$
    Loop Until InStr(Buffer$, "OK" & vbCrLf)
    ' 从串行端口读 "OK" 响应。
    
    ' 关闭串行端口。
    MSComm1.PortOpen = False
    Toolbar1.Buttons(1).Enabled = False
    Toolbar1.Buttons(2).Enabled = True
    Exit Sub
ErrH:
    MsgBox "串行端口未未安装或设备未打开,请检查!", vbCritical + vbOKOnly, "出错提示!"
    Toolbar1.Buttons(1).Value = tbrUnpressed
    'Exit Sub
'FileWrite:End Sub

解决方案 »

  1.   

    我已经按照byte接受了,inputmode已经是了,谁能帮我把上面的修改一下了。谢谢了
      

  2.   

    数据是字串的话,试试用strconv转化一下
      

  3.   

    我这里有一成功的举例(请参照使用)
    端口初始化
    With MSComm1
         .CommPort = 2           '使用COM2
         .Settings = "57600,n,8,1"      '设置通信口参数
         .InBufferSize = 5       '设置MSComm1接收缓冲区为4字节
         .OutBufferSize = 2     '设置MSComm1发送缓冲区为4字节
         .InputMode = 1      '设置接收数据模式为二进制形式
         .InputLen = 1             '设置Input 一次从接收缓冲读取字节数为1
         .SThreshold = 1        '设置Output 一次从发送缓冲读取字节数为2
         .InBufferCount = 0          '清除接收缓冲区
         .OutBufferCount = 0         '清除发送缓冲区     
         
         .RThreshold = 1              '设置接收一个字节产生OnComm事件
         .PortOpen = True           '打开通信口
    End With下面接收事件:
    Private Sub MSComm1_OnComm()
    Dim cx(1 To 2) As Byte
    Dim av As Variant
    Dim ab(5)
    Dim b1 As Single
    Dim b2 As Single
    Dim b3 As Single
      Select Case MSComm1.CommEvent          '判断MSComm1通信事件
      Case comEvReceive                    '收到Rthreshold个字节产生的接收事件        av = MSComm1.Input             '读取一个接收字节
            ab(1) = av(0)                  '转换保存到字节数据类型数组
            
           If ab(1) = &HF0 Then                          '判断是否为数据开始标志
                MSComm1.RThreshold = 0                    '关闭OnComm事件接收
                Do
                    DoEvents
                Loop Until MSComm1.InBufferCount >= 4     '循环等待MSComm1接收缓冲区>=4字节
                av = MSComm1.Input                        '读取第二个数据字节(BCD码高位字节)
                ab(2) = av(0)                             '转换保存到字节数据类型数组
                av = MSComm1.Input                        '读取第三个数据字节(BCD码低位字节)
                ab(3) = av(0)                             '转换保存到字节数据类型数组
                av = MSComm1.Input                        '读取第四个数据字节(符号位字节)
                ab(4) = av(0)                             '转换保存到字节数据类型数组
                av = MSComm1.Input                        '读取第四个数据字节(符号位字节)
                ab(5) = av(0)
                
              If ab(5) = &HF Then
                  '接收到三个字节:ab(2)、ab(3)、ab(4)
               
              End If
           End If
            
     
            
                    MSComm1.RThreshold = 1     
                    MSComm1.InBufferCount = 0          '清除接收缓冲区(这句话很重要的)End SelectEnd Sub'以上代码希望对你有用