基于Proteus-Keil联调与项目导向的单片机教学
2018-12-04陈志英
陈志英
(厦门理工学院 电气工程与自动化学院, 福建 厦门 361024)
0 引言
“单片机原理与应用”是电气工程、自动化、电子信息、计算机、机械等工科专业非常重要的基础教学课程,它也是一门知识性、应用性、实践性很强的综合性技术课程。通过该课程,目标是培养具有单片机应用系统软硬件设计、分析、制作和调试能力的实践型及创新型人才[1]。传统的单片机课程教学主要存在三大问题:①“先理论讲解,再动手实验”的教学模式导致“教学—实验”分离、“理论—实践”不同步,不仅使学生理论理解困难,而且感觉枯燥乏味,使初学者感觉入门较难,难以培养兴趣甚至厌学,最终造成该课程教学效果不理想;②实验教学采用统一的单片机实验箱(板),存在硬件电路固定、实验内容固定、学生不能随意更改、程序无法实时仿真调试、与工程实际应用脱节等缺点,很难培养学生的实践动手能力与创造性思维;③缺乏单片机系统化设计的培养,教学中通常将软硬件分离介绍,加上实验采用现成的电路板,基本不涉及硬件设计,大多只完成简单、分块的验证性程序设计,导致学生硬件设计与复杂软件设计能力薄弱,在构建实际的单片机应用系统时缺乏硬件平台搭建与系统软件调试能力,最终造成学生的单片机应用系统综合设计能力严重不足[5]。
近几年,有不少文献提出了“项目式”单片机教学方法和利用Proteus与Keil软件辅助单片机实践教学[2~6].其中,虽有文献讨论Proteus与Keil的教学应用,但少有文献讨论“项目式”教学法与Proteus、Keil的结合教学,更没有涉及实时在线联合调试技术,采用的仿真方法还是传统的用Keil编程编译输出hex文件后加载到Proteus,然后在Proteus中验证程序的对错,不能实时在线仿真调试,即不能实现单步运行、断点设置等在线调试功能。
鉴于传统教学模式存在的较大不足,以及现有的新型教学模式又存在不能实时在线调试的缺点,本文提出一种以基于Proteus与Keil联调及项目导向的新型单片机教学模式。它的核心思想是将单片机课程教学围绕具体应用项目展开,使项目设计贯穿整个教学过程,授课时将每个应用项目分解为进阶式的多个子模块,按照模块化思路讲解相关硬件软件设计知识点,并采用Proteus与Keil软件构成虚拟实验平台,实现“教师边讲边指导、学生边学边实践”的教学形式,达到理论与实践教学的同步。
这种教学形式对学生来说,增强单片机学习的直观性和真实感,激发他们的学习兴趣与积极主动性,提高他们的学习成就感,最终在整体上提高学生的单片机综合设计能力,使教学效率和教学质量得到大幅度提升;对教师来说,在普通机房或教室(学生自带笔记本电脑)授课,不依赖于实验室及单片机开发板,即可实现理论与实践结合,并能及时了解学生学习单片机时存在的问题与不足,做到及时和有针对性的辅导,提高与巩固教学效果;对学校来说,用虚拟的环境代替了物理的实验箱,增强了实践教学的便利性,节省了大量的硬件资源,并省去了大量的物理设备维护工作,大大减少了实践教学成本。
本文以“多功能数字电子钟”典型案例具体介绍基于Proteus与Keil仿真联调技术的单片机应用项目设计的教学详细过程。
1 Proteus与Keil联调技术与设置
1.1 Proteus与Keil联调技术
当前,在单片机实践教学中,普遍采用“先在Keil软件中编写源程序,然后编译形成代码,再通过在线烧写器(下载器)载入到单片机教学实验箱(板)中运行看结果”的模式,如图1所示。这种实验方法无法实现程序单步运行、设置断点等实时在线仿真调试功能,存在难以查错与修正等缺点,容易造成学生程序调试能力缺失。而在单片机工程应用开发中,为了调试方便,采用成本较高的系统开发平台,如图2所示,利用PC机上的集成开发环境IDE(Integrated Development Environment)与仿真器对应用程序进行实时在线仿真。但这种模式需要对每块单片机开发板配备相应的仿真器,不适用于实验室教学。
图1 传统的单片机实验方式
图2 常见的单片机应用系统开发平台
Keil是一款常用于单片机设计的集成开发环境软件,支持C语言和汇编程序设计。Proteus是一款可用于设计和开发单片机系统的仿真平台软件,可模拟仿真51、PIC、AVR系列等常用的MCU及其外围电路,支持大量的外围芯片和存储器,并支持与Keil软件的联合仿真调试。由此,利用Keil与Proteus软件可建立虚拟单片机实验平台,如图3所示。
图3 基于Proteus与Keil联调技术的虚拟实验平台
应用程序在Keil中编写,系统硬件由Proteus进行模拟,再利用Keil与Proteus间的软件接口协议可实现将Keil中编写的程序下载到Proteus硬件中进行实时在线仿真调试,运用Keil中的调试工具可观察程序运行的每一步骤与结果。利用这种基于联调技术的虚拟实验平台,学生只需在一台电脑上就可随时随地完成单片机应用系统软硬件设计与调试,而不受实验室地点、开放时间、实验器材等条件约束。
1.2 联调设置
Proteus与Keil软件要实现联调技术,需对两种软件接口及PC机做以下几点设置:
(1) 在Proteus安装目录下将VDM51.dll文件复制到Keil安装目录的C51BIN目录中(如果没有可以自己下载);
(2) 修改Keil安装目录下Tools.ini文件,在[C51]栏目下加入TDRV9=BINVDM51.DLL (“Proteus VSM Simulator”),其中“TDRV9”中的“9”要根据实际情况改写,不要和已有的重复;
(3) 打开Proteus,加载相应的电路和hex文件,在Debug菜单中选中Use Remote Debug Monitor;
(4) 打开Keil,载入MCU的程序,选择菜单Project Option for target “工程名”,在Debug选项中右栏上部的下拉菜单选中Proteus VSM Simulatior,再进入Setting,如果是同一台机器IP名为127.0.0.1,如果不是同一台机器则填另一台机器的IP地址,端口号一定为8000;
(5) 注意,一定要把Keil的工程文件和Proteus的文件放在同一个目录下;完成上述5个步骤,就可以开始调试了,Keil每调试一次,Proteus就会作出相应的动作。
2 “多功能数字电子钟”项目实例
2.1 系统功能要求
为了培养学生的系统及模块化概念,训练学生的单片机应用系统综合设计能力,项目教学实例应包括基本的输入模块(键盘)、输出模块(LCD或LED显示)、具体应用功能模块(例如电子钟、温度测量监控、电压电流测量等)。因此,“多功能数字电子钟”系统要求实现以下功能:
(1) 系统能实现时间的正确走时,并在LCD上正确显示日期、时间;
(2) 系统能实现对周围环境的温度测量,并在LCD上正确显示温度值;
(3) 系统能通过按键对日期、时间进行设置调整;
(4) 系统具有闹钟、秒表、星期显示、指示灯等附加功能。
2.2 系统硬件设计
根据“多功能数字电子钟”的功能要求,系统硬件可分为5大模块:单片机(选择51单片机AT89C51)、LCD1602显示模块、DS18B20温度测量模块(选择)、DS1302时钟模块(时钟模块也可采用单片机的定时器实现)、键盘与LED指示灯模块。系统整体结构如图4所示。
图4 “多功能数字电子钟”系统框图
打开Proteus的ISIS软件,进行原理图绘制,添加51单片机及外围电路元件并连接,电路如图5所示。LCD1602与单片机采用并行接口,将51单片机的P0口引脚P0.7-P0.0连接到LCD1602的数据引脚D7-D0,将P2口的P2.2、P2.1、P2.0分别连接到LCD1602的控制引脚E、RW、RS。DS18B20与单片机采用单总线接口,将51单片机的P3.4引脚连接至DS18B20的数据引脚DQ。DS1302与单片机采用I2C接口,将51单片机的P3.7、P3.6、P3.5引脚分别连接至DS1302的数据引脚I/O、时钟引脚SCLK及复位引脚RST。51单片机P2口的高4位分别连接4个独立式按键,P1口分别经驱动芯片74LS245连接8个发光二极管。
图5 “多功能数字电子钟”硬件电路原理图
2.3 系统软件设计
系统软件采用模块化思路设计,分别包括:LCD1602显示子程序、DS18B20温度测量子程序、DS1302时间读取子程序、按键子程序及系统主程序。设计时,将各个模块子程序单独编程、调试,每个模块调试成功正确无误后,最后编写系统主程序,进行各个模块的综合与联调,实现系统所有功能的正确运行。系统软件均在Keil C环境下编写、编译及调试。系统主程序、DS18B20子程序、按键子程序流程如图6所示。
(a) 系统主程序 (b)按键子程序图6 系统主程序、DS18B20子程序、按键子程序流程图
C语言编程时,根据模块化设计思路,建议学生应学会合理编写自定义头文件(.h文件),对系统使用到的I/O端口进行预定义可使系统的可读性、可移植性大幅度提高,如此,当系统硬件端口发生变化时,只需修改I/O端口预定义文件,而不需要修改通篇程序里所涉及的端口。下面给出本系统对I/O端口定义文件ioset.h的部分参考程序:
//LCD1602端口定义
sbit RW=P2^1;
sbit RS=P2^0;
sbit E=P2^2;
#define LCD_data P0
//DS18B20端口定义
sbit DQ=P3^4;
//DS1302端口定义
sbit 1302_RST=P3^5;
sbit 1302_SCLK=P3^6;
sbit 1302_IO=P3^7;
2.4 Keil与Proteus联合调试
将设计的项目程序在Keil μVision4集成开发环境上编译调试,生成相应的HEX文件,并按照上文中的“联调设置”步骤设置后,就可以开始系统实时在线仿真调试了,联调界面如图7所示。联调支持所有的单步运行、断点设置等调试工具,Keil里每执行一步都可在Proteus里看到相应的单片机引脚高低电平变化、LCD显示等现象,与此同时,用户也可在Proteus中模拟硬件变化,如采用鼠标点击按键元件模拟按键按下,点击DS18B20元件的“―”和“+”使温度减小与增加。
图7 Keil与Proteus联调界面
2.5 系统运行结果
系统采用Keil与Proteus联合仿真调试后,系统能正确可靠运行,走时准确,对系统按键、温度等进行模拟按下或改变时,系统均能做出相应变化,LCD上均能正确显示日期、时间、温度等信息,其运行结果如图8所示,当改变DS18B20的温度值时,图8(a)、(b)分别正确显示了改变的温度值。
(a)温度为27.00°C时的系统运行结果
(b)温度为29.00°C时的系统运行结果图8 系统运行结果图
3 结语
经过几年的教学实践证明,采用基于Proteus与Keil联调及项目导向法进行单片机教学能形象地让学生亲历从系统硬件电路设计、软件程序编写到实时在线仿真调试的完整系统设计过程,收到了良好的教学效果,提高了整体教学质量。这种基于具有实时在线仿真调试功能的软硬件虚拟仿真平台的项目式教学使学生在程序设计与调试能力方面得到很好的锻炼,极大地激发学生的学习兴趣,调动了学生的主观能动性,增强了学生独自发现问题与解决问题的能力,从而最终大幅度提高了学生的综合设计能力和创新能力。基于Proteus与Keil联调的项目导向教学相对于传统的单片机教学优势明显,解决了传统教学存在的缺陷,在高校的单片机教学中应大力的宣传与推广,本文教学实例“多功能数字电子钟”项目涵盖的基本模块较多,大部分的单片机教学内容都可在该应用实例上进行教学或扩展教学,也可供高校同行或学生进行参考。