基于vb的串口通信程序
Private Sub getdatafromserial_Click()
CommonDialog1。InitDir = "c:\temp"
CommonDialog1。ShowSave
mainfrm。 MSComm1。CommPort=1
hfile = FreeFile
’打开存储接收数据的文件
Open lename For Output As #hfile
’设接收缓冲区的大小,可按量确定
mainfrm。 MSComm1。InBufferSize = 4096
If Not mainfrm。MSComm1。PortOpen Then ’打开串口
mainfrm。MSCo...全部
Private Sub getdatafromserial_Click()
CommonDialog1。InitDir = "c:\temp"
CommonDialog1。ShowSave
mainfrm。
MSComm1。CommPort=1
hfile = FreeFile
’打开存储接收数据的文件
Open lename For Output As #hfile
’设接收缓冲区的大小,可按量确定
mainfrm。
MSComm1。InBufferSize = 4096
If Not mainfrm。MSComm1。PortOpen Then ’打开串口
mainfrm。MSComm1。PortOpen = True
End If
If Err Then
MsgBox "Communcation port cannot be opened!!"
’清接收缓冲区
mainfrm。
MSComm1。InBufferCount = 0
’设一次读入的长度,可根据数据格式设置
mainfrm。MSComm1。InputLen = 77 ’设置接收事件触发的阀值
mainfrm。
MSComm1。RThreshold = 77
counter = Timer + 10
Do
If Timer > counter Then
mainfrm。Label1。Caption = "正在通信。
。。。。。"
mainfrm。Label1。Refresh
counter = Timer + 10
End If
DoEvents
Loop
End Sub
以下为事件处理子程序,flag为一静态变量记录读取次数,以便改变接收数据的长度
,读者可根据实际需要添加其它处理内容:
Private Sub MSComm1_OnComm()
Select Case MSComm1。
CommEvent
Case comEvReceive
If flag > 246 Then
MSComm1。InputLen = 0: MSComm1。RThreshold = 32
End If
buffer = MSComm1。
Input
temp = buffer
Print #hfile, temp
counter = Timer + 10
Do While Timer > counter
Do Events
Loop
flag = flag + 1
Case comEvEOF
EVMsg$ = "检测到文件结尾!!!"
Case comFrame
ERMsg$ = "帧出错!!!"
Case comRxParity
ERMsg$ = "奇偶错!!!"
End Select
If Len(EVMsg$) Then
Text1。
Text = "Status: " & EVMsg$
ElseIf Len(ERMsg$) Then
Text1。Text = "Status: " & ERMsg$
Beep
Ret = MsgBox(ERMsg$, 1, "Click Cancel to
quit, OK to ignore。
")
MSComm1。PortOpen = False
End If
End Sub
。收起