用RS-232连接单片机与PC机,用vb将单片机中采集的数据传到PC机上并用VB编写代码在PC机上显示出来
Dim ab(4) As Byte '字节数据类型数组,用来存储接收的一组字节数据
Dim av As Variant '用来从接收缓冲区读取数据
Dim i As Integer
Dim j As Integer
Dim b1 As Single
Dim b2 As Single
Dim ww As Single '十进制检测值
Private Sub Command1_Click()
With MSComm1
.CommPort = 1 '使用COM1
.Settings = "38400,N,8,1" '设置通信口参数
.InBufferSize = 40
'设置MSComm1接收缓冲区为40字节
.OutBufferSize = 2
'设置MSComm1发送缓冲区为2字节
.InputMode = comInputModeBinary
'设置接收数据模式为二进制形式
.InputLen = 1
'设置Input 一次从接收缓冲读取字节数为1
.SThreshold = 1
'设置Output 一次从发送缓冲读取字节数为1
.InBufferCount = 0 '清除接收缓冲区
.OutBufferCount = 0 '清除发送缓冲区
.RThreshold = 1
'设置接收一个字节产生OnComm事件
If .PortOpen = False Then
'判断通信口是否打开
.PortOpen = True '打开通信口
If Err Then '错误处理
MsgBox "串口通信无效"
Exit Sub
End If
End If
End With
End Sub
Private Sub Label1_Click()
Label1 = Format(ww, "0.00")
End SubPrivate Sub MSComm1_OnComm()
With MSComm1
Select Case .CommEvent '判断MSComm1通信事件
Case comEvReceive '收到Rthreshold个字节产生的接收事件 av = .Input '读取一个接收字节
ab(1) = av(0) '转换保存到字节数据类型数组
If ab(1) = &HF0 Then '判断是否为数据开始标志
.RThreshold = 0 '关闭OnComm事件接收
Do
DoEvents
Loop Until .InBufferCount >= 3 '循环等待MSComm1接收缓冲区>=4字节
av = MSComm1.Input
'读取第二个数据字节(BCD码高位字节)
ab(2) = av(0)
'转换保存到字节数据类型数组
av = .Input
'读取第三个数据字节(BCD码低位字节)
ab(3) = av(0)
'转换保存到字节数据类型数组
av = .Input
'读取第四个数据字节(符号位字节)
ab(4) = av(0)
'转换保存到字节数据类型数组
b1 = ab(2) - 6 * (ab(2)(16)) '高位字节压缩BCD码转换为实数
b2 = ab(3) - 6 * (ab(3)(16)) '低位字节压缩BCD码转换为实数
ww = b1 + b2 / 100 '数值组合,标定小数点
End If
End If
MSComm1.RThreshold = 1
MSComm1.InBufferCount = 0 '清除接收缓冲区End
Case ElseEnd SelectEnd WithEnd Sub
关于
“b1 = ab(2) - 6 * (ab(2)(16)) '高位字节压缩BCD码转换为实数”
出现
编译错误 类型不匹配
请问该怎么改啊?
Dim ab(4) As Byte '字节数据类型数组,用来存储接收的一组字节数据
Dim av As Variant '用来从接收缓冲区读取数据
Dim i As Integer
Dim j As Integer
Dim b1 As Single
Dim b2 As Single
Dim ww As Single '十进制检测值
Private Sub Command1_Click()
With MSComm1
.CommPort = 1 '使用COM1
.Settings = "38400,N,8,1" '设置通信口参数
.InBufferSize = 40
'设置MSComm1接收缓冲区为40字节
.OutBufferSize = 2
'设置MSComm1发送缓冲区为2字节
.InputMode = comInputModeBinary
'设置接收数据模式为二进制形式
.InputLen = 1
'设置Input 一次从接收缓冲读取字节数为1
.SThreshold = 1
'设置Output 一次从发送缓冲读取字节数为1
.InBufferCount = 0 '清除接收缓冲区
.OutBufferCount = 0 '清除发送缓冲区
.RThreshold = 1
'设置接收一个字节产生OnComm事件
If .PortOpen = False Then
'判断通信口是否打开
.PortOpen = True '打开通信口
If Err Then '错误处理
MsgBox "串口通信无效"
Exit Sub
End If
End If
End With
End Sub
Private Sub Label1_Click()
Label1 = Format(ww, "0.00")
End SubPrivate Sub MSComm1_OnComm()
With MSComm1
Select Case .CommEvent '判断MSComm1通信事件
Case comEvReceive '收到Rthreshold个字节产生的接收事件 av = .Input '读取一个接收字节
ab(1) = av(0) '转换保存到字节数据类型数组
If ab(1) = &HF0 Then '判断是否为数据开始标志
.RThreshold = 0 '关闭OnComm事件接收
Do
DoEvents
Loop Until .InBufferCount >= 3 '循环等待MSComm1接收缓冲区>=4字节
av = MSComm1.Input
'读取第二个数据字节(BCD码高位字节)
ab(2) = av(0)
'转换保存到字节数据类型数组
av = .Input
'读取第三个数据字节(BCD码低位字节)
ab(3) = av(0)
'转换保存到字节数据类型数组
av = .Input
'读取第四个数据字节(符号位字节)
ab(4) = av(0)
'转换保存到字节数据类型数组
b1 = ab(2) - 6 * (ab(2)(16)) '高位字节压缩BCD码转换为实数
b2 = ab(3) - 6 * (ab(3)(16)) '低位字节压缩BCD码转换为实数
ww = b1 + b2 / 100 '数值组合,标定小数点
End If
End If
MSComm1.RThreshold = 1
MSComm1.InBufferCount = 0 '清除接收缓冲区End
Case ElseEnd SelectEnd WithEnd Sub
关于
“b1 = ab(2) - 6 * (ab(2)(16)) '高位字节压缩BCD码转换为实数”
出现
编译错误 类型不匹配
请问该怎么改啊?
b2 = ab(3) - 6 * (ab(3)\16)
D=(a16)*10 + a-(a16)*16
则D=a-(a16)*6