2 Visual Basic与单片机实现串口通信的总体设计方案
2.1 Visual Basic与单片机串口通信功能的实现方法
串行通信的数据是逐位传送的,发送方发送的每一位都具有因定的时间间隔,这就要求接收方也要按照发送方同样的时间间隔来接收每一位。不仅如此,接收方还要确定一个信息组的开始和结束。为此,串行通信对传送数据的格式作了严格的规定。不同的串行通信方式具有不同的数据格式。常用的两种基本串行通信方式有同步通信和异步通信。
所谓同步通信是指在约定的通信速率下,发送端和接收端的时钟信号频率和相信始终保持一致(同步),这就保证了通信双方在发送和接收数据时具有完全一致的定时关系。同步通信传送信息的位数几乎不受限制,通常一次通信传的数据有几十到几千个字节,通信效率较高。但它要求在通信中保持精确的同步时钟,所以其发送器和接收器比较复杂,成本也较高,一般用于传送速率要求较高的场合。
异步通信是指通信中两个字符之间的时间间隔是不固定的,而在一个字符内各位的时间间隔是固定的。异步通信规定字符由起始位(start bit)、数据位(data bit)、奇偶校验位(parity)和停止位(stop bit)组成。起始位表示一个字符的开始,接收方可用起始位使自己的接收时钟与数据同步。停止位则表示一个字符的结束。这种用起始位开始,停止位结束所构成的一串信息称为帧(frame)。比较适合于远距离串行通信。
常用于数据通信的传输方式有单工、半双工、全双工。单工方式:数据仅按一个固定方向传送。因而这种传输方式的用途有限,常用于串行口的打印,数据传输与简单系统间的数据采集。半双工方式:数据可实现双向传送,但不能同时进行,实际的应用是采用某种协议实现收/发开关转换。全双工方式:允许双方同时进行数据双向传送,可以实时通信。
本设计采用的是PC机与单片机的全双工异步通信方式。具体方案如下:
(1)Visual Basic是一种可视化的编程语言,利用Visual Basic中的控件建立一个用户端的界面,供用户进行选择进入主程序界面。
(2)在Visual Basic主界面程序中添加mscomm控件,开发串口通信程序。
(3)通过MCS-51系列单片机编写串口通信协议。
(4)单片机进行数码管接口扩展,数码管显示PC机发送的数据,并且将PC机发送的数据通过单片机回传给PC机。即通过PC机的VB串口通信程序界面,从PC机键盘发送一个数传给单片机则单片机控制的数码管则可以显示该数,并且将发送的数据传回PC机,若接受到的数据与发送的数据相同且与数码管显示的数据相同则表示发送成功。
(5)由于RS-232接口与单片机的电气特性不同,可通过MAX232芯片进行电平转换,联调单片机与PC机进行串口通信。
2.2 MAX232的结构与功能
MAX232 芯片是MAXIM 公司生产的,包含两路接收器和驱动器的IC 芯片。RS-232C采用的是EIA电平,其规定如下:在TXD、RXD上规定逻辑1时,电压为-3V~ -15V,逻辑0时,为+3V~ +15V。而单片机所用的是TTL+5V逻辑电平。MAX232 芯片内部有一个电源电压转换器,可以把输入的+ 5V 电压变换为RS-232 输出电平所需的-10~ +10V 电压。所以采用此芯片接口串行通信系统只需单一的 + 5V 电源就可以了。对于没有- 12~ + 12V 的场合,其适应性更强。加之其价格适中,硬件接口简单,所以被广泛采用。其芯片引脚图如下:

