[转] 关于mscomm的用法,提高篇
MSCOMM控件是个好东西,如果您能够充分了解他,他会为您衷心的效劳。
大致看了一下下午有关讨论MSCOMM的话题,觉得有必要说说我的心得,我一般只做硬件,没有系统的学过软件,只是业余时间
学学用用,多少掌握了一点,也在此拿出来玩玩,不知有错没有,我可是以为我已经做的很好了^_^
这是一个VB通用串口事件驱动接收程序。一次性接收一个数据包,数据包可以为任意字节,保证不会丢失一个数据!
Private Sub MSComm_OnComm()
Dim S() As Byte
Dim SS(1024) As Byte
Static N As Long
Static T As Variant
If (MSComm.CommEvent = comEvReceive) Then
S = MSComm.Input '只要有数据就收进来,哪怕只是一个
If (Timer - T > 0.01) Then '间隔10MS以上就认为是一个新的包
text1="" 'text1用于搜集和显示接收(HEX格式)
N = 0
End If
T = Timer
For i = 0 To UBound(S) '一个数据包可能产生若干个oncomm事件
Text1.Text = Text1.Text & Right("0" & Hex(S(i)) & "H", 3) + " "
SS(N+i)=S(i) '接收数据包缓存于SS()
N=N+UBound(S)
Next i
End If
End Sub
大致看了一下下午有关讨论MSCOMM的话题,觉得有必要说说我的心得,我一般只做硬件,没有系统的学过软件,只是业余时间
学学用用,多少掌握了一点,也在此拿出来玩玩,不知有错没有,我可是以为我已经做的很好了^_^
这是一个VB通用串口事件驱动接收程序。一次性接收一个数据包,数据包可以为任意字节,保证不会丢失一个数据!
Private Sub MSComm_OnComm()
Dim S() As Byte
Dim SS(1024) As Byte
Static N As Long
Static T As Variant
If (MSComm.CommEvent = comEvReceive) Then
S = MSComm.Input '只要有数据就收进来,哪怕只是一个
If (Timer - T > 0.01) Then '间隔10MS以上就认为是一个新的包
text1="" 'text1用于搜集和显示接收(HEX格式)
N = 0
End If
T = Timer
For i = 0 To UBound(S) '一个数据包可能产生若干个oncomm事件
Text1.Text = Text1.Text & Right("0" & Hex(S(i)) & "H", 3) + " "
SS(N+i)=S(i) '接收数据包缓存于SS()
N=N+UBound(S)
Next i
End If
End Sub