首页 -> 2007年第8期

关于单片机教学仿真软件的应用

作者:张 弘 黄志先




  摘要:文章针对各高校单片机实验设备数量少、学生实践机会少的问题提出了采用软件仿真教学和实验的方法,并列举了一些应用实例。
  关键词:单片机;仿真;教学;WAVE6000
  
  单片机原理相关课程早已经成为许多高职院校的工科电气类、电子类、计算机等相关专业的专业必修课。该课程具有很强的综合性、实践性。内容涉及单片机硬件结构和软件使用,其中包括单片机的内部结构、指令系统、资源扩展、接口技术,单片机应用系统的硬件结构,开发过程及手段等。要让学生学好这门课程,除了应该重视理论教学之外还必须非常重视实践教学,通过大量的实践课来提高学生的学习兴趣。然而,很多高职院校单片机实验设备数量有限,无法完全满足学生的实验要求,只能解决基本的实验问题。而解决这个问题的一个既行之有效,又经济快速的方法就是采用仿真软件进行教学和实验。这不需要大量的单片机实验设备,只需要普通电脑就可以解决。而计算机室在每个学校的数量要远多于单片机实验室。因此,采用软件仿真教学,硬件配合实验的方法可以大大提高学生接触“单片机”的机会,有助于学生分析问题和解决问题。
  常用的单片机仿真软件有WAVE6000和Medwin。其中WAVE6000软件,中文/英文界面可任选,简单易懂、操作方便,不用仿真器也能模拟运行用户程序。WAVE6000软件集成了编辑器、编译器、调试器以及源程序编辑、编译、下载、调试。WAVE6000软件支持ASM(汇编)、PLM、C语言多模块混合源程序调试,在线直接修改、编译、调试源程序。如果源程序有错,可直接定位错误所在行。在源程序窗口,WAVE6000软件可以显示单片机内部CPU及各个存储器的内容,点击变量就可以观察此变量的值,方便快捷。WAVE6000软件的书签、断点功能可快速定位程序,为编写、查找、比较程序提供帮助。在学生学习单片机内部硬件结构和指令系统时,使用仿真软件教学比使用实验箱教学更有效果。WAVE6000软件在教学中较为常用,在教学中它主要能起到以下作用。
  (一)仿真软件可以将CPU及各存储器的内容以具体的形式进行展示,让学生对存储器结构及程序、数据存放方式有更深的认识。
  计算机执行命令时,识别的代码是机器语言,也就是二进制代码。而学生编程的时候采用的却是汇编语言或更高级语言。初学者在这一点上往往难以理解。但是利用WAVE6000仿真软件,可以清楚地看到程序存储器里的内容,同时对于一些伪指令的使用方法及意义有所了解。另外,单片机的七种寻址方式,也可以通过仿真软件的演示让学生进一步掌握,特别是寄存器间接寻址、变址寻址这些较难理解的寻址方式,通过编写一些简单的实例,运行程序后,演示CPU及各存储器的内容,便一目了然。例如:
  ORG 0010H
  MOV 20H,#30H
  MOV R0,#20H
  MOV A,R0
  MOV A,@R0
  当程序进行汇编后,可以从CODE窗口展示程序的内容,可看到从程序存储器0010H单元开始,依次存放,75H、20H、30H、78H、20H、E8H、E6H,这些便是程序编译后产生的程序代码,也是计算机所识别的机器语言。例如75H表示立即数寻址,20H表示地址,接着的30H即表示立即数。让学生看到了机器语言和汇编语言的不同,体会到了“语言”在计算机技术里的作用,更加了解单片机存放程序的形式,了解了伪指令的意义,类似的伪指令如DB,DW的意义也可以演示出来。同时,执行WAVE6000软件中的“单步”指令,观察A、R0和DATA窗口20H单元中的内容变化,可以将寄存器寻址方式和寄存器间接寻址方式区别开来。另外WAVE6000独创的控制文件方式的反汇编功能,可以将机器码反汇编成工整的汇编语言,通过控制文件可以定义程序中数据区、程序区、无用数据区,还可将一些数据、地址定义成符号,便于阅读。
  (二)仿真软件可以演示指令的执行的过程,对学习控制及转移指令特别有帮助
  在程序编译后,可以执行WAVE6000软件中的“单步”指令,同时可以在软件下方的状态栏中观察程序计数器PC指针的变化。即采用“单步”运行,可看到指针从第一句程序开始运行,每执行一句程序PC的值会自动增加,而增加的数量也就是所执行语句占用的字节数,当执行到跳转指令时,指针变指向目的程序,而PC的值也会显示为目的程序的地址。控制及转移指令编程中经常使用,是构建循环结构或分支结构必不可少的指令,在指令学习中是个难点重点,学生对此非常头疼。在WAVE6000软件的帮助下,学生通过全程观察程序的执行过程,深刻地理解控制及转移指令的作用,对提高学习效率和学习效果很有帮助,这甚至比即使使用真正的单片机设备实验教学效果还要好。
  (三)仿真软件,可以演示指令的执行情况,结果,有助于学生理解指令,加强指令的记忆。
  PSW寄存器包含了各种程序状态的信息,在程序执行的过程中,存放着指令运行的某些结果。我们可以利用一些简单的程序,如算术运算程序,跳转程序等通过仿真软件演示对标志位的影响。而堆栈指令通常用来保护现场,那么究竟是怎么保护?保护的数据又存放在什么位置?“先进后出,后进先出”的原则又是怎么体现?SP又起到什么作用?以上问题我们可以通过简单的PUSH和POP指令进行演示,并从SFR窗口和数据窗口中观察SP和相关存储单元的内容变化。这也是软件教学的突出优点。
  (四)仿真软件可以帮助编写程序
  在软件的外设菜单中,可以对定时器/计数器的工作方式进行定义,并可以生成相应的汇编/C语言,对于采用中断、串行口的程序,可以选择相应的选项,辅助生成中断初始化程序。
  另外,在大部分单片机程序中,常常用到延时程序。延时程序分为软件延时和硬件延时,其中软件延时是通过执行一个具有固定延迟时间的循环程序来实现延时的,编写简单,但在计算方面较为麻烦,而且修改循环次数后需要重新进行时间的计算。但是,如果利用WAVE6000我们就可以很快地知道软件延时的时间。编写程序如下(设单片机的晶振频率为12MHZ):
  MOV R6,#0FFH
  LOOP2:MOV R7,#0FFH
  LOOP1:NOP
  NOP
  DJNZ R7,LOOP1
  DJNZ R6,LOOP2
  SJMP $
  编译后,将光标移至SJMP $语句的开始位置,然后执行WAVE6000软件的命令“执行到光标处”,执行结束后,可以在下方的状态栏中看到执行的时间为260.886ms。由此我们可以推算出,如果晶振频率为6MHZ,则该程序延时的时间就变为521.772ms。可以通过更改循环次数和循环范围来增加或减少时间,并执行程序便很快地知道延时的时间。其他类似的程序,比如采用定时器编写的延时程序也可以通过此种方法来了解延时时间,提高延时的精度。这是教学软件给编程者提供的一个便利。
  (五)仿真软件,可以加强学生的程序编写能力和调试能力。
  对于语法上的错误,编译后给出错误代码,根据提示的内容,并结合所学的知识进行修改,也可以采用跟踪、设置段点等方法进行局部调试。并通过软件指示并结合所学的知识进行修改后,正确的程序能让学生很有成就感。对于初学者仿真软件的这个功能可以提供练习指令的机会,而对于进行大中型程序编写者,仿真软件的这个功能又可以替他们把关。这也是教学软件的一大优越性。
  单片机是一门软件和硬件知识综合的课程,我们需要不断改进教学方法,丰富教学手段来提高学生学习的兴趣。计算机软件教学是对理论教学和普通实验教学的补充和强力的支持,在教学要求越来越高和教学手段日益丰富的今天,它们之间已形成了互相辅助,互相补充,又相互依存的关系,我们只有正确认清它们之间的关系,并适当地运用各种教学手段,才能较好地完成单片机教学任务,达到既定的教学目标,取得较好的教学效果。在单片机教学的过程中,适当地引入仿真软件进行教学及实验,已成为提高学生学习效率,提高编程和调试能力,开拓学生思路的行之有效的教学手段。
  作者简介:
  张弘(1980—),广西大学电气工程系在读电气工程硕士,广西水利电力职业技术学院助讲,研究方向为电子技术及计算机控制技术。
  黄志先(1978—),广西大学电气工程系在读电气工程硕士,广西水利电力职业技术学院助讲,研究方向为电力行业技能培训及计算机控制技术。