山西鲁能晋北铝业检修分厂 张 乾
基于VB的PC机与单片机串口通信技术研究
山西鲁能晋北铝业检修分厂 张 乾
在功能较复杂的控制系统中,通常以PC机为主机,单片机为从机,由单片机完成数据的采集和对装置的控制,而由主机完成各种复杂的数据处理和对单片机进行控制。所以计算机与单片机之间的数据通信显得越来越重要。串行通信是指按照逐位顺序传递数据的通信方式,由于仅需3根传输线传送信息且通信距离相对较远,所以在控制领域的现场监测、分布控制等场合都有着十分重要的应用价值。
本文,笔者设计了单片机与PC机串口通信系统,以VB为开发工具,设计界面简单明了,详细介绍了程序的主要功能。
1.单片机选择。在测控系统和工程应用中,经常遇到多项任务同时执行的情况,因而主从式多机分布式系统已成为现代工业广泛应用的模式。它们大多由PC机和MCS-51单片机组成。AT89C52是一个低电压、高性能的CMOS 8位单片机,有40个引脚,32个外部双向输入/输出端口,同时内含2个外中断口,3个16位可编程定时计数器,2个全双工串行通信口,AT89C52可以按照常规方法进行编程,也可以在线编程。
AT89C52单片机通过引脚RXD(P3.0)和引脚TXD(P3.1)与外界进行通信。AT89C52的串行口是可编程接口,通过对2个特殊功能寄存器SCON和PCON进行编程可控制串行口的工作方式和波特率。SCON用于控制串行口的工作方式,同时还包含要发送或接收到的第9位数据位以及串行口中断标志位。该寄存器的字节地址为98H,并可进行位寻址。PCON中只有最高位SMOD与串行口工作有关,该位用于控制串行口工作于方式1、2、3时的波特率。PCON的字节地址为87H,没有位寻址功能。单片机复位时,SMOD=0。
2.PC机与单片机的连接。目前的PC机都有至少一个串行通讯端口RS-232,RS-232端口可用于2台计算机之间进行通讯,RS-232的逻辑电平用正负电压来表示,且信号使用负逻辑,逻辑0的电压范围是+5V~+15V,而逻辑1的电压范围是-5V~-15V,RS-232端口是计算机与其他设备沟通的最常用的接口,不但操作简单,而且价格便宜。在AT89C52单片机的内部有一个全双工的异步串行I/O口,它的输入和输出使用5V而不是RS-232电压,由于本次设计使用的是便携式PC机(无串行通信接口),故使用了一根USB转串口的数据线,然后再用MAX232芯片进行转换。电路结构如图1所示。
图1 PC机与单片机连接结构
3.下位机(单片机端)的程序设计。本次设计采用定时1的模式1,为与上位机配合,串行口选择工作方式1,无奇偶校验位,有8位数据位和1个停止位,波特率为9600。所以(TMOD)=20H,(SCON)=50H。方式1和方式3的移位时钟脉冲由定时器T1的溢出率来决定,AT89C52串行口方式1和方式3的波特率由定时器T1的溢出率和SMOD值同时决定。单片机程序流程图如图2所示。
图2 单片机程序流程
4.下位机的原理图及仿真结果。原理图如图3所示。
仿真结果如图4所示。
本系统的设计任务是上位机通过串行口向下位机发送字符,下位机接收到字符后返回原字符。上位机用VB编写程序界面。
1.上位机(及PC端)的软件设计。
(1)建立新工程。运行VB6.0程序,选择“新建工程”对话框,选择“标准EXE”,单击“打开”命令按钮,进入VB工程集成开发环境,窗体设计器中自动出现一个名为Form1的空白窗体。
图3 单片机接线原理
图4 仿真结果
(2)程序界面设计。添加串口通信控件MSComm。由于VB的串行通信组件不会主动出现在工具箱中,当我们需要MSComm控件时,首先要把它加入到工具箱中。具体步骤如下:选择“工程”菜单下的“部件”,在弹出的对话框选中“Microsoft Comm Control6.0”复选框,单击“确定”后,在工具箱中就会出现一个类似“电话”的图标,它就是MSComm控件。如果在控件属性中没有“Microsoft Comm Control6.0”选项,可在“部件”对话框“控件”属性中单击“浏览”按钮,在Windowssystem32目录下选择MSCOMM32.OCX项。单击“打开”按钮即可在“部件”对话框中看到“Microsoft Comm Control6.0”的可选项目。
添加2个文本框控件:Text1和Text2,用于输入要发送的字符和显示要接收的字符。添加2个标签控件:Label1和Label2,作为发送和接收字符区的标签。
添加4个按钮控件:Command1、Command2、Command3和Command4,分别执行发送字符、关闭程序、清空发送字符区和清空接收字符区等命令。添加完所有的控件后调整控件的位置和大小,使界面美观。
(3)属性设置。对界面中的各控件设计属性,设置完控件属性的程序界面如图5所示。
图5 VB程序窗体界面
2.程序代码设计。程序流程图如图6所示。
图6 上位机程序流程
程序如果要实现自动发送或读取,在VB中有2种方式可以实现:一个是使用计时器控件(Timer),该控件中的Interval可以控制计时器被启动的时间间隔,当时间间隔一到,便会执行原先发在计时器中的程序代码;另一个则是使用循环语句不断的执行程序代码。本次设计使用手动发送,用VB编写的部分源程序如下:
Option Explicit
Dim OutputAscii As Boolean
Dim InputString As String
Dim OutputString As String
Dim i As Long
Private Sub Cmdquit_Click()
Unload Me
End Sub
Private Sub Form_Unload(Cancel As Integer)
MSComm1.PortOpen=False
End Sub
目前串行通信仍是使用最为普遍的一种外部总线方式。本文,笔者从硬件和软件2个方面讨论了单片机和PC机的串行通信方式。
本文中笔者主要完成了以下工作。
1.在点对点串行通信的硬件讨论中,涉及到RS-232与TTL电平之间的转换问题,给出了实际的硬件电路。软件设计以一个简单的通信协议为核心,实现了单片机与PC机点对点可靠的串行通信,并给出了PC机部分的源程序。
2.文章最后结合前面的讨论,介绍了在一台PC机为上位机,一台单片机作为下位机组成的字符通信。利用VB6.0的通信控件与一台下位机进行数据通信。本文,笔者所用的串行通信的方法只是实现了基本的功能,所以还可以进一步的改进和完善。