宁志刚,尹军利,李圣,夏云芝
(南华大学 电气工程学院,湖南 衡阳)
单片机原理及应用是理论性和实践性都较强的一门课程。通过该课程的学习,让学生熟悉单片机的内部结构和工作原理,掌握单片机软、硬件设计方法和技巧,提高学生的实践动手能力,为单片机系统开发奠定基础。为了达到这门课程的培养目标,必须重视实践教学环节,构建适合该课程实践培养需求的实验教学模式[1]。单片机实验通常采用实验箱教学方式。实验箱教学模式采用模块连线方式,学生做完实验后往往弄不清楚电路实际接线图[2]。一个实验通常在2个课时内完成。在有限的实验时间内,学生要弄清楚实验工作原理、编写程序代码、调试程序和完成系统调试,相当一部分同学不能按时保质保量完成。虚实结合的实验模式能克服这种实验模式的弊端。虚拟实验不受时间、空间和实验设备的限制,学生可以充分利用课余时间随时随地搭建虚拟的实验电路图、编写和调试程序、完成软硬件联调。虚拟实验是理想化的实验模式,实物实验往往跟这一模式不完全一致[3]。通过实物实验,能够提高学生的调试能力和排除实际故障能力[4]。虚实结合的实验模式能够结合虚拟实验和实物实验的优势,提高实验的教学效果[6]。本文以虚实结合的串行A/D转换实验为例,对虚实结合的实验模式进行探索和实践。
TLC549时序图如图1所示。TLC549具有I/O CLOCK时钟信号和片选两个控制输入端。tsu是下降沿到I/O CLOCK上升沿的最小间隔时间,大约为1.4μs。ten是下降沿到DATA OUT输出数据的最小间隔时间,大约为1.2μs。
图1 TLC549时序图
TLC549是8位逐次逼近式串行A/D转换器。内部包含系统时钟、采样、保持、A/D转换器、数据寄存器及控制逻辑电路。TLC549每25us重复一次“输入—转换—输出”。当片选信号为高电平时,DATA OUT处于高阻态,此时I/O时钟被禁止。当片选信号从高电平跳变为低电平时,前次A/D转换结果的最高有效位MSB(A7)从DATA OUT端输出。在接下来的7个I/O CLOCK周期的下降沿依次输出前次A/D转换结果的后7位(A6~A0),前7个I/O CLOCK周期结束后8位数据已经全部输出。从第4个I/O CLOCK周期的下降沿开始进行本次A/D转换采样,采样持续到第8个I/O CLOCK周期的下降沿。从第8个I/O CLOCK周期的下降沿开始进入保持状态,开始进行本次A/D转换。这时,片选信号必须变为高电平。该高电平至少保持17us,直到A/D转换结束。否则,片选信号从高电平跳变为低电平,引起系统复位。
TLC549串行A/D转换虚拟实验主要包括搭建虚拟实验平台、编写程序代码、程序代码分析、程序调试、软硬件联调等步骤。这部分工作在课前预习实验时完成。
搭建的串行A/D转换虚拟实验平台如图2所示。实验平台主要包括主控模块、TLC549串行A/D转换模块和显示模块。主控模块控制器选用AT89C51单片机。AT89C51的引脚P20、P21和P22分别接TLC549串行A/D转换器的数据输出端SDO、时钟信号SCLK和片选信号。A/D转换器的VREF+接+5V电压,VREF-接地;AIN为模拟信号输入端,外接电压变化范围为0~5V。显示模块由6位数码管、LED驱动芯片74LS245和缓冲器7407组成。6位数码管采用动态显示,由AT89C51的P1口提供段码,P3口提供位选信号。
图2 TLC549串行A/D转换虚拟实验平台
根据TLC549时序图,参照教材中TLC2543串行A/D转换程序代码[6],编写TLC549串行A/D转换程序代码。这里主要介绍关键函数A/D转换函数,其代码如下:
因为TLC549是8位串行A/D转换器,所以A/D转换函数中的n取8。_nop_()是单周期指令。如果单片机的晶振频率是12MHz,运行一条_nop_()指令,需要1us。时钟信号高电平和低电平都采用两条_nop_()指令进行延时,时钟周期信号高电平宽度和低电平宽度都是2us。TLC549进行A/D转换时,高电平至少保持17us。程序中变为高电平后,采用17条_nop_()指令进行延时。ADC函数和AD函数的数据类型是unsigned int,它对应的数据长度是16位。若A/D转换结果是166,对应的二进制数是10100110。下面详细分析A/D转换结果串行输出过程:1)片选信号下降沿,输出A/D转换结果最高位第8位A7(1),再左移1位,输出二进制串变为10。2)第1个时钟下降沿,输出A/D转换结果次高位第7位数据(0)。因为输出数据位是0,输出二进制串不变,还是10。然后左移1位,输出二进制串变为100。3)第2个时钟下降沿,输出A/D转换结果第6位数据(1),即100与0x01进行或运算,输出二进制串变为101。然后左移1位,输出二进制串变为1010。4)第3个时钟下降沿,输出A/D转换结果第5位数据(0)。输出二进制串不变,还是1010。然后左移1位,输出二进制串变为10100。5)第4个时钟下降沿,输出A/D转换结果第4位数据(0)。输出二进制不变,还是10100。然后左移1位,输出二进制串变为101000。6)第5个时钟下降沿,输出A/D转换结果第3位数据(1),即101000与0x01进行或运算,二进制串变为101001。然后左移1位,输出二进制串变为1010010。7)第6个时钟下降沿,输出A/D转换结果第2位数据(1),即1010010与0x01进行或运算,二进制串变为1010011。然后左移1位,输出二进制串变为10100110。8)第7个时钟下降沿,输出A/D转换结果第1位数据(0)。输出二进制串不变,还是10100110。然后左移1位,输出二进制串变为101001100。这时候,A/D转换结果已全部输出,数据长度为9位。因为AD函数的数据长度是16位,9位数据还处于有效数据长度范围之内。最终输出数据还需要进行一次右移操作,输出结果变为8位,对应地输出二进制串为10100110(166)。
利用Keil C51软件对程序代码进行调试,将生成的.hex文件下载到AT89C51处理器当中,进行软硬件联调,运行的结果如图2所示。
实物实验采用浙江天煌科技实业有限公司研制的THGMU-1型多种单片机开发综合实验箱完成。实验时利用实验箱上的TLC549 A/D转换器进行A/D转换实验,将THKL-C51单片机仿真器插到模块的锁紧插座中。采用USB线连接计算机与仿真器,计算机与单片机实验系统之间采用串行通信方式。实验系统的电位器提供模拟量输入,模拟输入电压的取值范围是0~5V左右。调节电位器旋钮,显示值随着变化。旋钮顺时针旋转时,可调电压值增大。模拟量转换成数字量后,采用LED数码管显示数字量。采用8P排线将单片机系统的P1和P3口分别连接8位数码管段选端口JD1和位选端口JD2,8位数码管采用动态显示方式。单片机系统的P20、P21和P22引脚分别连接A/D转换器的DATA、CLK和CS-549,A/D转换器的模拟信号输入端AIN连接电位器的可调电压输出端口。Proteus仿真系统与实验箱单片机系统的位选地址分布不相同。只要修改位选地址,就可将程序代码移植到单片机实验箱实物实验当中。实物实验时,要严格按照实验步骤进行实验。否则,就会出现数据通信拥塞现象。实物实验图如图3所示。
图3 实物实验图
这种虚实结合的单片机实验模式已成功应用于我校单片机实验教学过程当中,是一种成功的实践教学模式。在新冠疫情期间网络在线教学过程当中,学生可先在家中完成虚拟实验,返校后再补做实物实验。这种实验模式发挥了虚拟实验和实物实验的优势,充分考虑学生的学习时间和学习空间,最大限度提高了实验的教学效果,培养了学生的工程实践能力和创新能力。