王向玲,石晓玲
(吕梁学院 矿业工程系,山西 离石 033001)
单片机原理及应用课程是机械电子工程专业的一门实践性极强的专业课,该课程与实际工程应用关系非常紧密,但课程知识点繁多且抽象,学生理解起来相对吃力,传统的“教师演示学生做”或者进行一些验证性实验远远不能满足应用型人才的培养目标,故引入新型的实践教学模式非常迫切.借助于Proteus软件联合Keil进行虚拟仿真,然后进行硬件平台搭建的模式,教学效果良好,学生参与度高,积极性强,缩短了开发周期、提高了开发效率[1-4],具有很好的工程应用价值.
随着单片机在工业自动化、智能终端、智能仪表、通信管理等领域的广泛应用和计算机网络技术的普及,单片机与PC机之间的通信使用较多[5]132-133.本文主要介绍串行通信电路设计的虚拟仿真环节.
COMPIM作为Proteus虚拟环境中的串行接口组件,可实现虚拟仿真平台与实际PC机的直接交互.传统的同一PC机上单片机与PC机的串行通信时,COMPIM组件和串口调试助手都需各占用一个物理串口,且采用交叉线连接两串口进行调试.而对于目前大多数PC机无物理串口的情形,本设计采用虚拟串口驱动软件VSPD将COMPIM组件和串口调试助手两个串口虚拟连接,同时引入虚拟示波器实时监测电路的运行状态,实现了同一台PC机上单片机与PC机的串行通信[6].
本文设计的串行通信电路适用于目前大多数无物理串口的PC机.PC机与单片机的通信,实质上是串口调试助手与Proteus中单片机仿真系统的通信,通过在Proteus仿真系统中添加单片机AT89C52、数码管、示波器和COMPIM组件等组成串行通信电路,电路图如图1所示.
图1 串行通信仿真原理图
共阴极数码管位选通过P2口实现,借助Proteus VSM中的4通道示波器分析数码管位选信号.段选通过P0口实现,注意P0口使用时必须接上拉电阻.PC机串行口输出电平是标准RS232电平,而单片机输出电平是TTL电平,若二者采用物理串口通信则需借助芯片MAX232实现电平转换.本文设计的通信电路采用虚拟串口,电平转换通过自身携带MAX232的COMPIM组件实现,故单片机通过COMPIM组件直接与PC机相连[7].
该电路的功能为:单片机接收PC机串口调试助手发送的四位数字并实时显示在4位数码管上;按下K1按键,单片机通过串口组件COMPIM将字符串发送给PC机并显示在串口调试助手的数据接收区.
依据模块化编程思想,编写主程序和子程序,其中子程序主要包括串口初始化函数、外部中断和串行口中断子程序.
串口通信时,波特率选择由Timer1生成,串口初始化函数需设置串行口控制寄存器SCON、Timer1工作模式寄存器TMOD、电源管理寄存器PCON(SMOD控制波特率是否倍增)、Timer1计数初值TH1和TL1、TR1(Timer1的启动开关)[8]109-116.具体值设为如下:
(1)串行口工作模式选择波特率可变的Mode1,即SCON=0x50;
(2)Timer1工作模式选择具有自动重装初值的Mode2,即TMOD=0x20;
(3)PCON=0x00,即SMOD=0,波特率不倍增.
(4)TH1、TL1的计算依据式1:
(1)
波特率设为9 600 bit/s,晶振为11.059 2 MHz,SMOD=0,可求得TH1=TL1=0xFD.
(5)TR1=1以启动Timer1.
中断程序包括外部中断0和串行口中断子程序[9-11].外部中断0实现单片机向串口调试助手发送字符串,串行口中断实现串口调试助手向单片机发送数字,流程图如图2所示.
图2 中断程序流程图
主程序首先调用串口初始化函数,之后进行中断初始化,包括总中断开关EA=1,外部中断0开关EX0=1及其触发方式IT0=1,串行口中断开关ES=1.然后进入while循环先对数码管断码清零达到消隐的目的,接着将位码发送至P2,段码发送至P0,位码发送时间间隔4ms,程序流程图如图3所示.
选择COM3和COM4为虚拟串口,分别将COM3、COM4分配给串口调试助手和COMPIM组件,调试前采用虚拟串口驱动程序VSPD连接COM3和COM4.
串口调试助手和COMPIM组件作为收发双方,串口通信协议参数的设置需完全一致,否则会出现乱码现象.具体均设为:波特率9600bit/s、无奇偶校验位、数据位8位、停止位1位.
将程序下载到Proteus单片机中并运行,打开串口调试助手向单片机发送数字3245,数码管上显示数字3245.按下电路中的K1按键,在串口调试助手接收区可收到单片机发送的字符串“基于Proteus的单片机串行通信电路设计及仿真!”,具体结果如图4所示.
仿真结果主要通过读取IO口、寄存器数据进行分析,在Proteus环境中常用方式有两种:一是通过debug下的watch window选择性添加分析对象进行数据读取;二是通过CPU下的Registers窗口读取数据[12]36-47.本设计采用watch window窗口分析P0、P2口数据,如图5所示,(a)、(b)、(c)、(d)图分别为第1、2、3、4位数码管显示3、2、4、5时的P0、P2口数据.
图5 P0、P2口数据
由图1知P2.0~P2.3分别对第1~4位数码管进行位选,对于共阴极4位数码管位选信号分别为0xFE、0xFD、0xFB、0xF7,与图5中(a)、(b)、(c)、(d)中P2口数据一致.根据共阴极数码管段码表分析知显示3、2、4、5时的数分别为0x4F、0x5B、0x66、0x6D,与图5中(a)、(b)、(c)、(d)中P0口数据一致.
此外,添加Proteus中的虚拟仪器示波器,连接至P2.0~P2.3如图1所示,点击仿真按钮Play会自动弹出示波器仿真界面;也可选择Debug再点击Digital Oscilloscope[13-15],出现右图6所示波形图.
图6 P2.0~P2.3电压变化波形图
P2.0~P2.3数据周期性重复即对4位数码管周期性位选,以1个周期波形为研究对象,通过游标测量相邻两点间的时间差均为4.3 ms,与程序设计中位码间隔时间4 ms吻合.其次,由该图知P2口低4位数据分别为1 110、1 101、1 011、0 111,与图5中P2口数据一致.
单片机实践教学中引入虚拟仿真技术与硬件平台相结合的模式,提高了学生学习积极性,同时,单片机开发能力和综合应用理论知识解决实际问题的能力也得到提升.本文的串行电路设计及仿真阐述了同一台PC机上单片机与PC机串行通信的2种实现方式,针对无物理串口PC机的通信,采用虚拟串口驱动软件VSPD将单片机的串行接口组件COMPIM和串口调试助手虚拟连接;然后以Proteus仿真软件为平台,设计了串行通信电路,设置了串行通信协议,联合Keil软件调试后实现了同一台PC机上单片机与PC机的串行通信.
学生在单片机实际应用系统开发的虚拟仿真环节中,还可借助Proteus中的watch window窗口、Registers窗口、示波器、探针等工具实时观察程序执行中信号的变化,有助于理论知识的理解以及必要的数据分析,且为后续的硬件电路搭建提供保障.