串口通讯遇到接收问题(接收十六进制编码).
青竹雅苑 2007-04-22 11:07:31 我在使用MSComm通讯控件以十六进制码发送没问题,但在写接收时,有问题:对于数字正常,但对于接收"A-F"的十六制数时,不正常.
Private Sub Form_Load()
Dim Instring As String
' 使用 COM1。
MSComm1.CommPort = 2
' 9600 波特,无奇偶校验,8 位数据,一个停止位。
MSComm1.settings = "9600,N,8,1"
' 当输入占用时,
' 告诉控件读入整个缓冲区。
MSComm1.InputLen = 0
' 打开端口。
MSComm1.PortOpen = True
End Sub
'以下过程为发送十六进制编码过程
'请高手写出以下的过程的反过程,也就是接收十六进制编码
Private Sub cmdOutPut_Click()
Dim OutBuffer() As Byte
Dim tem As Variant
Dim e As Integer
Dim q As Integer
Dim LenOfText As Integer
LenOfText = Len(txtSum.Text) \ 2 - 1
ReDim OutBuffer(LenOfText)
If MSComm1.PortOpen = False Then
MSComm1.PortOpen = True
End If
q = 0
For e = 1 To Len(txtSum.Text) Step 2
tem = Mid(txtSum.Text, e, 2)
OutBuffer(q) = Val("&H" & tem)
Debug.Print Val("&H" & tem)
q = q + 1
Next
MSComm1.Output = OutBuffer
MSComm1.PortOpen = False
'MSComm1.Output
End Sub
'以下过程想写接收十六进制编码过程,但对于'A-F'的编码不正常.请高手指点.
Private Sub cmdRecHex_Click()
'On Error GoTo Hander
Dim e As Integer
Dim ReceiveLen As Byte
Dim InBuffer() As Byte
ReceiveLen = MSComm1.InBufferCount
ReDim InBuffer(ReceiveLen - 1) As Byte
If MSComm1.PortOpen = False Then
MSComm1.PortOpen = True
End If
InBuffer = MSComm1.Input
Dim i As Byte
Dim strContent As String
For i = 0 To 2 * (ReceiveLen - 1) + 1
Debug.Print InBuffer(i)
strContent = strContent + Hex(InBuffer(i))
Next i
txtInPut.Text = strContent
MSComm1.InBufferCount = 0
'Handler:
'If Err.Number = 9 Then Resume Next
End Sub