APP下载

PROTEUS在单片机教学中的应用

2012-12-17惠州工业科技学校周彩云

电子世界 2012年15期
关键词:数码管子程序个位

惠州工业科技学校 周彩云

单片机是电气信息类专业一门重要的专业课,实践性非常强,又非常抽象,学生普遍反映比较难学。通常,要做一次课堂演示实验要准备计算机、仿真器或编程器、电源和实验电路板等设备。如果用仿真器做实验,稍有不慎,仿真头就可能从实验电路板中脱落而造成错误,甚至损坏设备。如果用编程器写芯片的方法来验证实验结果,那么就得多次在实验板与编程器之间拔、插芯片,很麻烦,效率低。即使勉强做,由于实验电路板上的器件较小,学生很难看清现象,教学效果不佳。伴随着计算机软件技术的飞速发展,出现了大量的软件仿真工具,本文介绍的Proteus软件可以在计算机上进行单片机及其外围器件的模拟仿真。

一、Proteus简介

Proteus是英国Labcenter公司开发的电路分析与实物仿真软件。它运行于Windows操作系统上,可以仿真、分析(SPICE)各种模拟器件和集成电路。它是目前最好的仿真单片机及外围器件的工具。该软件的特点是:

图1 Proteus的工作界面

图2 4位时钟电路原理图

图3 选择代码生成工具

1.实现了单片机仿真和SPICE电路仿真相结合。具有模拟电路仿真、数字电路仿真、单片机及其外围电路组成的系统的仿真、RS232动态仿真、I2C调试器、SPI调试器、键盘和LCD系统仿真的功能;有各种虚拟仪器,如示波器、逻辑分析仪、信号发生器等。

2.支持主流单片机系统的仿真。目前支持的单片机类型有:ARM7(LPC21xx)、8051/52系列、AVR系列、PIC10/12/16/18系列、HC11系列以及多种外围芯片。

3.提供软件调试功能。在硬件仿真系统中具有全速、单步、设置断点等调试功能,同时可以观察各个变量、寄存器等的当前状态,因此在该软件仿真系统中,也必须具有这些功能;同时支持第三方的软件编译和调试环境,如Keil C51 uVision2、MPLAB等软件。

图4 4位时钟的流程图

4.具有强大的原理图绘制功能。

二、Proteus仿真使用

下面以AT89S51为控制芯片的4位时钟为例,介绍怎样利用PROTEUS软件实现电路的硬件设计、软件调试与系统仿真、实现单片机电路的功能要求,完成对控制方案的验证。在单片机教学中利用以上过程可以让学生方便地进行电路与程序调试,发现程序和电路设计中遇到的问题,引起学生的思考,进而掌握解决这些问题的思路和方法,克服了老师反复讲解和演示弊端,实现了单片机的一体化教学。

1.电路原理图设计。运行Proteus软件进入其编辑环境,主界面如图1所示。

点击对象选择区的P命令即弹出元器件选择(Pick Devices)对话框,调入所需元件仿真库。将电路中的所用到的元件从元器件库中调出来,放到绘图区并编辑其属性,接着进行合理的布局后,就可以进行连接了。与用Protel软件绘制原理图类似,Proteus软件也具有自动捕捉节点和自动布线的功能,连线时当标的指针靠近一个对象的引脚时,跟着鼠标的指针就会出现一个红色小框,点击鼠标左键就可画线了,需要拐弯时点击一下即可,在终点再点击确认一下就画出了一段导线,所有导线画完后,再点击工具栏的按钮,即可出现可用的终端。在对象选择器中的对象列表中,单击POWER,在预览窗口出现电源符号,在需要放置电源的地方单击,即可放置电源符号。放置接地符号(地线)的方法与放置电源类似,在对象选择列表中单击GROUND,然后在需要接地符号的地方单击,就可以了。添加完必要的电源和接地符号,原理图的绘制就完成了,4位时钟电路原理图如图2所示。

图5 4位时钟软件仿真效果

2.软件编程。程序的流程如图3所示,具体完成程序及生成代码的方法如下:

通过菜单点击“源代码→添加/删除源文件”,弹出对话框,如图3所示。

在“代码生成工具”的下拉菜单中选择代码生成工具ASEM51,然后点击“新建”按钮,弹出选择文件对话框,输入4位时钟程序的文件名保存并打开文件即可在PROTEUS提供的文体编程器中编辑源程序。

