张杰
【摘 要】本文介绍了利用Visual Basic 6.0开发工具和Atmle89S52单片机进行通信,探讨在VB环境下来实现PC机与单片机之间的数据传输方式,着重介绍通过max485芯片实现PC机与单片机之间的通信以及单片机串口通信的实现方法。
【关键词】单片机;485通讯;MSComm控件
1.引言
随着计算机技术特别是单片机技术的发展,在各种单片机应用系统的设计中,常常遇到计算机与外界的信息交换问题。目前,许多检测仪表、在线分析仪、工控机等均采用RS485方式通过串口与上位机进行通信,用户通过串行通信可以实现实时监控远程设备的工作情况,对设备运行参数进行优化,通过指令反馈控制仪器的运行情况,从而实现生产节能与质量控制。鉴于PC机具有强大的监控和管理功能,单片机则具有快速以及容易控制的特点,在数据量不大、传输要求不高的情况下。在本文中采用的是MAX485芯片实现RS485方式通信。PC机与单片机一般采用应答方式,当PC机控制多个单片机终端时,PC机发送一个地址帧选中一个终端,再对选中的终端进行一对一的通信,实现这种通信方式需要对发送帧的格式和单片机端的相应寄存器进行设置。
2.系统组成介绍
本系统由1台PC机作为上位机,多个89S52单片机为核心作为系统终端,通过RS485总线结构将PC机和各个终端机连接起来。PC机通过RS232/485转换器连接到485总线,单片机通过MAX485芯片模块连接到485总线上,实现与PC机的通信,PC机通过查询方式与各个终端通信,完成监测、控制等功能。各个终端接受主控机指令,完成就地调整、控制、测量以及信息回传等工作。
3.通信过程与通信协议
由于MAX485通讯是一种半双工通讯,发送和接收共用同一物理信道。在任意时刻只允许一台单机处于发送状态。因此要求应答的单机必须在侦听到总线上呼叫信号已经发送完毕,并且没有其它单机发出应答信号的情况下,才能应答。半双工通讯对主机和从机的发送和接收时序有严格的要求。如果在时序上配合不好,就会发生总线冲突,使整个系统的通讯瘫痪,无法正常工作。
为了防止冲突的发生每个终端机有一个地址编号,各个终端通过寄存器设置成接收地址。通信时主控PC机首先发送地址帧,数据是所要操控的终端机的编号,标志位是1,这时各个终端都接收这个地址帧;各终端接收到地址帧后,把收到的地址数据与本身的地址编号进行比较,如果不相等,则设置成地址接收方式,继续等待接收地址;如果收到的地址数据与本机的地址编号相同,则该终端单片机设置成数据接收方式,并返回该机地址,等待接收数据;主控PC机在规定的时间内接收到终端机返回的地址后,发送数据帧;终端机接收到主控机的数据后,完成主机要求的任务,并回传主控机要求的数据,通信结束后终端机重新设置成地址接收方式。
4.通信的具体实现
采用Visual Basic是实现PC机的串口通信。串口通信控件MSComm,全称为Microsoft Communications Control,是Microsoft公司提供的ActiveX控件,目的是为了简化Windows下串行通信编程,它既可以用来提供简单的串口端口通信功能,也可以用来创建功能完备的、事件驱动的高级通信工具。
4.1 MSComm控件处理通信的方式
4.1.1事件驱动方式
事件驱动通信是处理串行端口交互作用的一种非常有效的方法。在许多情况下,在事件发生时程序得到通知,例如,在串口接收缓冲区中有一个字符到达或一个变化发生时,程序都可以利用MSComm控件的OnComm事件捕获并处理这些通信事件,OnComm事件还可以检查和处理通信错误。在程序设计中,可以在OnComm事件处理函数中加入自己的处理代码,一旦事件发生即可自动执行该段程序。这种方法的优点是程序响应及时,可靠性高。
4.1.2查询方式
在程序的每个关键功能完成之后,可以通过检查CommEvent属性的值来查询事件和错误。适用于自保持的应用程序较小的编程。查询方式的编程可用计时器或Do…Loop程序实现。
4.2 MSComm控件的常用属性
对控件编程首先需要了解它的属性和事件。下面介绍MSComm控件的一些主要属性。Commport 设置并返回通信串口号
Settings 以字符串的形式设置并返回串口波特率、奇偶校验、数据位、停止位。格式为:MSComm1.Settings=”BBBB,P,D,S”
Portopen 设置并返回串口状态,也可以打开和关闭串口
Input 从接收缓冲区中读取数据并清空缓冲区
Inputlen 设置并返回一次从接收缓冲区中读取字节数
InBufferSize 设置并返回接收缓冲区的大小,缺省值为1024字节
InBufferCount 设置并返回接收缓冲区中等待接收的字符数
InputMode 设置并返回接收数据的类型。其值为0和1时,分别表示通过Input属性以文本方式和二进制方式取回数据
OutBufferSize 设置并返回发送缓冲区的大小,缺省值为512字节
OutBufferCount 设置并返回发送缓冲区中等待计算机发送的字符数
Output 向发送缓冲区发送数据,该属性设计时无效,运行时只读
Rthreshold 在MSComm控件设置ConunEvent属性为comEvReceive并产生OnComm之前,设置并返回要接收的字符数
其中CommEvent属性是一个非常重要的属性。一旦串口发生通信事件或产生错误,依据产生的事件和错误,MSComm控件为CommEvent属性赋以不同的代码,同时产生OnComm事件。用户程序就可在OnComm事件处理程序中针对不同的代码,进行相应的处理。
MAX485接口芯片是Maxim公司的一种RS-485芯片。采用单一电源+5 V工作,额定电流为300μA,采用半双工通讯方式。它完成将TTL电平与RS-485电平转换的功能。MAX485芯片的结构和引脚都非常简单,内部含有一个驱动器和接收器。RO和DI端分别为接收器的输出和驱动器的输入端,与单片机连接时只需分别与单片机的RXD和TXD相连即可;/RE和DE端分别为接收和发送的使能端,当/RE为逻辑0时,器件处于接收状态;当DE为逻辑1时,器件处于发送状态,因为MAX485工作在半双工状态,所以只需用单片机的一个管脚控制这两个引脚即可;A端和B端分别为接收和发送的差分信号端,当A引脚的电平高于B时,代表发送的数据为1;当A的电平低于B端时,代表发送的数据为0。在与单片机连接时接线非常简单。只需要一个信号控制MAX485的接收和发送即可。
从通信协议及数据传输过程可知,单片机在初始化后要保持接收地址状态,当接收到本机地址后回送地址并设置本机为接收数据状态,接收完数据后作出相应的反应,最后回到接收地址的状态。
6.结束语
本文介绍了一个以PC机为上位机,以单片机为终端机,通过RS485网络把它们连接起来的计算机监控系统的实现方法,重点介绍了利用Visual Basic6.0控件访问串口实现串行通信、利用RS485接口实现单片机串口通信。具有开发简单、成本低的优点,性能稳定、运行可靠、抗干扰能力强可以进行半双工通信组成多机通信网络。
参考文献:
[1]张辉.Visual Basic 串口通信及编程实例.化学工业出版社,2013.11.
[2]李江全.Visual Basic数据采集与串口通信测控应用实战.人民邮电出版社,2012.1.
[3]孙育才.ATMEL 新型AT89S52系列单片机及其应用.清华大学出版社,2005.1.
[4]张萌.单片机应用系统开发综合实例.清华大学出版社,2007.1.
[5]鲍安平.单片机应用技术.西安安电子科技大学出版社,2013.1.