正文

单片机与PC机串行通讯之VB篇(1) 2005-09-30 13:20:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/iamben250/5471.html

分享到:


单片机与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

如果大家感觉程序哪里有问题,请大家一起探讨。

阅读(3108) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册