徐 磊,申红军,蔡亚永
(新疆工程学院 电气与信息工程系,新疆 乌鲁木齐 830091)
流水灯实际上是一个带有八个发光二极管的单片机最小应用系统,即为由发光二极管D1~D8、晶振Xl、电源VCC、单片机AT89C51和程序等组成的系统[1]。其具体硬件组成如图1所示。
图1 硬件电路Fig.1 Hardware circuit
从原理图中可以看出,如果让接在P2.0口的D1亮起来,那么只要把P2.0口的电平变为低电平就可以了;相反,如果要接在P2.0口的D1熄灭,就要把P2.0口的电平变为高电平;同理,接在P2.1~P2.7口的其他7只发光二极管点亮和熄灭的方法同D1。因此,要实现流水灯功能,只要将发光二极管D1~D8依次点亮、熄灭,8只发光二极管便会一亮一暗的做流水灯了。在此还应注意一点,由于人眼的视觉暂留效应以及单片机执行每条指令的时间很短,在控制二极管亮灭的时候应该延时一段时间,否则就看不到“流水”效果了[2]。
单片机的应用系统由硬件和程序组成,上述硬件原理图搭建完成上电之后,还不能看到流水灯循环点亮的现象,要实现流水灯循环点亮,还要告诉单片机该怎么进行工作,即编写程序控制单片机管脚电平的高低变化,以实现发光二极管的一亮一灭。下面以8个发光二极管循环点亮来介绍两种C语言程序的编程方法。
1)位控法
位控方法采用顺序程序结构,用位指令控制P2口的每一个位输出高低电平,从而来控制相应发光二极管的亮灭。程序如下:
由上述程序得知:8个发光二极管循环点亮是通过逐个控制P2端口的每个位来实现的,因程序编制起来繁琐。所以程序结构显得较为复杂,而且程序编译后,占用的存储空间也比较大,上面的程序编译后,占用100 Byte存储空间。
一是操作过程:依有限元分析方法的主要思想,将待输入的物理状态参数作为已知量,根据分析计算的目标设定相关边界条件参数和规定各物理条件状态,通过压力求解器求解计算内流体模型的内流场压强p、速度v、温度t等未知量。
2)循环移位法
循环移位法利用循环移位指令,采用循环程序结构进行编程。在程序一开始就给P2口送一个数,这个数本身就让P2.0先低,其他位为高,然后延时一段时间,再让这个数据向高位移动,然后再输出至P2口,实现“流水”效果。具体编程如下所示,
上述两种方法编写的程序,经软件仿真和硬件开发板上测试验证都可以实现8为彩灯循环点亮的目的。但是采用循环位移发编写的程序,实现向右循环点亮后又向左循环点亮的效果,是第1种方法的2倍,但是经编译后的代码,占用90Byte的存储空间[3]。
表明在软件开发过程中,采用合理的编程方法和算法结构,可以提高代码的效率,节省单片机资源元件的存储空间。
1)Proteus仿真调试
采用Proteus仿真时,分以下几个个步骤进行:
①启动Proteus仿真软件
双击“isis”图标,出现isis操作页面。
②搭建单片机系统仿真电路
分“器件选取”、“器件放置”和“电路连接”三步进行操作。③创建和导入ASM源文件
进入菜单栏,选择“Source”下“Add/Remove Source files…即弹出“Add/Remove Source Code Files”对话框。再点击“New”按键,弹出“New Source Files”对话框,即可以创建(只在文件名栏目输入一个文件名,后缀为ASM)或导入ASM源文件。确 定 后,“Add/Remove Source Code Files”对 话 框 中“Source Code Filename"栏目即有ASM源文件名及路径,然后在“Code Generation Tool”栏目中选择“ASEM51”,最后点击“OK”按键,即完成了创建和导人ASM源文件。此后“Source”下即可以看到相应的ASM源文件。
④编译ASM和导入HEX文件
编译ASM文件的前提是已导人ASM文件,启动编译的方法有两种:①进入菜单栏,选择“Source"下“Build All”即弹出“BUILD LOG"提示框,提示编译ASM文件的结果。②直接点击器件放置和运行区下方的“运行”按键,若ASM文件内容有变化,即自动对其编译,若问题即弹出“SOURCE CODE BUILD ERRORS”提示框,提示编译ASM文件的结果。编译ASM文件成功后即生成HEX文件,单片机导人HEX文件的方法是,打开单片机器件属性对话框,在“Program Files"栏目里打开文件目录,选择装入HEX文件即可。单片机此后按照该HEX文件的代码运行程序[4-5]。
2)调试方法
进入菜单栏,选择“Debug”下“Start/Resart Debugging”,即进入调试状态,此后可以进行单步运行、全速运行、断点设置等功能操作。
3)Keil C uVision2与Proteus连接仿真调试
安装Keil C uVision2软件及vdmagdi程序
Keil的配置
①进入keil uVision2集成开发环境,创建一个新项目(Project),选定AT89C51单片机的CPU器件,并未该项目加入Keil C源程序(以上所编C语言程序)。
②单机“Projedt菜单/Option for Target”选项或者单击工具栏的“Option for Target”,弹出窗口,点击“Debug”按钮,出现如图2所示的页面。
图2 目标设置选项Fig.2 Goal setting options
在出现的对话框里在右栏上部的下拉菜单里选择“Proteus VSM Simulator”。并且还要点击一下“Use”前面表示选中的小圆点。
再点击“Setting”按钮,设置通信接口,在“Host”后面添上“127.0.0.1”,如果使用的不是同一台电脑,则需要在这里添上另一台电脑的IP地址 (另一台电脑也应安装Proteus)。在“Port”后面添加“8000”。设置好的情形如图3所示,点击“OK”按钮即可。最后将工程编译,进入调试状态并运行。
图3 通信接口设置Fig.3 Communication interface settings
进入Proteus的ISIS。鼠标左键点击菜单“Debug"。选中“use remote debuger monitor”,如图4所示。此后,便可实现Keil C与Proteus连接调试[6]。
图4 Proteus的设置Fig.4 Proteus settings
单击仿真运行开始按钮,能清楚地观察到每一个引脚的电平变化。浅色代表高电平,深色代表低电平。
在Proteus里的仿真结果如图5所示。
图5 Proteus仿真结果Fig.5 The simulation results of Proteus
单片机开发Keil C51与Proteus软件的联合仿真应用于单片机接口技术的课程教学,收到了良好的教学效果,教学质量得到明显提高,学生对单片机学习兴趣明显增强。在教学过程中,每个实例都采用单片机开发Keil C51与Proteus[7-8]软件联合仿真、调试,学生可以直观地看到电路输出状态,比易读懂并理解所调试的程序。这在一定程度上降低了学生学习单片机的难度,也提高了学生学习单片机的兴趣。
[1]刘国光.任务驱动法在单片机教学中的应用[J].高等教育研究学报,2004(4):74-75.LIU Guo-guang.The application of task-driving method in the teaching of single-chip microcomputer[J].Journal of Higher Education Research,2004(4):74-75.
[2]全国电子专业人才考试教材编委会.单片机设计与开发[M].北京:科学出版社,2009.
[3]周国运.单片机原原理及应用(C语言版)[M].北京:中国水利电力出版社,2009.
[4]周灵彬,张靖武.PROTEUS的单片机教学与应用仿真[J].单片机与嵌入式系统应用,2008(1):76-79.ZHOU Ling-bin,ZHANG Jing-wu.MCU Teaching and application of simulation PROTEUS[J].Microcontrollers&Embedded Systems,2008(1):76-79.
[5]尹春雷.基于Proteus的《单片机机原理与应用》课程教学改革与实践[C]//全国高等学校电子技术研究会论文集,2007:354-356.
[6]杜树春.基于Proteus和Keil C51的单片机设计与仿真[M].北京:电子工业出版社,2012.
[7]王静,徐斌,张凯,等.基于Proteus心血管测试仪前置放大端的研制[J].电子科技,2012,25(8):3-5.WANG Jing,XU Bin,ZHANG Kai,et al.Development of a proteus-based cardiovascular tester endpreamplifier[J].Electronic Science and Technology,2012,25(8):3-5.
[8]吴文忠.基于Proteus的自动拨号报警器仿真设计[J].现代电子技术,2011,34(10):55-58.WU Wen-zhong.Simulation design of an auto-dial annunciator based on Proteus[J].Modern Electronics Technique,2011,34(10):55-58.