单片机与PC机串行通讯之VB篇(1)Ryan 发表于 2005-6-7 14:35:32 网上有很多关于PC机与单片机串行通讯的文章和程序,但有些不太适合初学者。我最近把网上搜集的程序消化并修改了一下,并在试验板上进行了一些简单的调试。希望对大家有用。 PC机上的程序是用VB编的,VB可以说是最容易上手的语言了,也很容易读懂。下面是VB的源程序: Private Sub Form_Load() MSComm1.CommPort = 1 '使用串行口1 MSComm1.Settings = "4800,N,8,1" '波特率4800,无校验,8个数据位,1个停止位。 MSComm1.InputLen = 1 '当使用MSComm1.Input时,每次从接收缓冲区取一个字节。 TestTimer.Interval = 20 '定时器的中断间隔为20ms,用于更新显示时间。 End Sub Private Sub Command1_Click() Dim echoch% '命令变量 Dim ch$ On Error Resume Next '简单的错误处理 Label1.Caption = MSComm1.Settings '显示串行口的设置。 TestTimer.Enabled = True If Command1.Caption = "通信" Then '若当前命令按扭的提示为“通信”则开始发送和 Command1.Caption = "停止" '接受数据,并将命令按扭提示改为“停止”,以 CmdExit.Enabled = False '允许停止通信。使退出命令在通信中失效。 Echo.Enabled = False If Not MSComm1.PortOpen Then '若串行口没有打开,则打开串行口 MSComm1.PortOpen = True End If If MSComm1.PortOpen Then '若串口已经打开,则发送连接或控制命令给单片机 If Echo.Text <> "" Then '若命令输入框不空,则将其转换为ASCII码值 echoch% = Asc(Echo.Text) Else echoch% = &H41 '否则确省命令为41H,ASCII的"A" End If MSComm1.Output = echoch% '向串行口写入一字节命令,由WINDOWS自动将命令发出 LabelSend.Caption = Chr(echoch%) & " ASCII " & Hex(echoch%) '显示刚发出的命令 End If Do While MSComm1.PortOpen If MSComm1.InBufferCount > 0 Then '若mscomm1.InBufferCount>0表示接受缓冲区有数据,并读出一个字符 ch$ = MSComm1.Input LabelReceive.Caption = Asc(ch$) Select Case ch$ Case Asc("Y") '若收到字母“Y”,则退出当前循环进入下一循环 MsgBox "连接成功,您可以给单片机发送命令了!" Case Asc("A") MsgBox "你发送的一号命令已经被单片机收到!" Case Asc("B") MsgBox "你发送的二号命令已经被单片机收到!" Case Asc("C") MsgBox "你发送的N号命令已经被单片机收到!" Case Else MsgBox "你发送了非法命令,单片机已经晕了!" End Select Else If MsgBox("连接失败,请检查连接是否正确!", vbRetryCancel) = 4 Then dummy = DoEvents() MSComm1.Output = echoch% '否则继续向下位机发命令,通知下位机送数据 Else Exit Do End If End If dummy = DoEvents() '让系统处理其他消息 Loop '下位机接受到正确的命令,并回发命令正确时,进入下面循环 Else '在通讯过程中,按下cmdCOMM按钮则停止通信,发出停止测试 Command1.Caption = "通信" '命令,关闭串行口,使退出按钮有效。 MSComm1.Output = Chr(&H5F) MSComm1.PortOpen = False CmdExit.Enabled = True Echo.Enabled = True TestTimer.Enabled = False End If End Sub Sub CmdExit_Click() If MSComm1.PortOpen Then '确认关闭串行口 MSComm1.PortOpen = False End If End '终止整个程序 End Sub Private Sub Command2_Click() TestTimer.Enabled = True End Sub Private Sub TestTimer_Timer() '更新显示时间 LabTime.Caption = Time$ End Sub 如果大家感觉程序哪里有问题,请大家一起探讨。

评论