MSCOMM控件有两种方式来读数据,一种就是你说的轮询方式,你只要在轮询代码里加DoEvents,一般不会占用太多资源,简单的代码如下: ' 保存输入子串的缓冲区
Dim Instring As String
' 使用 COM1。
MSComm1.CommPort = 1
' 9600 波特,无奇偶校验,8 位数据,一个停止位。
MSComm1.Settings = "9600,N,8,1"
' 当输入占用时,
' 告诉控件读入整个缓冲区。
MSComm1.InputLen = 0
' 打开端口。
MSComm1.PortOpen = True
' 将 attention 命令送到调制解调器。
MSComm1.Output = "ATV1Q0" & Chr$(13) ' 确保
' 调制解调器以"OK"响应。
' 等待数据返回到串行端口。
Do
DoEvents
Buffer$ = Buffer$ & MSComm1.Input
Loop Until InStr(Buffer$, "OK" & vbCRLF)
' 从串行端口读 "OK" 响应。 ' 关闭串行端口。
MSComm1.PortOpen = False第二种方法是中断方式,就是用OnComm 事件来处理,你可以看MSDN帮助!
Dim Instring As String
' 使用 COM1。
MSComm1.CommPort = 1
' 9600 波特,无奇偶校验,8 位数据,一个停止位。
MSComm1.Settings = "9600,N,8,1"
' 当输入占用时,
' 告诉控件读入整个缓冲区。
MSComm1.InputLen = 0
' 打开端口。
MSComm1.PortOpen = True
' 将 attention 命令送到调制解调器。
MSComm1.Output = "ATV1Q0" & Chr$(13) ' 确保
' 调制解调器以"OK"响应。
' 等待数据返回到串行端口。
Do
DoEvents
Buffer$ = Buffer$ & MSComm1.Input
Loop Until InStr(Buffer$, "OK" & vbCRLF)
' 从串行端口读 "OK" 响应。 ' 关闭串行端口。
MSComm1.PortOpen = False第二种方法是中断方式,就是用OnComm 事件来处理,你可以看MSDN帮助!
mscomm属性设置:
MSComm1.RThreshold = 1
MSComm1.RTSEnabled=TRUE如下:Private Sub MSComm1_OnComm()
Dim rBuf As String
Dim receva As ByteOn Error GoTo CommErrorSelect Case MSComm1.CommEvent
Case comEvReceive
MSComm1.RThreshold = 0
MSComm1.InputMode = comInputModeBinary
MSComm1.InputLen = 1
If MSComm1.InBufferCount >= 1 Then
If terminal = False Then
MSComm1.RThreshold = 0
RunTestTimer.Enabled = True
End If
End If
Case comEvCD
End SelectExit SubCommError:
MSComm1.RThreshold = 1
Exit Sub
End Sub
Private Mscomm1_DataArrival(a as integer)
msgbox a & "消息到"
end sub