dim  m_strReceive() as byte
m_strReceive = msComm.Input每次接收一个字节我发现只要接收的字节是大于81 也就是大于十进制128的 程序就像死机了一样。这是为什么呢?请高手指点一下第二个问题:
是这样的,例如串口以十六进制向我发送一个字节"0A",我用下面这段程序转换之后却不是"0A",我不知道错在哪里了。请高手指点。
  public function Receive() as string 
       dim m_strReceive() as byte
        Do While MainForm.Comm.InBufferCount = 0 
            DoEvents
         Loop
         m_strReceive = msComm.Input
         Receive=Change_R(m_strReceive)
  end function       public function Change_R( strs as variant)
      Result() as byte
     Result=strs
     for i=LBound(Result) to Ubound(Result)
        Change_R = Change_R & String(2 - Len(Hex(Result(i))), "0") & Hex(Result(i))
     next i
   end function

解决方案 »

  1.   

    首先,接受大于81的16进制会死机,我觉得是你程序问题,跟数的大小无关。那样的数电脑可以接收,但是乱码,我一般把16进制的数比如81变成字符“81”传给电脑。
    你的转换程序没看懂,你是想把传给电脑的16进制数0a显示成“0a“吗?用hex()就搞定了吧,只是小于16的转成了0到f,可以特殊处理一下
      

  2.   

    初步研究你的代码,修改几个不合适处,调试通过,可接收&H00到&HFF即0-255间的BYTE数据:
    Option Explicit
        Dim m_strReceive() As Byte
    Public Function Receive() As String
        Dim buffer As Variant
        Do While MSComm.InBufferCount = 0
            DoEvents
        Loop
        buffer = MSComm.Input
        m_strReceive = buffer
        Receive = change_R(m_strReceive)
    End FunctionPublic Function change_R(strs As Variant)
        Dim i As Integer
        For i = LBound(m_strReceive) To UBound(m_strReceive)
            If Len(Hex(m_strReceive(i))) = 1 Then
                change_R = change_R & "0" & Hex(m_strReceive(i))
            Else
                change_R = change_R & Hex(m_strReceive(i))
            End If
        Next i
        Text1 = change_R
    End FunctionPrivate Sub Form_Load()
        MSComm.Settings = "9600,n,8,1"
        MSComm.InputMode = comInputModeBinary
        MSComm.PortOpen = True
        Timer1.Interval = 100
        Timer1.Enabled = True
    End SubPrivate Sub Timer1_Timer()
        Receive
    End Sub