程序编好后保存,再通过菜单“源代码→全部编译”编译汇编源程序,生成目标代码文件。若编译失败,可对程序进行修改调试直至编译汇编成功,生成:4位时钟.Hex文件。

完整的4位时钟程序如下(流程图见图4):

ORG 0000H

LJMP START

ORG 0030H

START:MOV 40H,#00H ;软件计数器清零

MOV 41H,#0F7H ;位选地址存储单元

MOV 42H,#50H ;数码管显存单元首地址

MOV 50H,#00H ;显示单元,秒个位

MOV 51H,#00H ;显示单元,秒十位

MOV 52H,#00H ;显示单元,分个位

MOV 53H,#00H ;显示单元,分十位

MOV TMOD,#01H ;设置定时器T0工作在方式1

MOV TH0,#0ECH ;设定5ms初值

MOV TL0,#78H

SETB TR0 ;启动定时/计数器T0

MAIN:JNB TF0,$ ;不断查询T0有无溢出

MOV TH0,#0ECH ;重新置初值

MOV TL0,#78H

CLR TF0 ;溢出标志位清零

;;;;;;;;;;5ms定时时间到,执行相应的服务程序;;;;;;;;;;

MOV P2,#0FFH ;关数码管显示,软件仿真的使用,实际可省略

LCALL DISP ;每5ms调用1次数码管显示子程序

INC 40H ;软件计数器加1

MOV A,40H

CJNE A,#200,MAIN ;判断是否到200次,即1S,5ms*200次=1秒

MOV 40H,#00H ;软件计数器清零

LCALL TIME ;分秒加1计时子程序

LJMP MAIN

;;;;分秒加1计时子程序;;;;;

TIME:INC 50H ;秒个位加1

MOV A,50H

CJNE A,#10,TIME1 ;判断秒个位是否等于10

MOV 50H,#00H ;秒个位等于10,将秒个位清零

INC 51H ;秒十位加1

MOV A,51H

CJNE A,#6,TIME1 ;判断秒十位是否等于6

MOV 51H,#00H ;秒十位等于6,将秒十位清零

INC 52H ;分个位加1

MOV A,52H

CJNE A,#10,TIME1 ;判断分个位是否等于10

MOV 52H,#00H ;分个位等于10,将分个位清零

INC 53H ;分十位加1

MOV A,53H

CJNE A,#6,TIME1 ;判断分十位是否等于6

MOV 53H,#00H ;分十位等于6,将分十位清零

TIME1:RET

;;;;;显示子程序;;;;;

DISP:MOV R0,42H ;数码管显示位送到R0

MOV A,@R0 ;将显示单元的数据送到A

MOV DPTR,#TAB ;将表地址送到DPTR

MOVC A,@A+DPTR ;查表

MOV P0,A ;数据送到P0显示

MOV A,41H ;将位选地址送到累加器A

MOV P2,A ;将位选数据送到P2

CJNE A,#0FEH, DISP1 ;判断是否选到最后一位数码管

MOV 41H,#0F7H ;是,则重新设置选择第一位数码管

MOV 42H,#50H ;重新设置显示单元为秒个位

JMP DISP2 DISP1:RR A ;没到最后一位数码管,则右移选择下一位数码管

MOV 41H,A ;移位后重新送到位选地址寄存单元

INC 42H ;显示单元加1

DISP2:RET

TAB:DB 0C0H,0F9H,0A4H,0B0H,99H,92H ;显示数字0-5的数据

DB 82H,0F8H,80H,90H

;显示数字6~9的数据

END

3.系统仿真

运行Proteus软件,打开之前所画电路图“4dpy.dsn”文件。双击AT89S51芯片,将生成的“4位时钟.hex”文件打开,按确定后返回Proteus软件界面。

三、结束语

通过以上实例的仿真过程,可以看出利用PROTEUS虚拟实验环境,克服了硬件平台的束缚,很好的解决学生理论与实践脱节的矛盾。在模拟实验中做实验,可以将大量教学信息直接地表现出来,调动了学生的学习积极性和主动性,极大地提高了单片机实验的教学效果。

猜你喜欢

数码管子程序个位
微课教学设计之“数码管动态显示”
Arduino编程
MC9S08FL16单片机数码管静态显示分析
个位与十位的故事
个位与十位的故事
单片机控制的四位数码管动态显示编程
个位与十位的故事
学习100以内的数三要点
浅谈子程序在数控车编程中的应用
子程序在数控车加工槽中的应用探索