VB如何向串口发送十六进制数 
   
  VB编程想把两个十六进制数按顺序从232串口发送到单片机 
   
  01hcch 
   
  试了多种方法都不成功
  VBVC简单多了,而且好写。 
   
  代码如下: 
  Private  Sub  Form_Load() 
  '初始化串口 
  With  MSComm1 
    .InputMode  =  1                                    '设置接受数据的类型是二进制类型数据 
    .InputLen  =  8                                      '一次性从接收缓冲区中读取所有数据(8个字节为一组!

    .InBufferCount  =  0                            '清空接收缓冲区 
    .OutBufferCount  =  0                          '清空发送缓冲区 
    .SThreshold  =  0                                  '不触发OnComm()事件 
    .RThreshold  =  1                                  '接收1个字节数据触发OnComm()事件 
    .Settings  =  "9600,N,8,1" 
    .CommPort  =  1 
    .PortOpen  =  True 
  End  With 
  End  Sub 
   
  然后在按钮1中: 
  Private  Sub  Command1_Click() 
  Dim  Data(1)  as  Byte 
  Data(0)=  &H1 
  Data(1)=&HCC 
  '以上两个就是你要发送的数据 
  '下面这一句就发给单片机了 
  MsComm1.Oupput  =  Data 
  End  Sub 
   
  至于对于单片机的反应操作则在
  Private  Sub  MsComm1_OnComm() 
  Select  Case  MsComm1.CommEvent 
  Case  comEvReceive 
                '这里就是接收数据后的处理,一般为: 
                if  CheckOK  then 
                      DoRight          '正确数据处理 
                else 
                      DoWrong          '出错数据处理 
                end  if 
  Case  else 
   
  End  Select 
  End  Sub 
  End  Sub 
另一个方法
现在我到了正确方法,与大家共享: 我要发送的是十六进制数据(DF1 half duplex protocol):10 05 01 FF 先定义一个BYTE类型的数组: dim OutString(0 to 3) as Byte 给数组赋值: OutString(0) = "&H10" OutString(1) = "&H05" OutString(2) = "&H01" OutString(3) = "&HFF" 发送命令: mscomm1.out = OutString
发送并接收十六进制
'**********************************
'字符表示的十六进制数转化为相应的整数
'错误则返回  -1
'**********************************
Function ConvertHexChr(str As String) As Integer
   
    Dim test As Integer
   
    test = Asc(str)
    If test >= Asc("0") And test <= Asc("9") Then
        test = test - Asc("0")
    ElseIf test >= Asc("a") And test <= Asc("f") Then
        test = test - Asc("a") + 10
    ElseIf test >= Asc("A") And test <= Asc("F") Then
        test = test - Asc("A") + 10
    Else
        test = -1                                      '出错信息
    End If
    ConvertHexChr = test
   
End Function
'**********************************
'字符串表示的十六进制数据转化为相应的字节串
'返回转化后的字节数
'**********************************
Function strHexToByteArray(strText As String, bytByte() As Byte) As Integer
   
    Dim HexData As Integer          '十六进制(二进制)数据字节对应值
    Dim hstr As String * 1          '高位字符
    Dim lstr As String * 1          '低位字符
    Dim HighHexData As Integer      '高位数值
    Dim LowHexData As Integer      '低位数值
    Dim HexDataLen As Integer      '字节数
    Dim StringLen As Integer        '字符串长度
    Dim Account As Integer          '计数
       
    strTestn = ""                  '设初值
    HexDataLen = 0
    strHexToByteArray = 0
   
    StringLen = Len(strText)
    Account = StringLen \ 2
    ReDim bytByte(Account)
   
    For n = 1 To StringLen
   
        Do                                              '清除空格
            hstr = Mid(strText, n, 1)
            n = n + 1
            If (n - 1) > StringLen Then
                HexDataLen = HexDataLen - 1
               
                Exit For
            End If
        Loop While hstr = " "
       
        Do
            lstr = Mid(strText, n, 1)
            n = n + 1
            If (n - 1) > StringLen Then
                HexDataLen = HexDataLen - 1
               
                Exit For
            End If
简单的vb程序代码
        Loop While lstr = " "
        n = n - 1
        If n > StringLen Then
            HexDataLen = HexDataLen - 1
            Exit For
        End If
       
        HighHexData = ConvertHexChr(hstr)
        LowHexData = ConvertHexChr(lstr)
       
        If HighHexData = -1 Or LowHexData = -1 Then    '遇到非法字符中断转化
            HexDataLen = HexDataLen - 1
           
            Exit For
        Else
           
            HexData = HighHexData * 16 + LowHexData
            bytByte(HexDataLen) = HexData
            HexDataLen = HexDataLen + 1
           
           
        End If
                       
    Next n
   
    If HexDataLen > 0 Then                              '修正最后一次循环改变的数值
        HexDataLen = HexDataLen - 1
        ReDim Preserve bytByte(HexDataLen)
    Else
        ReDim Preserve bytByte(0)
    End If
   
   
    If StringLen = 0 Then                              '如果是空串,则不会进入循环体
        strHexToByteArray = 0
    Else
        strHexToByteArray = HexDataLen + 1
    End If
   
   
End Function
以十六进制编码方式进行发送时候,发送的应该是二进制数据流,从textsend文本框中得到的只是String,应该将其转换为Byte Arrey。作为十六进制数,其中应该只包括0~9这10个数字以及A~F,或者a~f这6个字母,为了增强可读性,我们允许其中插入空格,其他的字符则应该视为非法字符。我们约定,从头开始,每两个有效的字符作为一个字节的内容,如果有效字符的总数是奇数,则忽略最后一个单独的字符,若遇到非法字符,则对其后面的字符均不作处理。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。