dim m_strReceive() as byte
m_strReceive = msComm.Input每次接收一个字节我发现只要接收的字节是大于81 也就是大于十进制128的 程序就像死机了一样。这是为什么呢?请高手指点一下第二个问题:
是这样的,例如串口以十六进制向我发送一个字节"0A",我用下面这段程序转换之后却不是"0A",我不知道错在哪里了。请高手指点。
public function Receive() as string
dim m_strReceive() as byte
Do While MainForm.Comm.InBufferCount = 0
DoEvents
Loop
m_strReceive = msComm.Input
Receive=Change_R(m_strReceive)
end function public function Change_R( strs as variant)
Result() as byte
Result=strs
for i=LBound(Result) to Ubound(Result)
Change_R = Change_R & String(2 - Len(Hex(Result(i))), "0") & Hex(Result(i))
next i
end function
m_strReceive = msComm.Input每次接收一个字节我发现只要接收的字节是大于81 也就是大于十进制128的 程序就像死机了一样。这是为什么呢?请高手指点一下第二个问题:
是这样的,例如串口以十六进制向我发送一个字节"0A",我用下面这段程序转换之后却不是"0A",我不知道错在哪里了。请高手指点。
public function Receive() as string
dim m_strReceive() as byte
Do While MainForm.Comm.InBufferCount = 0
DoEvents
Loop
m_strReceive = msComm.Input
Receive=Change_R(m_strReceive)
end function public function Change_R( strs as variant)
Result() as byte
Result=strs
for i=LBound(Result) to Ubound(Result)
Change_R = Change_R & String(2 - Len(Hex(Result(i))), "0") & Hex(Result(i))
next i
end function
你的转换程序没看懂,你是想把传给电脑的16进制数0a显示成“0a“吗?用hex()就搞定了吧,只是小于16的转成了0到f,可以特殊处理一下
Option Explicit
Dim m_strReceive() As Byte
Public Function Receive() As String
Dim buffer As Variant
Do While MSComm.InBufferCount = 0
DoEvents
Loop
buffer = MSComm.Input
m_strReceive = buffer
Receive = change_R(m_strReceive)
End FunctionPublic Function change_R(strs As Variant)
Dim i As Integer
For i = LBound(m_strReceive) To UBound(m_strReceive)
If Len(Hex(m_strReceive(i))) = 1 Then
change_R = change_R & "0" & Hex(m_strReceive(i))
Else
change_R = change_R & Hex(m_strReceive(i))
End If
Next i
Text1 = change_R
End FunctionPrivate Sub Form_Load()
MSComm.Settings = "9600,n,8,1"
MSComm.InputMode = comInputModeBinary
MSComm.PortOpen = True
Timer1.Interval = 100
Timer1.Enabled = True
End SubPrivate Sub Timer1_Timer()
Receive
End Sub