在80C51单片机的学习与开发过程中,KeilC51是程序设计开发平台,它能进行程序的编译与调试,但是不能直接进行硬件仿真。Proteus软件具有交互式仿真功能,它不仅是模拟电路、数字电路、模/数混合电路的设计与仿真平台,更是目前世界上最先进、最完整的多种型号微处理器系统的设计与仿真平台。如果将KeilC51软件和Proteus软件有机结合起来,那么80C51单片机的设计与开发将在软、硬件仿真上得到完美的结合。
Proteus软件由ISIS(Intelligent Schematic Input System)和ARES(Advanced Routing and Editing Software)两个软件构成,其中ISIS是一款智能原理图输入系统软件,可作为电子系统仿真平台;ARES是一款高级布线编辑软件,用于制作印制电路板(PCB)。由于篇幅的原因,Proteus ISIS的详细介绍以及Proteus ARES的使用方法,本书不进行介绍,感兴趣的读者,可以参考编者的《基于Proteus的51系列单片机设计与仿真》一书。图2-13所示的是与本项目任务1中的P_test.c源程序对应原理图,现以此图为例,简单介绍ProteusISIS的使用方法。
图2-13 与P_test.c对应的原理图
1)新建设计文件 在桌面上双击图标 ,打开ISIS 7 Professional窗口。执行菜单命令“File”→“New Design”,弹出如图2-14所示的模板选择窗口。横向图纸为Landscape,纵向图纸为Portrait,DEFAULT为默认模板。选中DEFAULT,单击“OK”按钮,则新建了一个DEFAULT模板。也可以在ISIS 7 Professional窗口中直接单击 图标,即可新建一个DEFAULT模板。
图2-14 图纸模板选择
2)设定图纸的大小 执行菜单命令“System”→“Set Sheet Sizes...”,弹出“Sheet Size Configuration”对话框,在此对话框中选择“A4”选项,单击“OK”按钮,完成图纸的设置。图纸设置好后,进入如图2-15所示的ISIS 7 Professional窗口。
3)保存设计项目 新建一个DEFAULT模板后,在ISIS 7 Professional窗口的标题栏上显示为DEFAULT。单击 图标,或者执行菜单命令“File”→“Save Design...”,弹出“Save ISIS Design File”对话框。在此对话框中选择合适的保存路径,输入保存文件名为“P_test”。该文件的扩展名为.DSN,即该文件名为P_test.DSN。文件保存后,在ISIS 7 Professional窗口的标题栏上显示为P_test。
图2-15 ISIS 7 Professional窗口
4)为设计项目添加电路元器件 本例中使用的元件见表2-1。
注意:由于Proteus ISIS元器件库中没有STC89C51RC单片机,所以本书中用AT89C51取代STC89C51RC单片机进行程序仿真。
表2-1 本例中使用的元件
在元器件选择按钮 中单击“P”按钮,或者执行菜单命令“Library”→“Pick Device/Symbol”“”,弹出如图2-16所示的Pick Devices对话框。在此对话框中,添加元器件的方法有以下两种。
● 在关键字中输入件元名称,如AT89C51,则出现与关键字匹配的元器件列表,如图2-17所示,选中并双击AT89C51所在行后,单击“OK”按钮或按“Enter”键,便将器件AT89C51加入到ISIS对象选择器中。
● 在元器件类列表中选择元器件所属类,然后在子类列表中选择所属子类,若当对元器件的制造商有要求时,在制造商区域选择期望的厂商,即可在元器件列表区域得到相应的元器件。
按照以上方法将表2-1中的元器件添加到ISIS对象选择器中。
5)放置、移动、旋转、删除对象 元器件添加到ISIS对象选择器中后,在对象选择器中单击要放置的元器件,蓝色条出现在该元器件名上,再在原理图编辑窗口中单击即可放置一个元器件。也可以在按住鼠标左键的同时移动鼠标,在合适位置释放,将元器件放置在预定位置。
图2-16 “Pick Devices”对话框
图2-17 输入元器件名称
在原理图编辑窗口中若要移动元器件或连线时,先用鼠标右键单击对象,使元器件或连线处于选中状态(默认情况下为红色),再按住鼠标左键拖动,元器件或连线就跟随指针移动,到达合适位置时,松开鼠标即可。
放置元器件前,单击要放置的元器件,蓝色条出现在该元器件名上,单击方向工具栏上相应的转向按钮可旋转元器件,再在原理图编辑窗口中单击即可放置一个已经更改方向的元件。若在原理图编辑窗口中需要更改元器件方向时,单击选中该元器件,再单击块旋转图标 ,在弹出的对话框中输入旋转的角度即可实现更改元器件方向。
在原理图编辑窗口中要删除元器件时,用鼠标右键双击该元器件即可删除,或者先单击选中该元器件,再按“Delete”键也可删除元器件。
通过放置、移动、旋转、删除元器件后,可将各元器件放置ISIS原理图编辑窗口的合适位置,如图2-18所示。
6)放置电源、地 单击工具箱中 元件终端图标,在对象选择器中单击“POWER”,使其出现蓝色条,再在原理图编辑窗口合适位置单击鼠标即可将电源放置在原理图中。同样,在对象选择器中单击“GROUND”,再在原理图编辑窗口合适位置单击鼠标就将“地”放置在原理图中。
7)布线 在ISIS原理图编辑窗口中没有专门的布线按钮,但系统默认自动布线 有效,因此可直接画线。
在两个对象间连线的方法:
(1)光标靠近一个对象引脚末端,该处自动出现一个“ ”,单击鼠标左键。
(2)拖动鼠标,在另一对象的引脚末端,该端出现一个“ ”时再单击鼠标就可画一连线,如图2-19(a)所示;若想手动设定布线路径时,拖动鼠标过程中在想要拐点处单击,设定布线路径,到达画线端的另一端单击鼠标左键,就画好一个连线,如图2-19(b)所示。在拖动鼠标过程中,按住“Ctrl”键,在画线的另一端出现一个“ ”时单击鼠标左键,可手动画一任意角度的连线,如图2-19(c)所示。
图2-18 各元器件放置在原理图编辑窗口合适位置
移动画线、更改线型的方法:
(1)单击鼠标左键选中连线,指针靠近该连线,该线出现双箭头,如图2-19(d)所示。
(2)按住鼠标左键拖动鼠标,该线就跟随移动。
(3)若多根线要同时移动时,先框选这些线,再单击块移动 按钮,拖动鼠标,在合适位置单击鼠标左键,就改变了线条的位置。
绘制总线的方法:
(1)光标靠近一个对象引脚末端,该处自动出现一个“ ”,单击鼠标左键。
(2)拖动鼠标,在合适位置双击鼠标左键,画出一条直线。
图2-19 布线
(3)如果该线为单线,要设置为总线时,先选中该线,单击鼠标右键,在弹出菜单中选择“Edit Wire Style”项,如图2-20(a)所示,再在弹出的“Edit Wire Style”对话框的“Global Style”下拉列表中选择“BUS WIRE”,如图2-20(b)所示。绘制的总线如图2-21所示。
图2-20 总线画法
图2-21 绘制的总线
绘制总线分支线的方法:
(1)光标靠近一个对象引脚末端,该处自动出现一个“ ”,单击鼠标左键。
(2)拖动鼠标,在靠近总线合适位置双击鼠标左键,画出一条直线。
(3)光标靠近该直线末端,该处自动出现一个“ ”,单击鼠标左键。
(4)拖动鼠标,同时按住“Ctrl”键,在总线出现一个“ ”时单击鼠标左键,就画好一分支线,如图2-22所示。
(5)在工具箱中单击 图标,再在总线或各分支线上单击鼠标左键,弹出图2-23所示“EditWireLabel”对话框。在“Label”选项卡的“String”栏中输入相应的线路标号,如总线为AD[0..7](表示有AD0~AD7共8根数据线),分支线为AD0、AD1等。
图2-22 分支线的画法
8)设置、修改元器件属性 在需要修改元器件上单击鼠标右键,在弹出的菜单中选择“Edit Properties”,或按快捷键“Ctrl”+“E”,将出现“Edit Component”对话框,在此对话框中可以设置相关信息,如修改电容为22pF,如图2-24所示。
图2-23 线路标号
图2-24 元器件属性设置
9)编辑设计原理图界面 根据以上步骤及方法在原理图编辑窗口中绘制完图2-13所示的电路图后,可以将不需要显示的一些项目隐藏,把其变成简洁、清爽的界面。执行菜单命令“View”→“Grid”,可以去掉界面中的网格;执行菜单命令“Template”→“Set Design Defaults”,在弹出的对话框中的将“Show hidden text?”选项不选中,可以去掉元器件的文本内容。编辑好的单片机仿真原理图如图2-25所示。
图2-25 编辑好的单片机仿真原理图
10)单片机程序仿真 在原理图中,双击AT89C51单片机,将弹出“Edit Component”对话框,选择“Program File”栏,单击 按钮,添加任务1中由Keil C51生成的P_test.hex文件。在“Clock Frequency”栏中设置单片机的工作频率为12MHz,如图2-26所示。设置好后,单击“OK”按钮将原理图保存,并回到原理图编辑界面。
在原理图编辑界面中,单击仿真按钮即可进行单片机程序仿真。
注意:在仿真过程中,元器件的某些引脚上显示红色的小方点表示该引脚为高电平状态,引脚上显示蓝色的小方点表示该引脚处于低电平状态。
图2-26 单片机编辑对话框设置
对于较复杂的程序,如果没有达到预期效果,可以采用KeilC51与Proteus联机调试方式。进行联机调试时,必须先安装联机调试驱动程序,并进行相应设置,然后才能进行KeilC51与Proteus的联机调试。
1)驱动程序的安装 Proteus 6.9及以前版本与Keil C51进行联机调试时,必须将Proteus安装目录下的VDM51.dll驱动文件复制到Keil C51安装目录的\C1\BIN目录中,同时还需要下载PROSPICE.dll替换\Proteus 6 Professional\BIN目录下的相同文件,再使用记事本打开Keil根目录下的TOOL.INI文件,在[C51]栏目下加入“TDRV8=BIN\VDM51.dll(“Proteus VSM Monitor-51 Driver”)”,其中“TDRV8”中的“8”要根据实际情况确定,不能和原有的重复。
Proteus7.0及以后版本(如Proteus 7.8),在Proteus安装目录下没有VDM51.dll驱动文件,要实现Proteus与Keil C51联机调试,只需安装“vdmagdi.exe”联调插件文件即可以完成驱动程序的安装。
驱动程序安装好后,最好重启计算机。
2)Proteus联机设置 驱动程序安装好后,在Proteus ISIS软件中执行菜单命令“Debug”→“Use Romote Debug Monitor”。
3)Keil C51联机设置 在Keil C51中打开程序项目,执行菜单命令“Project”→“Options for Target”,或者在工具栏中单击 图标,然后在弹出的“Options for Target‘Target1’”对话框中选择“Debug”选项卡,选中右边的“Use”并选择“Proteus VSM Simulator”,如图2-27所示。
图2-27 “Options for Target‘Target1’”对话框
在图2-27中单击右侧的“Settings”按钮,弹出“VDM51 Target Setup”对话框,如图2-28所示。如果Proteus与KeilC51是安装在同一台计算机中,则“Host”栏中的IP地址使用默认值127.0.0.1,“Port”栏中的端口也使用默认值8000;如果Proteus与Keil C51不是安装在同一台计算机中,则“Host”栏中要填写另一台计算机的IP地址。
图2-28 “VDM51 Target Setup”对话框
4)Keil C51与Proteus的联机调试运行完成上述操作后,就可以进行KeilC51与Proteus的联机调试。
注意:进行联机调试时,Keil C51中的项目工程及相应的Proteus ISIS原理图仿真文件都要打开,并且Keil C51的项目工程和Proteus ISIS的原理图仿真文件应放到同一层目录下。
在KeilC51中全速运行时,ProteusISIS中的单片机系统也会自动运行。KeilC51每调试一次,ProteusISIS就会做出相应动作。若想观察运行过程中的某些变量值或设备状态,需要在Keil C51中恰当使用Step in/Step over/Step out/Run to cursor line及Beakpoint进行跟踪。但是,并不是在任何时候都可以进行跟踪,例如,键盘矩阵扫描时就不能用单步跟踪,因为程序运行到某一步骤时,如果敲击按键后KeilC51中继续单步跟踪,这时按键早已释放了。
所以,在联合调试过程中,需要恰当地配合单步、跳出、运行到当前行、设置断点等方法进行跟踪。