小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

串口技術(shù) BCD碼

 夢(mèng)中家園 2012-10-10
我有個(gè)溫度巡回監(jiān)測(cè)儀需要與電腦進(jìn)行通訊,要求電腦及儀表發(fā)射的編碼均含有BCD壓縮碼,請(qǐng)哪位高手幫忙用VB6.0編一個(gè)采集原程序,謝謝!
 
最佳答案
編碼本身都是為了在計(jì)算機(jī)中運(yùn)算使用。實(shí)質(zhì)上,在計(jì)算機(jī)中只有以高低電平來表示的二進(jìn)制。至于,BCD碼是一種8421編碼,它將一個(gè)字節(jié)分兩部分,高4位代表一個(gè)數(shù)字,低4位代表一個(gè)數(shù)字。也就是說,計(jì)算機(jī)怎么識(shí)別一個(gè)字節(jié)到底是二進(jìn)制碼還是BCD碼,這是由程序代碼來運(yùn)算的。
我的理解可由16進(jìn)制數(shù)簡(jiǎn)化理解:
每2個(gè)BCD碼構(gòu)成一字節(jié),接收到每字節(jié)二進(jìn)制數(shù)據(jù)需處理成16進(jìn)制的字符形式。僅是由00-99的范圍。而非00-FF范圍。
同樣發(fā)送的10進(jìn)制數(shù)以每2個(gè)BCD碼組成1個(gè)16進(jìn)制數(shù)形成二進(jìn)制的一個(gè)字節(jié)發(fā)送來達(dá)到目的。
基于如上設(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 '接收十六進(jìn)制數(shù)據(jù)。并以十六進(jìn)制顯示
MSComm1.InputLen = 0
MSComm1.InputMode = comInputModeBinary '設(shè)置當(dāng)前以二進(jìn)制數(shù)接收數(shù)據(jù)
buffer = MSComm1.Input '接收數(shù)據(jù)至字符串中
BytesReceived() = buffer '將數(shù)據(jù)轉(zhuǎn)入BYTE中
For i = 0 To UBound(BytesReceived) '顯示結(jié)果以十六進(jìn)制顯示
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

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多