我现在从串口接收16进制数据,当所有数据发送完毕后有三字节的16进制结束字符 5A 03 A5
我是用VB的MSComm控件,当有数据接收到时,存进一个变量中直到接收到结束字符
我的程序如下:Dim n As Variant
n = Trim(Chr(Val("&H" & "5A")) + Chr(Val("&H" & "03")) + Chr(Val("&H" & "A5")))
            
            Do Until (Right(s, 3) = n)
                ReceiveStr = ReceiveStr + MSComm1.Input
                s = ReceiveStr
            Loop现在的问题是我的程序有问题,当接收到结束字符的时候,无法识别,然后进入死循环
请有经验的指教下

解决方案 »

  1.   

    没详细看,试试:
     Do Until (instr(s, n)<>0)
                    doevents
                    ReceiveStr = ReceiveStr + MSComm1.Input
                    s = ReceiveStr
      Loop
      

  2.   

    没详细看,试试:
    Dim n As Variant
    n = Trim(Chr(Val("&H" & "5A")) + Chr(Val("&H" & "03")) + Chr(Val("&H" & "A5")))
    debug.print n
     Do Until (instr(s, n)<>0)
                    doevents
                    debug.print s
                    ReceiveStr = ReceiveStr + MSComm1.Input
                    s = ReceiveStr+s
      Loop看看s是不是你预期的结果
      

  3.   

    我的问题是我现在没办法把16进制的 5A 03 A5
    正确转换成string格式进行比较
      

  4.   

    我测试过好象错在Chr(Val("&H" & "A5")))Chr(Val("&H" & "5A")) 和Chr(Val("&H" & "03"))我单独测试都通过的
      

  5.   

    一个串口程序的相应模块:'***********************************
    '为输出准备文本
    '保存在全局变量
    'strText
    'strHex
    'strAddress
    '总行数保存在
    'intLine
    '***********************************Public Sub GetDisplayText()    Dim n As Integer
        Dim intValue As Integer
        Dim intHighHex As Integer
        Dim intLowHex As Integer
        Dim strSingleChr As String * 1
        
        Dim intAddress As Integer
        Dim intAddressArray(8) As Integer
        Dim intHighAddress As Integer
        
        
        
        strAscii = ""            '设置初值
        strHex = ""
        strAddress = ""
        
        '*****************************************
        '获得16进制码和ASCII码的字符串
        '*****************************************
        
        
        
        For n = 1 To intReceiveLen
            intValue = bytReceiveByte(n - 1)
            
            If intValue < 32 Or intValue > 128 Then         '处理非法字符
                strSingleChr = Chr(46)                      '对于不能显示的ASCII码,
            Else                                            '用"."表示
                strSingleChr = Chr(intValue)
            End If
            
            strAscii = strAscii + strSingleChr
            
            intHighHex = intValue \ 16
            intLowHex = intValue - intHighHex * 16
            
            If intHighHex < 10 Then
                intHighHex = intHighHex + 48
            Else
                intHighHex = intHighHex + 55
            End If
            If intLowHex < 10 Then
                intLowHex = intLowHex + 48
            Else
                intLowHex = intLowHex + 55
            End If
            
            'strHex = strHex + " " + Chr$(intHighHex) + Chr$(intLowHex) + " "
            strHex = strHex + Chr$(intHighHex) + Chr$(intLowHex)
            
            'If (n Mod intHexWidth) = 0 Then                 '设置换行
             '   strAscii = strAscii + Chr$(13) + Chr$(10)
              '  strHex = strHex + Chr$(13) + Chr$(10)
            'Else
             '
            'End If
        Next n
      

  6.   

    你直接设一个BYTE型的数组,然后把从串口收下来的数存到这个数组里每收一次就判断一下这个数组的后三位是不是你的结束符,如果是,就执行你要的操作,如果不是,就继续收把mscomm设置成2进制模式
      

  7.   

    Trim(Chr(Val("&H" & "5A")) + Chr(Val("&H" & "03")) + Chr(Val("&H" & "A5")))
    你这是 5a 00 03 00 a5 00
    你的s 是5A 03 A5当然不会相同。
    你用 n = Trim(Chrb(Val("&H" & "5A")) + Chrb(Val("&H" & "03")) + Chrb(Val("&H" & "A5")))
    do until rightb(s,3)=n 
    试试记得do until 循环里面加上doevents
    否则永远不可能收到数据。
      

  8.   

    To: pigsanddogs(我爱吃猪肉,但是长不胖,为什么??) 
    我的代码我试过了,不行,我测试下来觉的问题: 字符大于127就会碰上错误,只要小于127就不会有错.郁闷啊!不知道为什么会这样
      

  9.   

    你是不是设置了错误字符?
    还有, 你应该用binary模式。 如果大于127的话