2.3 单片机的仿真与应用
随着计算机应用的普及,电子电路的设计、单片机系统的开发也已经有了许多计算机辅助设计软件,这些软件对智能仪器的设计和分析有很大的帮助。
Proteus ISIS是英国Labcenter公司开发的电路分析与实物仿真软件,后面简称Proteus软件。它运行于Windows操作系统上,可以仿真、分析(SPICE)各种模拟器件和集成电路,该软件具有模拟电路仿真、数字电路仿真、单片机及其外围电路组成的系统的仿真的功能,目前支持的单片机类型有:MCS-51系列、DSP系列、Arm系列等,本书简要介绍Proteus软件在智能仪器设计中的使用方法。这里仍以MCS-51系列单片机为例,说明如何利用这个软件建立原理图和进行仿真。
2.3.1 8951单片机最小系统的建立
这里选用8951建立一个单片机的最小系统,在前面已经讨论过,因为8951自带4KB可擦写编程E2PROM,所以只要接上电源和晶振,一片芯片就可以构成一个最小系统。
安装了Proteus软件后,用Proteus软件建立8951单片机最小系统的基本步骤如下所述。
1.打开Proteus ISIS的工作界面
在“开始”→“程序”中选择“Proteus ISIS”,打开Proteus ISIS的工作界面,如图2.10所示。可以看到,这是一种标准的Windows界面,因此使用起来比较方便。
图2.10 Proteus ISIS的工作界面
2.选择所需要的元件
通过对象选择按钮,从元件库中选择对象,并置入对象选择器窗口,供今后绘图时使用。显示对象的类型包括:设备,终端,引脚,图形符号,标注和图形。例如,在关键字窗口中直接输入“89C51”就可以找到所需的芯片。
注意,电源和接地不是元件,要从终端中选择,图形符号为。
3.放置元件并连线
选择好全部的元件并放置好后,用鼠标指向对象并单击右键可以选中该对象,使其高亮显示,然后可以进行编辑,如设定电阻的阻值,电容的容量等。
然后连线,Proteus的智能化可以在你想要画线的时候进行自动检测。当鼠标的指针靠近一个对象的连接点时,跟着鼠标的指针就会出现一个“×”号,鼠标左键单击元器件的连接点,然后单击一个或几个非连接点的位置,ISIS将认为你在手工定线的路径,将会让你单击线的路径的每个角。路径是通过左击另一个连接点来完成的。如果在交叉点有电路节点,则认为两条导线在电气上是相连的,否则就认为它们在电气上是不相连的。
最后,得到8951单片机的最小系统,如图2.11所示。这个最小的单片机系统除了9脚接了重启(RST)按键外,只有P1.0有外接LED输出。
图2.11 8951构成的最小系统
2.3.2 8951单片机最小系统的仿真过程
Proteus软件提供了多种单片机的仿真功能,这里我们对图2.11所示的8951最小单片机系统进行仿真,以2.2.4节的【例2.1】为例说明仿真的过程,即通电后单片机输出频率为10kHz的矩形波。
1.建立源程序
【例2.1】中已知单片机的频率为12MHz,要求单片机输出频率为10kHz的矩形波,占空比为2∶1(高电平时间长),并选P1.0引脚作为输出脚。通过分析编写了相应的程序。
可以用记事本(不能用Word之类带格式的文本编辑器)建立源代码,并另存为后缀名为.ASM的8051的源代码文件。这里起名为:ex1.ASM。
2.载入源程序并编译
在主菜单中选择“源代码(source)”→“添加/移除源代码”,打开如图2.12所示的对话框。
图2.12 “添加/移除源代码”对话框
其中,目标处理器要选所用的单片机,这里是AT89C51,代码生成工具选ASEM51,然后单击“新建”,找到建立的源代码文件,按“确定”后退出。
仍在主菜单中选择“源代码”→“全部编译”,如果源代码有错则修改,如果没错就编译完成了。
3.仿真
单击“仿真运行开始”按钮或在主菜单中选择“调试”→“执行”就可以仿真了,通电或按过重启(RESET)键后单片机会自动从0000H处开始执行程序。如果程序比较复杂还可以“启动调试”,对程序进行单步调试,可见这个软件非常直观,容易掌握。
在仿真时,可以看到图2.11中LED显示器引脚的电平变化,红色代表高电平,蓝色代表低电平,(如果是灰色,代表未接入信号或者为三态)。如果【例2.1】的输出太快,还可以修改程序,如使它按照亮2s、暗1s的规律变化,则更加直观。
2.3.3 利用中断实现故障报警的仿真
【例2.3】给出了利用中断实现故障报警电路的分析,这里用四个按钮输入来表示四个故障源的工作情况,当按下按钮时,表示该故障源工作不正常,出现故障了,这时相应的二极管灯亮。其仿真电路如图2.13所示。
图2.13 故障报警电路仿真图
输入源程序并编译成功后,Proteus软件还提供了程序调试功能,在主菜单中选择“调试”→“开始/重新启动调试”,就弹出了调试窗口,如图2.14所示。在窗口中可以看到当前所执行的语句,可以进行单步调试、设置断点调试等。
从图2.13中还可以看到,当两条线路需要连接时,除了直接相连以外,还可以用同一标号(LBL)表示,这样电路可以显得很整洁,如图2.13中的与门的四个输入端,通过标号表示它们分别与按鍵开关的输入相连接,当电路比较复杂时,用这种方法使电路非常清晰。
结合图2.14的调试窗口,可以使得单片机的硬件与软件结合仿真,可以看到,这对智能仪器的开发提供了很大的方便。
图2.14 调试窗口
2.3.4 利用中断实现定时采集数据的仿真
【例2.4】中给出了用中断进行定时控制。每间隔一定时间,进行中断程序,对现场数据(P1口)实施一次采集、传送、取数,并把数据存放在内部RAM或外部RAM存储区等操作,而间隔时间未到,CPU可进行数据处理、数据显示等主程序的工作。
在Proteus中建立电路原理图,如图2.15所示,为了方便,这里P1口通过接高、低电平假设监测的数据值,这里给出的是01010011B,即53H。
如果要采集的数据量比较大,例如要长时间监测记录P1口的数据变化,要采用外部存储区,硬件上要增加74LS373锁存器和外部数据存储芯片,这里选用6264(8KB)RAM。如图所示,其地址的范围为(0000H~1FFFH),在【例2.4】程序中存储数据的首地址为1000H。
图2.15 定时采集数据并存储电路
加载源代码并编译通过后,就可以结合电路和软件进行仿真了。在仿真过程中,还可以通过单步调试和设置断点调试等方法来观察电路和程序的工作情况。可以先在主菜单中选择“调试”→“8051CPU”→“内部存储器”,打开内部存储器窗,如图2.16(a)所示,再在主菜单中选择“调试”→“存储芯片U2”,打开外部存储器窗,如图2.16(b)所示,最后在主菜单中选择“调试”→“开始/重新启动调试”,便可以观察到数据移动的过程。从P1口采集的数据先后被送到内部存储区(30H为首地址)和先外存储区(1000H为首地址)进行存储,如图2.16(a)、(b)所示。
图2.16 仿真调试过程中的观察窗
通过仿真,可以看到程序的执行过程。这种定时去测量某一端口的数据的方法在智能仪器中经常用到,主程序中还可以加入对测量数据的处理等其他工作。