分享

串口技术 BCD码

 梦中家园 2012-10-10
我有个温度巡回监测仪需要与电脑进行通讯,要求电脑及仪表发射的编码均含有BCD压缩码,请哪位高手帮忙用VB6.0编一个采集原程序,谢谢!
 
最佳答案
编码本身都是为了在计算机中运算使用。实质上,在计算机中只有以高低电平来表示的二进制。至于,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

附件:Bcd.rar

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多