其中引脚11,12为TTL电平接口的收发引脚。13,14为RS-232C接口的收发引脚。
2.3 MAX232实现PC机与单片机的联调
目前较为常用的RS-232C 9针串口在通信距离较近时,仅需3根线便可在两个数字设备之间全双工的传送数据,即需要TXD、RXD、 GND即可完成。RS-232针脚的功能如下:
TXD(pin 3):串口数据输出
RXD(pin 2):串口数据输入
RTS(pin 7):发送数据请求
CTS(pin 8):清除发送
DSR(pin 6):数据发送就绪
DCD(pin 1):数据载波检测
DTR(pin 4):数据终端就绪
GND(pin 5):地线
RI (pin 9):载波侦测
连线方式如下图所示:
3 Visual Basic开发串口通信程序设计
3.1mscomm控件实现串口通信的方法
一般说来,计算机都有一个或多个串行端口,它们依次为Com1,Com2......,这些串口还提供了外部设备与PC机进行数据传输和通信的通道,这些串口在CPU和外设之间充当解释器的角色。当字符数据从CPU发送给外设时,这些字符数据将被转换成串行比特流数据;当接收数据时,比特流数据被转换为字符数据传递给CPU。而Visual Basic 是一种可视化的,面向对象和采用事件驱动方式的结构化高级程序设计语言,可用于开发Windows 环境下的各类应用程序。Visual Basic的版本分为普及版,企业版,专业版。可以进行串口通信程序开发的串行通信组件包含在企业版及专业版中。
Visual Basic企业版及专业版中提供了串行端口控制mscomm来为应用程序提供串行通信。该控件屏蔽了通信过程中的底层操作,可以设置、监视mscomm控件的属性和事件,结合Timer控件即可完成对串行口的初始化和数据的输入输出工作。由于Visual Basic的mscomm控件不会主动出现在工具箱中,因此可在Visual Basic工程界面中的工具箱中空白处单击鼠标右键选择部件选项,在弹出的对话框中选择添加Microsoft Comm Control 6.0 控件。
mscomm控件的主要属性如下:
(1)Commport 设置并返回通讯端口号。端口号可以设置为1~16的任何数,如mscomm.Commport=2表示设置当前通讯端口为COM2。
(2)Setting 设置并返回波特率、奇偶校验、数据位、停止位。格式为mscomm.Setting=String。String是一个包含四部分的字符串:第一部分为波特率;第二部分为奇偶校验,N表示不校验,M表示符号校验,E表示偶校验,O表示奇校验,S表示空格校验;第三部分为数据位数,其可选值为4,5,6,7,8;第四部分为停止位位数,其可选值为1,1.5,2。例如Setting属性的缺省值为"1200,N,8,1"。该属性中各含义如下:
波特率:是一个衡量通信速度的参数。它表示每秒钟传送的bit的个数。例如200波特表示每秒钟发送200个bit。当提到时钟周期时,就是指波特率。例如如果协议需要9600波特率,那么时钟是9600Hz。这意味着串口通信在数据线上的采样率为9600Hz。
数据位:是衡量通信中实际数据位的参数。当计算机发送一个信息包,实际的数据不会是8位的,标准的值是5、7和8位。如何设置取决于要传送的信息。比如,标准的ASCII码是0~127(7位)。扩展的ASCII码是0~255(8位)。如果数据使用简单的文本(标准 ASCII码),那么每个数据包使用7位数据。每个包是指一个字节,包括开始/停止位,数据位和奇偶校验位。由于实际数据位取决于通信协议的选取,术语"包"指任何通信的情况。
停止位:用于表示单个包的最后一位。典型的值为1,1.5和2位。由于数据是在传输线上定时的,并且每一个设备有其自己的时钟,很可能在通信中两台设备间出现了小小的不同步。因此停止位不仅仅是表示传输的结束,并且提供计算机校正时钟同步的机会。适用于停止位的位数越多,不同时钟同步的容忍程度越大,但是数据传输率同时也越慢。
奇偶校验位:在串口通信中一种简单的检错方式。有四种检错方式:偶、奇、高和低。当然没有校验位也是可以的。对于偶和奇校验的情况,串口会设置校验(数据位后面的一位),用一个值确保传输的数据有偶个或者奇个逻辑高位。例如,如果数据是011,那么对于偶校验,校验位为0,保证逻辑高的位数是偶数个。如果是奇校验,校验位位1,这样就有3个逻辑高位。高位和低位不真正的检查数据,简单置位逻辑高或者逻辑低校验。这样使得接收设备能够知道一个位的状态,有机会判断是否有噪声干扰了通信或者是否传输和接收数据是否不同步。
(3)Portopen 设置并返回通讯端口的状态,也可以打开和关闭端口。
(4)Input 从接收缓冲区返回和删除字符。该属性在运行时为只读。
(5)InputLen 设置并返回每次Input属性从接收缓冲区中读取的字符数。InputLen属性的缺省值为0。设置InputLen为0时,Input将读取接收缓冲区的全部字符。
(6)Output 向传送缓冲区写数据。要传送的数据可是文本数据或二进制数据。
(7)CommEvent 返回最近的通讯事件或错误。只要有通讯错误或事件发生错误时就会产生Oncomm事件。CommEvent属性中存有该错误或事件的数值代码。
4单片机开发串口通信程序设计
4.1 MCS-51单片机的串口结构与功能
MCS-51单片机的主要结构包含以下几个部分:
1、中央处理器(CPU):MCS-51的CPU能处理8位二进制数或代码。
2、内部数据存储器(RAM):8051芯片共有256个RAM单元,其中后128单元被专用寄存器占用,能作为寄存器供用户使用的只是前128单元,用于存放可读写的数据。因此通常所说的内部数据存储器就是指前128单元,简称内部RAM。地址范围为00H~FFH(256B)。是一个多用多功能数据存储器,有数据存储、通用工作寄存器、堆栈、位地址等空间。
3、内部程序存储器(ROM): 8051内部有4KB的ROM,用于存放程序、原始数据或表格。
4、定时器/计数器:8051共有2个16位的定时器/计数器,以实现定时或计数功能,并以其定时或计数结果对计算机进行控制。定时时靠内部分频时钟频率计数实现,做计数器时,对P3.4(T0)或P3.5(T1)端口的低电平脉冲计数。
5、并行I/O口:MCS-51共有4个8位的I/O口(P0、P1、P2、P3)以实现数据的输入输出。
6、串行口:MCS-51有一个全双工的串行口,以实现单片机和其它设备之间的串行数据传送。该串行口功能较强,既可作为全双工异步通信收发器使用,也可作为移位器使用。RXD( P3.0)脚为接收端口,TXD(P3.1)脚为发送端口。
7、中断控制系统:MCS-51单片机的中断功能较强,以满足不同控制应用的需要。共有5个中断源,即外中断2个,定时中断2个,串行中断1个,全部中断分为高级和低级共两二个优先级别。
8、时钟电路:MCS-51芯片的内部有时钟电路,但石英晶体和微调电容需外接。时钟电路为单片机产生时钟脉冲序列。系统允许的晶振频率为12MHZ。
MCS-51单片机内部有一个全双工的串行通信口,即串行接收和发送缓冲器(SBUF),这两个在物理上独立的接收发送器,既可以接收数据也可以发送数据。但接收缓冲器只能读出不能写入,而发送缓冲器则只能写入不能读出,这个通信口既可以用于网络通信,亦可实现串行异步通信,还可以构成同步移位寄存器使用。如果在串行口的输入输出引脚上加上电平转换器,就可方便地构成标准的RS-232C接口. 该串行口功能较强,既可作为全双工异步通信收发器使用,也可作为移位器使用。RXD( P3.0)脚为接收端口,TXD(P3.1)脚为发送端口。
MCS-51单片机串行口寄存器结构图7所示。SBUF为串行口的收发缓冲器,它是一个可寻址的专用寄存器,其中包含了接收器和发送器寄存器,可以实现全双工通信。MCS-51的串行数据传输很简单,只要向发送缓冲器写入数据即可发送数据。从接收缓冲器读出数据即可接收数据。其内部结构如下:

图7 MCS-51单片机串行口寄存器结构
4.3单片机程序设计
在设置好串口工作方式与波特率的基础上,把PC机发送的数据传给数码管可以显示发送的数据,并且回传给PC机。通过观察数码管的显示与回传的数据进行比较是否一致就可以验证串口通信的正确性。
通过P3.3、P3.4口的位选控制2位数码管显示数据。
主要程序流程图:
