VB如何向串口发送十六进制数
用VB编程想把两个十六进制数按顺序从232串口发送到单片机
01h和cch
试了多种方法都不成功
用VB编程想把两个十六进制数按顺序从232串口发送到单片机
01h和cch
试了多种方法都不成功
用VB比VC简单多了,而且好写。
代码如下:
Private Sub Form_Load()
'初始化串口
With MSComm1
.InputMode = 1 '设置接受数据的类型是二进制类型数据
.InputLen = 8 '一次性从接收缓冲区中读取所有数据(8个字节为一组!
代码如下:
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
.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 '出错数据处理
'以上两个就是你要发送的数据
'下面这一句就发给单片机了
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
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小时内删除。
发表评论