(e>绘图工具
13.3.2Proteus中51单片机应用系统的开发
应用Proteus开发51单片机应用系统的步骤如下:
绘制应用系统的硬件电路图<﹡.DNS)→编辑源文件(﹡.ASM或﹡.C并存盘>.→将源文件进行编译和连接生成﹡.HEX文件→仿真调试及纠错→绘制印刷电路板<*。
DSN)→焊接形成产品
1.用ISIS绘制单片机应用系统的硬件电路图
启动ISIS后出现图13.4画面,点击对象选择窗口的P或L选择所需要的微处理器或元器件,Proteus所支持的元器件中英文如表3.2
表3.2<见林立书P212)
分类
元器件类型
选择好的元器件点击“OK”按钮后,元器件型号会列于对象选择窗口,右击其型号,该
型号的图会出现在图像编辑窗口,右击该元器件图,根据出现的菜单可对其进行旋转、翻转等操作,以摆好元器件的位置,双击该元器件图,出现元器件编辑窗口,对该元器件编号,封装等进行选择。
利用图13.1最左边的绘图工具画总线,系列线或单根的线,<直接点击两个元器件,ISIS也可以自动走线。
)点击绘图工具的LBL可以给线加标签,对于同名标签的线是互连的。
选择绘图工具中的POWER和GROUND画出电源和地,电路原理图画好后存盘。
图13.6基于Proteus的80C51实验板仿真电路图
点击<选中)、双击、右击图中的某一部件,都会对该部件进行操作
2.编辑源文件
利用文本编辑器编辑源文件,源文件可以是汇编语言<﹡.ASM)也可以是C语言<﹡.C)。
如果是汇编语言先要选择汇编工具,Proteus软件包带有8051单片机汇编语言开发工具ASEM51,该工具已经将交叉汇编和链接两步过程合二为一,但它不支持重定位段和外部符号,因此要求所有的汇编代码在一个文件中。
选择汇编工具的方法是在ISIS界面主菜单Source中设置好相关参数,汇编工具设置位置如图13.4所示,在Tool栏的下拉中选ASEM51。
(a>设置菜单项图(b>设置界面
13.7ISIS中8051汇编工具链的设置
Proteus不带C语言的编译工具,必须使用C51编译和连接,而Keil带有C语言的编译,因此要先由Keil的C51编译器编译,生成﹡.HEX文件,再进行调试。
编辑源程序的方法是点主菜单Source,出现如图13.3(a>菜单项,选择添加/移除源程序,尔后出现图13.3(b>的设置界面,图中左上部设置应用系统的微控制器80C51(U1和电路图的80C51标签要一致>,如果电路中不存在微控制器,该项是无效的;右上部源程序工具链的选择,点击下拉选择其中的ASEM51选项;图中下部是用户源文件的选择位置,点击Change按钮找用户编写的源程序文件,点击New则新建源文件。
Prot
(a>设置菜单项图(b>设置界面
13.8ISIS中8051汇编源文件设置
一般来讲一片8051单片机对应一个源文件,一个电路中容许有多个8051单片机,可以对应多个汇编源文件。
3.将源文件进行编译和连接生成﹡.HEX文件
汇编源码文件设置好之后,接下来就可以点击Source菜单下的BuildAll项就可以启动汇编好连接过程,如图13.5所示。
图13.5(b>是汇编成功后出现的提示信息,如果汇编过程中出现错误,其文本框中也会给出相应的错误提示,用户根据提示处修改源文件,再次汇编,直至通过为止。
(a>启动汇编菜单(b>汇编成功后的提示信息框
图13.9ISIS单片机仿真电路中汇编源码文件的汇编
汇编成功后,生成的.HEX编程文件会自动地装载到8051单片机器件中,如果加载非当前汇编的文件,双击图中的单片机,出现如图13.10画面,可以为单片机选择新的执行文件,为使实验效果观察更为有利,也可以更改时钟频率。
图13.10ISIS单片机属性设置对话框
4.Proteus的仿真调试
将﹡.HEX文件加载到原理图文件的单片机中,利用单步、断点等运行手段仿真调试,发现错误,修改程序或硬件电路。
在Proteus中的调试均采用软件仿真的方式进行。
点击主菜单Debug,出现如图13.11所示的菜单项,点击Start/RestartDebugging按钮,或者点击ISIS仿真面板上的Step和Pause按钮均可以启动仿真调试,如果有错误,就会出现提示信息,依据提示信息将故障排除。
程序调试有单步、断点、全速等多种运行方式,在DEBUG菜单项选用,其中
Execute:
全速执行,执行完程序后退出调试状态。
StepOver:
如是子程序调用语句,将视为一条指令执行。
StepInto:
遇到子程序调用语句,进入子程序中,跟踪执行。
StepOut:
执行程序直到当期的子程序返回。
需要注意的是,仿真面板上的STEP一般不是指令的
单步操作,而是指仿真动画的单步方式,具体使用的时候应该
图13.11DEBUG菜单项
加以区别。
在调试过程中,当程序运行暂停时,点击图13.11中的3.8051CPU,选择你希望看到的单片机相关的调试信息,如图13.12所示。
调试窗口中所显示的寄存器或者存储器的内容是不能手动修改的,而只能查看其结果。
在源码显示窗口中,点击鼠标右键,进一步设置还可以显示行号、地址、机器码等信息,同时也可以设置断点,如图13.12(d>中第8行处的实心圆圈所示。
(a>8051寄存器窗口(b>8051特殊功能寄存器窗口
(c>8051内部RAM窗口(d>8051源代码窗口
图13.12Proteus的8051各种调试信息显示窗口
更为方便的查看多个变量值的方法是可以将它们集中在WatchWindow窗口中,如图12.13(a>所示,其查看变量的添加可由鼠标右键弹出菜单设置,如图13.13(b>所示。
添加方式有按照名称和按照地址两种,分别如图13.14(a>和(b>所示。
(a>Watch窗口显示框(b>Watch窗口设置弹出菜单
图13.13Proteus的WatchWindow窗口
(a>按名称(b>按地址
图13.14WatchWindow窗口的变量添加方式
13.3.2
图13.15
图13.21
13.3.3Keil和Proteus的联合使用,C51程序的仿真调试
Proteus不带C51语言的编译工具,但可以看到虚拟器件的执行效果,而Keil带有C语言的编译,同时它调试的方法修改手段等功能强大,充分发挥两者的长处,是不错的调试方法。
pro-setup77
图13.21
13.5单片机编程<下载)方法
使用Proteus可以完成产品的设计,这只是纸上谈兵,最后必须完成产品的制作,少不了要将调试成功的程序的*.HEX文件烧写进单片机(称为编程或下载>。
编程有三种方式:
并行口编程、串行口编程和USB编程。
根据自己电脑的配置选择。
它们是使用电脑的不同端口完成的。
端口名和编号通过以下步骤可以查:
我的电脑-系统任务-查看系统信息—系统属性—硬件-设备管理器-端口
各步出现的画面如13.17图所示
图13.17查找电脑的端口的步骤
几种不同编程的方式的差别见表13.4
表13.4不同编程的方式的差别
编程方法
并行口编程
串行口编程
USB编程
电脑接口
EPC打印端口LPT1(并行口>
串行通信端口COM1
按图13.4步骤查找正在使用的USB口占用的COM编号
连接线
25针D型插头连接线
9针D型插头连接线
USB-COM转接线
适用的单片机
ATMELAT89S52(内有8KbROM的增强型51单片机>
SST公司的SST89E58
(内有32KbROM的增强型51单片机>
使用的软件
SSTEasyIAP11F.exe
USB驱动软件
SSTEasyIAP11F.exe
SSTEasyIAP11F.exe<无须安装)一般单片机的网站都可以下载。
使用USB编程时,需购买USB-COM转接线,其附带的软盘上USB驱动软件,因为一般计算机有两个以上的USB接口,插到不同的USB插口,计算机安排的COM序号是不同的,你必须查你插上的USB接口使用的COM号码。
本教材提供的实验板,三种编程方式的接口都已作在板上,当你购买实验板时软盘会提供相应软件及使用指南。
不管哪种编程方式,除根据要求更换单片机外,实验板和实验程序不作任何改动。
注意串口编程时W1键(EXE/ISP并口的执行转换按键>不起作用,使它处于弹高的位置。
串口编程软件SSTEasyIAP11F.exe程序操作如下:
1.选择主菜单DetectChip/RS232,按图13.18(c>的顺序选择你的SST单片机型号和存储器模式
(c>
图13.18选择单片机型号
2.OK后出现下面画面,选择实验板和计算机相连的COM口序号,波特率及晶振频率可不作修改,但COM口一定要根据你的计算机连接情况<见图13.4)作正确选择。
如用USB接口要先查清楚你所接的USB对应的COM序号进行选择。
如图13.4中USB接口对应是COM6,换一个USB口要查一次USB对应的COM序号
图13.19选择COM口序号
3.点击上图中最下行的中的DetectMCU选项后出现图13.20画面。
点击图中“确定”以后,按实验板上的复位键,软件对单片机进行检测,被写的单片机的有关信息出现在图13.21中:
图13.20
图13.21显示的单片机有关信息
4.点击图13.21中Download后,圆圈中出现黑点,出现图13.22画面,选择:
图13.22选择下载的*.HEX文件
出现图13.23警告信息:
原有的信息将被清除,是否继续下载:
答是。
随后进入下载过程,出现图13.24滚动条。
图13.24程序下载
下载完成。
按单片机实验板的复位键后即可以执行已下载的程序。
如重新下载再重复上述过程。
用USB下载过程同上。
并口编程的软件及操作说明见出版社华信网站的本教材的课件中,本节不作说明。
13.5实验指导
实验的方法有基于ISP实验板的和基于Proteus的两种,根据实验室的条件选择。
基于ISP实验板的硬件电路见图13.3,图中考虑到用户的自行扩展硬件;基于Proteus考虑画图的方便,所以两种电路在AD549和DA5615和并行口的安排上稍有差异,定时器和中断共用脉冲源,实验中根据采用的实验方法参考不同的电路图。
基于Proteus的电路图见图13.25,该电路图会附在教材的课件上,直接在Proteus的ISIS上使用,作哪个实验就使用图的哪一部分。
图中的按键和开关操作只需要用鼠标点击或拖动。
当然读者也可以自行画实验电路图。
图13.26基于Proteus的虚拟实验板电路图
12.2.1实验一程序设计
一、实验目的
⑴熟悉Proteus软件的基本操作。
(2>掌握Proteus环境下80C51汇编程序的编辑、汇编及调试的方法。
⑶掌握8051C语言程序设计的方法
二、实验内容
⑴搭建Proteus的8051单片机环境,直接点击教材配套的80C51实验板设计电路<读者也可自行绘制电路),进入基于Proteus的8051实验平台。
实验板默认的时钟频率为11.0592MHz,读者根据需要可以在单片机属性对话框的时钟频率项中自行修改。
⑵鼠标点击菜单“Source”→“Add/RemoveSourcefiles”,弹出“Add/RemoveSourceCodeFiles”对话框后,点击“New”按钮按照提示信息建立一个汇编语言源文件,文件名自取,进入编辑窗口键入以下实验程序后存盘。
INDEXEQU20H
SUMEQU21H
ORG0000H
AJMPSTART
ORG0100H
START:
MOVINDEX,#5
MOVA,#0
LOOP:
ADDA,INDEX
DJNZINDEX,LOOP
MOVSUM,A
SJMPSTART
END
⑶点击“Source”→“BuildAll”,使用Proteus自带的汇编器对源程序汇编,生成.HEX格式编程文件。
⑷点击仿真控制面板的暂停键
,启动系统仿真。
点击“Source”→“WatchWindow”打开变量观察窗口,在观察窗口中加入变量INDEX和SUM以及累加器ACC;点击“Debug”→“8051CPU”→“SourceCode”打开源码窗口。
⑸使用快捷键F11,单步执行程序,观察Watch窗口中ACC、INDEX、SUM内容的变化情况。
⑹在源码窗口最最后一条指令SJMPSTART处设置断点,执行后观察ACC、INDEX、SUM内容的变化。
三、程序设计
编写程序并在实验板上仿真调试。
⑴将外部数据存储器0001H和0002H单元内容互换。
⑵将外部数据存储器010~01FH单元内容移到020~02FH单元。
⑶统计内部数据存储器从30H单元开始的十个字节中,正数﹑负数和零的个数,并分别置于R4,R5,R6中。
⑷完成八位数除以八位数,即R2/R1=R3......R4。
⑸将外部数据存储器0~05H单元的BCD码转换为ASCII码放回原单元。
⑹将外部数据存储器0~05H单元中的十六进制数转换成ASCII码放回原单元。
⑺将R0中的二进制数转换成BCD码存于内部数据存储器的22H~20H单元。
⑻完成两个四字节数的相加<即32位数),和存于内部数据存储器的24H~20H单元
⑼完成两个四字节数BCD码数的相加,和存于内部数据存储器的24H~20H单元
12.2.2实验二并行接口
一、实验目的
⑴掌握8051单片机并行口的输入方式和输出方式的编程。
⑵熟悉基于Proteus的虚拟80C51实验板的结构。
⑵熟悉8051单片机并行口的Proteus仿真调试。
二、实验内容
⑴实验程序A
实验仿真电路如图12.6所示,单片机的P0口接8位拨码开关,P1口接6个数码管的位选,P2口接6个数码管的段选。
编辑以下程序并运行,观察执行现象。
为显示的现象更为清晰一些,可以将单片机的属性编辑对话框中将时钟频率调至1MHz,如图12.15所示。
ORG0000H
AJMPSTART
ORG0100H
START:
MOVP1,#01H
MOVA,#1
NEXT:
MOVP1,A
MOVR3,#0
LOOP:
MOVR4,#0
DJNZR4,$
DJNZR3,LOOP
RLA
SJMPNEXT
END
图12.158051单片机属性编辑对话框
自编程序:
①使第三个数码管各段轮流亮。
②使六个数码管共42段LED各段轮流亮。
⑵实验程序B
实验仿真电路如图12.6所示,将拨码开关的第几位置“ON”,第一个数码管则显示几。
程序如下:
ORG0000H
AJMPSTART
ORG0100H
START:
MOVDPTR,#TAB0
MOVP1,#01H
STA1:
SETBC
MOVR0,#1
ASP:
MOVP0,#0FFH
MOVA,P0
ASP1:
RRCA
JNCLED。
检测是哪个开关置“ON”
INCR0
CJNER0,#9,ASP1
SJMPSTA1
LED: