我有個溫度巡回監(jiān)測儀需要與電腦進行通訊,要求電腦及儀表發(fā)射的編碼均含有BCD壓縮碼,請哪位高手幫忙用VB6.0編一個采集原程序,謝謝! 最佳答案
編碼本身都是為了在計算機中運算使用。實質(zhì)上,在計算機中只有以高低電平來表示的二進制。至于,BCD碼是一種8421編碼,它將一個字節(jié)分兩部分,高4位代表一個數(shù)字,低4位代表一個數(shù)字。也就是說,計算機怎么識別一個字節(jié)到底是二進制碼還是BCD碼,這是由程序代碼來運算的。
我的理解可由16進制數(shù)簡化理解: 每2個BCD碼構(gòu)成一字節(jié),接收到每字節(jié)二進制數(shù)據(jù)需處理成16進制的字符形式。僅是由00-99的范圍。而非00-FF范圍。 同樣發(fā)送的10進制數(shù)以每2個BCD碼組成1個16進制數(shù)形成二進制的一個字節(jié)發(fā)送來達到目的。 基于如上設(shè)想所做的收發(fā)代碼如下: 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 '接收十六進制數(shù)據(jù)。并以十六進制顯示 MSComm1.InputLen = 0 MSComm1.InputMode = comInputModeBinary '設(shè)置當前以二進制數(shù)接收數(shù)據(jù) buffer = MSComm1.Input '接收數(shù)據(jù)至字符串中 BytesReceived() = buffer '將數(shù)據(jù)轉(zhuǎn)入BYTE中 For i = 0 To UBound(BytesReceived) '顯示結(jié)果以十六進制顯示 If Len(Hex(BytesReceived(i))) = 1 Then HData = HData & "0" & Hex(BytesReceived(i)) Else HData = HData & Hex(BytesReceived(i)) End If txtReceive.Text = HData '最后將結(jié)果后入txtreceive中 MSComm1.OutBufferCount = 0 '清除發(fā)送緩沖區(qū) MSComm1.InBufferCount = 0 '清除接收緩沖區(qū) 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) '發(fā)送命令 End Sub Public Function SendData(ByRef bytData() As Byte) As Long On Error Resume Next MSComm1.InBufferCount = 0 '清空接收緩沖區(qū) MSComm1.Output = bytData '發(fā)送數(shù)據(jù) Do DoEvents Loop Until MSComm1.OutBufferCount = 0 '等待,直到數(shù)據(jù)發(fā)送完畢 MSComm1.OutBufferCount = 0 '清空發(fā)送緩沖區(qū) End Function 附件:Bcd.rar |
|