黄 勇
作为自动控制技术核心的单片机具有体积小、功能强、成本低、应用灵活等优点。通过这几年《单片机原理与应用》课程的教学,笔者对于如何采用适当的教学方法提高该课程的教学效果有如下一些体会。
一、传统教学方法存在的弊端
传统的学科教学法以单片机教材的知识结构为主线,强调理论知识体系的完整性、严密性。把单片机知识系统按教材的章节分成硬件结构、指令系统、软件编程、系统的扩展和各种外围器件的应用,授课过程也是按这一顺序实施的。一学期下来,教师感觉教学难度很大,学生也普遍感到这门课程难学。
作为技校生,他们以前没有接触过有关计算机结构方面的知识,一开始就去学习单片机硬件结构,要理解控制器、运算器、存储器、总线、地址的作用和相互关联并不是一件简单的事。实际结果也是不管教师用尽什么样的形象比喻来讲解,到头来学生们还是一头雾水。
目前各技工学校采用的单片机教材基本上都是以单片机结构为主线来讲述单片机原理与应用,在教材的编排上没有考虑技校生的接受能力,使得学生在学习的过程中不断遇到挫折,于是问起学生对学习单片机课程的感受时也只有“生涩难懂”四个字了。
二、对单片机课程教学方法的改进
我们的具体做法是:改过去的以理论教学为主为现在的以实验项目为主,将理论与实验项目有机地结合起来,打破课堂教学按教材章节顺序进行的惯例,以实验项目作为实施教学的依据。在教学中,首先分析课程的知识目标和能力目标,将整个课程划分为若干个具有递进性和连贯性的“项目”。每个项目都是一个完整的单片机应用系统的开发,都包含了教学大纲所要求的相应知识点,由浅入深地把单片机的软、硬件知识和单片机的应用技能渗透到各实验项目的具体实施过程中。
三、分步骤讲授《单片机原理与应用》的具体方式及案例
笔者在讲授《单片机原理与应用》时主要分成以下六个步骤:
第一步:根据《单片机原理与应用》课程的知识体系,前期花大力气开发出了一块与教学大纲相适应的实验板,具体的实验项目有:单片机最小应用系统(控制一盞灯的亮、灭)、流水灯程序设计、百秒计数器程序设计、抢答器程序设计、音乐演奏程序设计、电子钟程序设计等,这些实验项目基本涵盖了单片机课程的主要内容。
第二步:以每次实验项目为教学内容编写实用的校本讲义。该类项目教学要求课程内容与课程实施的手段相吻合,因此编写具有针对性的校本讲义显得尤为重要。
讲义内容包括:实验目的、编程要求、硬件电路说明、应用程序设计、程序调试(利用Protues仿真软件,其电路见图1)、具体电路的焊接及程序的写入等。
第三步:课堂上围绕当次的实验项目内容,讲清涉及的硬件、指令、编程方法及该项目的学习目的,要求学生对各知识点达到基本理解的程度。
第四步:在实验室利用Protues仿真软件对学生编写的程序进行仿真、调试。
Protues仿真软件是一款最新的EDA工具软件,相对于以往的EWB(Electronics Work Bench)等仿真软件具有一系列非常突出的优点。它不仅具有其他EDA工具软件的一般电路的仿真功能,还能仿真单片机及其各种外围器件。在Protues中绘制好原理图后,调入已编译好的目标代码文件:*.HEX,就可以在Protues的仿真电路图中看到模拟的实物运行状态和过程。
第五步:在实验室指导学生焊接具体的实验电路并利用烧录器写入程序,观察实际的单片机实验板的运行效果。
第六步:对该实验项目进行总结,并布置一个与所学项目相似的单片机应用系统的设计任务,让学生独立完成程序的编写,并要求在Protues上调试通过,以检验学习效果。
四、分步骤讲授的案例——流水灯设计项目
1.项目确定
开发一个流水灯产品。
2.项目分析
师生共同分析该流水灯电路的结构特点、电路焊接要求及完成该项目的工作步骤。教师引导学生在教材或其他参考书中查找相关程序和硬件电路图的资料,并讲解、演示实验过程中要用到的编程器,以及Protues仿真软件等仪器设备的使用方法。
3.制定计划
师生共同探究、制定出详细的项目实施计划:
(1)分小组讨论硬件电路图的设计;
(2)教师指导各小组探讨流水灯程序的编写方法;
(3)学生独立用Protues仿真软件校验自己编写的程序;
(4)小组之间交流程序的编写技巧;
(5)各小组完成电路焊接并将程序烧入单片机;
(6)教师检查各小组单片机流水灯产品的焊接工艺和实验的效果。
4.项目实施
在教师的引导和帮助下,学生按照计划在规定时间内完成各阶段的任务,并写出详细的活动记录,记录内容包括硬件电路的焊接、利用Protues仿真软件对所编程序调试和仿真、用编程器将程序写入到单片机中观察到的实际运行效果等。
5.项目评价
教师评价各小组实验项目完成的效果和质量。具体评价内容包括:程序设计的合理性、实验板的焊接工艺、编程器和仿真器使用的熟练程度、学生独立处理问题以及合作交流能力等。
附:流水灯实验项目校本讲义的具体内容
(1)编程要求。流水灯程序:实现8个LED灯的循环点亮, 要求用三种方法实现。
(2)硬件电路。本流水灯实际上就是一个带有八个发光二极管的单片机最小应用系统,即由发光二极管、晶振、复位、电源等电路和必要的软件组成。
从图1中可以看出,如果要让接在P1.0口的LED1亮起来,那么只要把P1.0口的输出变为低电平即可;相反,如果要接在P1.0口的LED1熄灭,就要把P1.0口变为高电平;同理,接在P1.1~P1.7口的其他7个LED的点亮和熄灭的方法同LED1。因此,要实现流水灯功能,我们只要将发光二极管LED1~LED8依次点亮、熄灭,8只LED灯便会一亮一暗地形成流水的效果。由于人眼的视觉暂留效应及单片机执行每条指令的时间都只有几微秒,因此我们在控制发光二极管亮、灭的时候要采用延时程序保持一段时间,否则我们将会看不到“流水”的效果。
(3)应用程序设计。软件两部分组成,硬件电路搭建完后,我们还不能看到流水灯循环点亮的效果,我们还需要告诉单片机怎么来进行工作,即编写程序去控制单片机P1端口各管脚电平的高、低变化,来实现发光二极管的一亮一灭。软件编程是单片机应用系统中的一个重要的组成部分,是单片机学习的重点和难点。实现流水灯的功能可有以下几种软件编程方法。
位控法。这是一种不够灵活但又最易理解的方法,采用顺序程序结构,用位指令控制P1口的每一位轮流输出高、低电平,从而来控制相应LED灯的亮、灭。
循环移位法。在上面的位控法中我们是通过逐个控制P1端口的每一位来实现流水灯效果的,因此程序显得不够灵活。我们可以利用循环移位指令,采用循环程序结构进行编程。在程序一开始就给P1口送一个八位的二进制数01111111,这个数本身就让P1.0先低,其他位为高。延时一段时间后,再让这个数据向高位移动,然后再输出至P1口。这样也可以实现“流水”效果。由于8051系列单片机的指令中只有对累加器ACC中数据左移或右移的指令,因此实际编程中我们应把需移动的数据先放到ACC中,然后将ACC移动后的数据再转送到P1口。(具体程序略)
查表法。上面的两个程序都是比较简单、易懂的流水灯程序,但“流水”花样只能实现单一的“从左到右”或“从右到左”。而采用查表法所编写的流水灯程序,能够实现任意方式的流水效果,只要更改流水花样数据表中的流水数据即可,真正实现各种随心所欲的流水灯效果。
我们首先把要显示流水花样的数据建在一个以TAB为标号的数据表中,然后通过查表指令“MOVCA,@A+DPTR”把数据取到累加器A中,然后再送到P1口进行显示。
(4)项目小结。当上述程序编写好以后,我们需要使用Keil编译软件对其编译,得到单片机所能识别的二进制代码,然后再用编程器将二进制代码烧录到AT89C51单片机中,此时我们就可以看到LED1~LED8的“流水”效果了。
上面程序实现的流水灯功能都比较简单,在对该实验项目进行总结后,布置一个与流水灯项目相似的单片机应用系统的设计任务,让学生独立完成程序的编写及调试。
采用这种实验项目教学法后,我们把理论上深奥枯燥的知识变成了看得见、摸得着的实际单片机应用电路,极大地调动了学生的学习兴趣,取得了明显的教学效果。
(作者单位:广东省中山市高级技工学校)