1
proteus是由英国Labcenter Electronics公司研发的EDA仿真工具软件,EDA主要用于自动化控制系统电路设计和仿真。我们使用proteus主要完成两部分工作:一部分工作用于设计单片机应用电路,包括单片机与外围芯片、电子器件的布局和连线;一部分工作用于电路仿真,在仿真单片机内运行keil开发工具编写的嵌入式程序,验证电路设计和嵌入式程序运行结果,降低学习嵌入式开发对硬件操作的依赖程度。
proteus支持ARM、51等单片机仿真,51单片机主要支持ATMEL公司研制的51系列单片机,但不影响使用其它51系列单片机编写的嵌入式程序,因为51系列单片机的指令架构都是相同的。proteus仿真的单片机可以运行keil、matlab、IAR等软件开发的嵌入式程序,并可以进行源代码级调试。
proteus正版软件费用比较高,可以在proteus官网下载演示版,演示版是免费的且没有时间限制。但演示版只能在现有的示例上运行自己编写的程序,不能仿真调试,不能保存设计文件,若演示版不能满足要求,可以通过搜索引擎查询其它安装方式。
设计51单片机最小系统电路,包括单片机晶振电路、复位电路和发光二级管控制电路,加载前面实验用keil编写的单片机嵌入程序,验证程序的运行结果,实验用单片机型号为AT89C52。
实验步骤如下:① 认识晶振、电容、电阻、发光二极管元器件;② 了解晶振电路、复位电路、发光二极管控制电路;③ 使用proteus设计电路模型;④ 加载运行keil编写的单片机程序。
晶振(Crystal)——单片机的心脏,为单片机提供时钟脉冲,单片机所有操作都在时钟脉冲下执行。
时钟脉冲除时间外,一般要注意上升沿、下降沿、高电平、低电平,上图有8个时序脉冲,开始是低电平,过一段时间后出现一个上升沿,并跃变到高电平,高电平持续一段时间后,出现下降沿,并跃变到低电平。
时钟周期是晶振工作频率的倒数,例如12M的晶振,它的时钟周期就是1/12 μs,若采用了1MHZ的时钟频率,则时钟周期为1μs;若采用4MHZ的时钟频率,则时钟周期为250ns。
下图是晶振电子元器件的实物图和电路符号。
电容(capacitance)——两个相互靠近的导体,中间夹一层不导电的绝缘介质,就构成了电容器,电容器可以储存电荷,在交变电路内会交替充放电,因此电容可以通交流,隔直流,电容可以与晶振构成时钟脉冲电路,与电阻构成单片机复位电路,另外滤波、谐振、整流等电路都要用到电容。
电容的容量单位为:法拉(F),其它单位有:毫法(mF)、微法(uf)、纳法(nF)、皮法(pf),单位的换算进率是1000。
下图是电容电子元器件的实物图和电路符号。
电阻(resistance)——又称为电阻器,该器件在电路中阻碍电流的流动,是电路内主要的负载器件。电阻的单位是欧姆,简称欧,用希腊字母“Ω”表示。常用的电阻单位还有千欧姆(KΩ),兆欧姆(MΩ)。
换算关系:1KΩ=1000Ω,1MΩ=1000KΩ
在电路图中一般将电阻值中的Ω省去,凡阻值在千欧以下的电阻,直接用数字表示,阻值在千欧以上的,用K表示;兆欧以上的用M表示。
下图是电阻电子元器件的实物图和电路符号。
发光二级管(LED)——是一种光电子器件,该器件通电后,电能转换为光能。
下图是发光二极管电子元器件的实物图和电路符号。
晶振电路构成时钟脉冲振荡电路,为单片机提供时钟脉冲,下图为AT89C52单片机的外部晶振电路。
晶振电路由晶振和两个相同容量的电容构成,这两个电容一般称为匹配电容或负载电容,并联到晶振两端,为晶体振荡提供电流回路,若没有这两个电容,晶振的振荡会因为没有电流回路而停振,这两个电容的容量都很小,选择几十皮法即可,两个电容的另一端都需要接地。
AT89C52单片机的XTAL1和XTAL2是外接时钟引脚,XTAL1为片内振荡电路的输入端,XTAL2为片内振荡电路的输出端,这两个引脚外接晶振和电容,晶振一般取值为12MHZ,电容一般取值为10P~30P。
复位电路让单片机恢复到初始状态,让单片机的程序从头开始执行。AT89C52单片机的RST引脚为复位引脚,该引脚连续输入两个机器周期以上高电平时有效,机器周期是单片机完成一个基本操作所需要的时间,一个机器周期大约为12个时钟周期。下图为AT89C52的复位电路。
复位电路由一个极性电容和一个电阻串联构成,电容的正极接5V电源,负极接1K的电阻,电阻的一端接地,RST引脚接电容的负极。该电路为上电复位,当单片机在通电瞬间,确保复位端为高电位并持续大约2个机器周期。当单片机加电时,复位电路通过电容给RST端加一个高电平,此高电平信号随着对电容的充电而逐渐降低,因此要保持电容充电时间足够长来完成复位操作。
发光二极管控制电路用于控制二极管的发光状态,下图为发光二级管控制电路。
电路图的D1为发光二极管,一端接单片机P1第0位,一端接200欧姆的电阻,电阻的一端接5V电源,该电阻对电路进行限流,因为发光二级管允许流过的电流较小,所以需要串联一个几百欧姆的电阻。
在当前电路下,单片机加电后,发光二级管并不会点亮,因为单片机I/O口(包括P1口)所有位引脚都输出高电平,该电路无电流流通。前面我们使用keil编写了一个嵌入程序,该嵌入程序将P1口第0位改变为低电平,在这种情况下,该电路将有电流通过,发光二级管被点亮。
proteus安装完成后程序名称为“ISISX Professional”,其中‘X’是版本号。启动proteus,启动后的proteus工作窗口如下图所示。
展开【File】菜单,选择【New Design…】命令,或按下Ctrl+O快捷键,在弹出的“Create New Design”对话框中,选择“DEFAULT”模板,单击【OK】按钮。如下图所示。
展开【File】菜单,选择【Save Design】命令,或按下Ctrl+S快捷键,在弹出的“Save ISIS Design File”对话框,输入文件名称,单击“保存”按钮保存电路模型。
proteus提供了仿真电子元器件库,后面统称为元件库,单击下图所示的“P”按钮可以打开元件库窗口。
元件库窗口如下图。
“keywords”输入域可以输入要查找的元器件英文名称的关键词、或者元器件的型号。proteus会将与关键词或型号相匹配的项列在“Results”列表窗口,在列表窗口选择需要添加的元器件项,单击“OK”按钮即可将选择的元器件添加到当前电路模型的存储库,以备使用。
例如在“keywords”输入域输入要查找的单片机型号“AT89”,proteus会在列表窗口列出与关键词“AT89”相关的元器件,在列表窗口选择“AT89C52”单片机,proteus会在“Preview”窗口预览“AT89C52”单片机的电路模型符号。单片机型号确定后,单击“OK”按钮将选择的单片机添加到电路模型元器件库。
在电路模型元器件库选择“AT89C52”,在电路模型设计窗口合适位置单击鼠标左键,放置到单片机,并可以拖动单片机到电路模型的合适位置,位置确定后双击鼠标左键,将单片机添加到电路模型。
前面说过晶振电路需要晶振、电容、电源元器件,打开元件库,分别使用关键词“crystal”和“cap”搜索晶振和电容元器件,添加晶振、电容到电路模型元器件库。
晶振电路还需要5V的电源,用鼠标单击proteus窗口左侧工具条的“Terminals Mode”模式,该模式包含了电源(POWER)、接地(GROUND)等电路器件。如下图所示。
从“Terminals Mode”模式切换到电路模型元器件库,用鼠标单击proteus窗口左侧工具条的“Component Mode”模式即可完成切换。
从电路模型元器件库添加两个电容、一个晶振、一个接地点到电路模型,如下图所示。
为方便元器件连接,可以对元器件进行旋转。例如旋转名称为X1的晶振器件:用鼠标选中X1元器件,单击鼠标右键,在弹出的菜单中选择“Rotate Anti-clockwise”命令,X1元器件会在当前状态下逆时针旋转90度。
添加的电子元器件默认显示元器件多个参数,如元器件名称、元器件值的大小、元器件文字说明等。设计者可以自定义是否显示和修改这些参数。例如修改名称为C1的电容元器件,用鼠标选中C1元器件,双击该C1元器件,proteus会弹出C1元器件参数修改对话框,如下图所示。
在输入域“Component Reference”可以修改元器件的名称,在输入域“Capacitance”可以修改C1电容的容量,在这里修改为22pf,若不需要在电路模型显示C1电容的名称和容量,可以选上Hidden检查框。
按照上述步骤,分别修改电容器件C1和C2的容量为22pf,修改X1晶振的振荡频率为12MHZ。修改后电路模型如下图所示。
我们发现电路模型内电子元器件的文本说明没有隐藏,若需要隐藏文本说明,展开【Template】菜单,选择“Set Design Defaults……”命令,在弹出的对话框(如下图所示)去掉“Show Hidden text”检查。
元器件参数配置完成后的电路模型如下图所示。
下一步的工作是将单片机、电容、晶振、电源通过导线连接在一起,连接方式可以参照前面的晶振电路图。连接方法是将鼠标移动到元器件的一端或电路的节点,当鼠标变为绿色的铅笔时,按下鼠标左键,同时拖动鼠标绘制出导线,拖动导线到合适位置后,双击鼠标左键导线绘制完成。
绘制晶振电路时,可以分别从单片机的XTAL1脚和XTAL2脚引出导线连接C1和C2的一端,同时连接到晶振的两端,然后将C1和C2另一端分别连接到接地点。
复位电路需要一个22uF的极性电容,一个1K的电阻,一个+5V的直流电源。打开元件库,使用关键词“res”搜索电阻元器件,添加电阻到电路模型元器件库,使用关键词“cap-pol”搜索极性电容元器件,添加极性电容到电路模型元器件库。
从电路模型元器件库添加一个极性电容、一个电阻、一个电源到电路模型,如下图所示。
修改C3电容容量参数为22uf,修改R1电阻值为1K,电源默认为+5V电源,无需修改。
复位电路元器件参数配置完成后的电路模型如下图所示。
参照前面的复位电路图,将单片机、C3、R1、电源通过导线连接在一起,连接之前添加接地点到电路模型。
发光二级管控制电路需要一个200欧姆的电阻,一个发光二极管,一个+5V的直流电源。打开元件库,使用关键词“LED-RED”搜索发光二极管元器件,添加发光二极管到电路模型元器件库。
从电路模型元器件库添加一个发光二极管、一个电阻、一个电源到电路模型,修改元器件参数,调整元器件到合适位置,如下图所示。
参照前面的发光二极管电路图,将单片机、D1、R2、电源通过导线连接在一起。
实际上51单片机要正常工作,还需要在Vcc引脚接入电源,在Vss引脚或GND引脚接公共接地端。proteus默认单片机已经接电源和接地,无需再进行导线连接。
在前面的“Keil开发环境与第一个单片机实验”课程中,我们编写了控制单片机P1口第0位输出低电平的程序,程序代码如下:
#include
sbit led1 = P1^0;
void main()
{
led1 = 0;
}
51单片机只能运行HEX或BIN文件,HEX是十六进制文件,英文全称为“hexadecimal”,BIN文件是二进制文件,英文全称为binary,这两种文件可以通过软件相互转换。若需要Keil编译后输出HEX文件,需要对Keil输出选项进行配置。在Keil工作窗口,展开【Project】菜单,选择“Options for Targets”命令,在弹出的对话框中,选择“Output”标签页,确定“Create Hex File”被选中。
重新编译C源代码,在项目的输出目录可以看到扩展名为“hex”的HEX文件。
C程序编译完成后,回到proteus工作窗口,在电路模型窗口使用鼠标双击单片机,或选中单片机后单击鼠标右键,在弹出的菜单中选择“Edit Properties”命令,proteus弹出Edit Component对话框(见下图),选择使用keil编译的HEX文件,单击【OK】按钮即可装载C程序到单片机。
在电路模型内仿真运行前面装载的单片机程序,运行程序有两种方式:一种方式是展开【Debug】菜单,选择“Start/Restart Debugging”命令来运行程序;一种方式是用鼠标单击调试工具条的启动按钮(见下图)来运行程序。
程序运行后电路模型各端口状态如下图所示。
观察电路模型状态,D1发光二级管已经点亮,蓝色方块表示该端口为低电平,红色方块表示该端口为高电平,灰色方块表示电压不确定。下一节实验课程解释P0口电压不确定的问题。
通过这次实验,掌握了proteus设计单片机电路模型的过程,并仿真运行由Keil编写的嵌入式C程序,点亮了发光二极管。下次实验目标主要是应用proteus结合keil对嵌入式程序进行源代码级调试,并解释在实验过程中,P0口电压不确定的问题。
全部0条评论
快来发表一下你的评论吧 !