串口技术BCD码我有个温度巡回监测仪
编码本身都是为了在计算机中运算使用。实质上,在计算机中只有以高低电平来表示的二进制。至于,BCD码是一种8421编码,它将一个字节分两部分,高4位代表一个数字,低4位代表一个数字。也就是说,计算机怎么识别一个字节到底是二进制码还是BCD码,这是由程序代码来运算的。
我的理解可由16进制数简化理解:
每2个BCD码构成一字节,接收到每字节二进制数据需处理成16进制的字符形式。仅是由00-99的范围。而非00-FF范围。
同样发送的10进制数以每2个BCD码组成1个16进制数形成二进制的一个字节发送来达到目的。
基于如上设想所做的收发代码如下:
Option Explicit
Priv...全部
编码本身都是为了在计算机中运算使用。实质上,在计算机中只有以高低电平来表示的二进制。至于,BCD码是一种8421编码,它将一个字节分两部分,高4位代表一个数字,低4位代表一个数字。也就是说,计算机怎么识别一个字节到底是二进制码还是BCD码,这是由程序代码来运算的。
我的理解可由16进制数简化理解:
每2个BCD码构成一字节,接收到每字节二进制数据需处理成16进制的字符形式。仅是由00-99的范围。而非00-FF范围。
同样发送的10进制数以每2个BCD码组成1个16进制数形成二进制的一个字节发送来达到目的。
基于如上设想所做的收发代码如下:
Option Explicit
Private Sub cmdSend_Click()
Call Timer1_Timer
End Sub
Private Sub Form_Load()
Me。
MSComm1。CommPort = 1
Me。MSComm1。PortOpen = True
Me。MSComm1。RThreshold = 1
txtSend = "1234"
txtReceive = ""
Timer1。
Interval = 0
End Sub
Private Sub MSComm1_OnComm()
On Error Resume Next
Dim BytesReceived() As Byte
Dim buffer As String
Dim HData As String
Dim i As Integer
Select Case MSComm1。
CommEvent
Case comEvReceive '接收十六进制数据。并以十六进制显示
MSComm1。InputLen = 0
MSComm1。
InputMode = comInputModeBinary '设置当前以二进制数接收数据
buffer = MSComm1。Input '接收数据至字符串中
BytesReceived() = buffer '将数据转入BYTE中
For i = 0 To UBound(BytesReceived) '显示结果以十六进制显示
If Len(Hex(BytesReceived(i))) = 1 Then
HData = HData & "0" & Hex(BytesReceived(i))
Else
HData = HData & Hex(BytesReceived(i))
End If
txtReceive。
Text = HData '最后将结果后入txtreceive中
MSComm1。OutBufferCount = 0 '清除发送缓冲区
MSComm1。
InBufferCount = 0 '清除接收缓冲区
Next
End Select
End Sub
Private Sub Timer1_Timer()
On Error Resume Next
Dim bytData(1) As Byte
Dim i As Integer
For i = 1 To 4 Step 2
bytData((i - 1) / 2) = Val("&H" & Mid(txtSend, i, 2))
Next
MSComm1。
Settings = "9600,n,8,1"
Call SendData(bytData) '发送命令
End Sub
Public Function SendData(ByRef bytData() As Byte) As Long
On Error Resume Next
MSComm1。
InBufferCount = 0 '清空接收缓冲区
MSComm1。Output = bytData '发送数据
Do
DoEvents
Loop Until MSComm1。
OutBufferCount = 0 '等待,直到数据发送完毕
MSComm1。OutBufferCount = 0 '清空发送缓冲区
End Function
。
收起