农行冯建龙:Proteus 仿真库简介

来源:百度文库 编辑:中财网 时间:2024/04/30 23:28:00

Proteus 仿真库简介

2008-12-15 19:38

Proteus 仿真库简介

2007-12-14 19:18

元件名称 中文名 说明
7407 驱动门
1N914 二极管
74Ls00 与非门
74LS04 非门
74LS08 与门
74LS390 TTL 双十进制计数器
7SEG 4针BCD-LED 输出从0-9 对应于4根线的BCD码
7SEG 3-8译码器电路BCD-7SEG转换电路
ALTERNATOR 交流发电机
AMMETER-MILLI mA安培计
AND 与门
BATTERY 电池/电池组
BUS 总线
CAP 电容
CAPACITOR 电容器
CLOCK 时钟信号源
CRYSTAL 晶振
D-FLIPFLOP D触发器
FUSE 保险丝
GROUND 地
LAMP 灯
LED-RED 红色发光二极管
LM016L 2行16列液晶 可显示2行16列英文字符,有8位数据总线D0-D7,RS,R/W,EN三个控制端口(共14线),工作电压为5V。没背光,和常用的1602B功能和引脚一样(除了调背光的二个线脚)
LOGIC ANALYSER 逻辑分析器
LOGICPROBE 逻辑探针
LOGICPROBE[BIG] 逻辑探针 用来显示连接位置的逻辑状态
LOGICSTATE 逻辑状态 用鼠标点击,可改变该方框连接位置的逻辑状态
LOGICTOGGLE 逻辑触发
MASTERSWITCH 按钮 手动闭合,立即自动打开
MOTOR 马达
OR 或门
POT-LIN 三引线可变电阻器
POWER 电源
RES 电阻
RESISTOR 电阻器
SWITCH 按钮 手动按一下一个状态
SWITCH-SPDT 二选通一按钮
VOLTMETER 伏特计
VOLTMETER-MILLI mV伏特计
VTERM 串行口终端
Electromechanical 电机
Inductors 变压器
Laplace Primitives 拉普拉斯变换
Memory Ics  
Microprocessor Ics  
Miscellaneous 各种器件 AERIAL-天线;ATAHDD;ATMEGA64;BATTERY;CELL;CRYSTAL-晶振;FUSE;METER-仪表;
Modelling Primitives 各种仿真器件 是典型的基本元器模拟,不表示具体型号,只用于仿真,没有PCB
Optoelectronics 各种发光器件 发光二极管,LED,液晶等等
PLDs & FPGAs  
Resistors 各种电阻
Simulator Primitives 常用的器件
Speakers & Sounders
Switches & Relays 开关,继电器,键盘
Switching Devices 晶阊管
Transistors 晶体管(三极管,场效应管)
TTL 74 series  
TTL 74ALS series  
TTL 74AS series  
TTL 74F series  
TTL 74HC series  
TTL 74HCT series  
TTL 74LS series  
TTL 74S series  
Analog Ics 模拟电路集成芯片
Capacitors 电容集合
CMOS 4000 series  
Connectors 排座,排插
Data Converters ADC,DAC
Debugging Tools 调试工具
ECL 10000 Series

 

 

 

 

 

Proteus软件使用方法 一

发起投票 | 删除

       Proteus软件是Labcenter Electronics公司的一款电路设计与仿真软件,它包括ISIS、ARES等软件模块,ARES模块主要用来完成PCB的设计,而ISIS模块用来完成电路原理图的布图与仿真。Proteus的软件仿真基于VSM技术,它与其他软件最大的不同也是最大的优势就在于它能仿真大量的单片机芯片,比如MCS-51系列、PIC系列等等,以及单片机外围电路,比如键盘、LED、LCD等等。通过Proteus软件的使用我们能够轻易地获得一个功能齐全、实用方便的单片机实验室。

本文中由于我们主要使用Proteus软件在单片机方面的仿真功能,所以我们重点研究ISIS模块的用法,在下面的内容中,如不特别说明,我们所说的Proteus软件特指其ISIS模块。

          在进行下面的操作前,我先说明一点:我的Proteus版本是7.1,如果你使用的是6.9以前的版本,可能你发现在鼠标操作上会略有不同。这主要表现在6.9以前的版本鼠标左右键的作用与一般软件刚好相反,而7.0以后已经完全改过。

下面我们首先来熟悉一下Proteus的界面。Proteus是一个标准的Windows窗口程序,和大多数程序一样,没有太大区别,其启动界面如下图所示:

如图中所示,区域①为菜单及工具栏,区域②为预览区,区域③为元器件浏览区,区域④为编辑窗口,区域⑤为对象拾取区,区域⑥为元器件调整工具栏,区域⑦为运行工具条。

下面我们就以建立一个和我们在Keil简介中所讲的工程项目相配套的Proteus工程为例来详细讲述Proteus的操作方法以及注意事项。

首先点击启动界面区域③中的“P”按钮(Pick Devices,拾取元器件)来打开“Pick Devices”(拾取元器件)对话框从元件库中拾取所需的元器件。对话框如下图所示:

在对话框中的“Keywords”里面输入我们要检索的元器件的关键词,比如我们要选择项目中使用的AT89C51,就可以直接输入。输入以后我们能够在中间的“Results”结果栏里面看到我们搜索的元器件的结果。在对话框的右侧,我们还能够看到我们选择的元器件的仿真模型、引脚以及PCB参数。

这里有一点需要注意,可能有时候我们选择的元器件并没有仿真模型,对话框将在仿真模型和引脚一栏中显示“No Simulator Model”(无仿真模型)。那么我们就不能够用该元器件进行仿真了,或者我们只能做它的PCB板,或者我们选择其他的与其功能类似而且具有仿真模型的元器件。

搜索到所需的元器件以后,我们可以双击元器件名来将相应的元器件加入到我们的文档中,那么接着我们还可以用相同的方法来搜索并加入其他的元器件。当我们已经将所需的元器件全部加入到文档中时,我们可以点击“OK”按钮来完成元器件的添加。

添加好元器件以后,下面我们所需要做的就是将元器件按照我们的需要连接成电路。首先在元器件浏览区中点击我们需要添加到文档中的元器件,这时我们就可以在浏览区看到我们所选择的元器件的形状与方向,如果其方向不符合你的要求,你可以通过点击元器件调整工具栏中的工具来任意进行调整,调整完成之后在文档中单击并选定好需要放置的位置即可。接着按相同的操作即可完成所有元器件的布置,接下来是连线。事实上Proteus的自动布线功能是如此的完美以至于我们在做布线时从来都不会觉得这是一项任务,而通常像是在享受布线的乐趣。布线时我们只需要单击选择起点,然后在需要转弯的地方单击一下,按照你所需走线的方向移动鼠标到线的终点单击即可。本例我们布线的结果如下图所示(仿真我们在上面的Keil操作介绍中的简单例子)。

因为该工程十分简单,我们没有必要加上复位电路,所以这点在图中予以忽略,请大家注意。除此以外,你可能还发现,单片机系统没有晶振,这一点你需注意。事实上在Proteus中单片机的晶振可以省略,系统默认为12MHz,而且很多时候,当然也为了方便,我们只需要取默认值就可以了。

下面我们来添加电源。先说明一点,Proteus中单片机芯片默认已经添加电源与地,所以我们可以省略。然后在添加电源与地以前,我们先来看一下上面第一个图中区域⑤的对象拾取区,我们在这里只说明本文中可能会用得到的以及比较重要的工具。

l :(Selection Mode)。选择模式,通常情况下我们都需要选中它,比如布局时和布线时。

    

l :(Component Mode)。组件模式,点击该按钮,能够显示出区域③中的元器件,以便我们选择。

l    :(Wire Label Mode)。线路标签模式,选中它并单击文档区电路连线能够为连线添加标签。经常与总线配合使用。

l   :(Text Script Mode)。文本模式,选中它能够为文档添加文本。

l    :(Buses Mode)。总线模式,选中它能够在电路中画总线。关于总线画法的详细步骤与注意事项我们在下面会进行专门讲解。

l :(Terminals Mode)。终端模式,选中它能够为电路添加各种终端,比如输入、输出、电源、地等等。

l :(Virtual Instruments Mode)。虚拟仪器模式,选中它我们能够在区域③中看到很多虚拟仪器,比如示波器、电压表、电流表等等。关于它们的用法我们会在后面的相应章节中详细讲述。

好了,下面我们就来添加电源。首先点击 ,选择终端模式,然后在元器件浏览区中点击POWER(电源)来选中电源,通过区域⑥中的元器件调整工具进行适当的调整,然后就可以在文档区中单击放置电源了。放置并连接好线路的电路图一部分如下图:

连接好电路图以后我们还需要做一些修改。由上图我们可以看出,图中的R1电阻值为10k,这个电阻作为限流电阻显然太大,将使发光二极管D1亮度很低或者根本就不亮,影响我们的仿真结果。所以我们要进行修改。修改方法如下:首先我们双击电阻图标,这时软件将弹出“Edit Component”对话框(见下图所示的对话框),对话框中的“Component Referer”是组件标签之意,可以随便填写,也可以取默认,但要注意在同一文档中不能有两个组件标签相同;“Resistance”就是电阻值了,我们可以在其后的框中根据需要填入相应的电阻值。填写时需注意其格式,如果直接填写数字,则单位默认为Ω;如果在数字后面加上K或者k,则表示kΩ之意。这里我们填入270,表示270Ω。

修改好各组件属性以后就要将程序(HEX文件)载入单片机了。首先双击单片机图标,系统同样会弹出“Edit Component”对话框,如下图。在这个对话框中我们点击“Program files”框右侧的 ,来打开选择程序代码窗口,选中相应的HEX文件后返回,这时,按钮左侧的框中就填入了相应的HEX文件,我们点击对话框的“OK”按钮,回到文档,程序文件就添加完毕了。

装载好程序,我们就可以进行仿真了。首先来熟悉一下上面第一个图中区域⑦的运行工具条。因为比较简单,我们只作一下介绍。

工具条从左到右依次是“Play”、“Step”、“Pause”、“Stop”按钮,即运行、步进、暂停、停止。下面我们点击“Play”按钮来仿真运行,效果如下图所示,可以看到系统按照我们的程序在运行着,而且我们还能看到其高低电平的实时变化。如果我们已经观察到了结果就可以点击“Stop”来停止运行。

proteus软件使用方法 二

2008-11-18 20:50

计算机仿真辅助单片机指令系统学习

计算机仿真对单片机指令系统的学习的帮助主要在于帮助理解,加强记忆,适当应用。能够在单片机指令系统学习中的软件主要是MedWin,因为其操作简单,而且可以直观地看到结果。

1.数据传送指令:

数据传送类指令主要包括:MOV、MOVX、MOVC、PUSH、POP、XCH等。

下面我们通过一个简单的汇编程序来学习这些指令。

例1.汇编语言源文件如下图所示:

在MedWin中编辑好源文件以后,以“.asm”为后缀保存为汇编源文件。然后进行编译、汇编并将代码装入内存进行仿真。由于本程序对寄存器、特殊功能寄存器、内部存储器、外部数据存储器都进行了操作,所以需要首先点击“查看”菜单下的相应子菜单打开相应的窗口,即寄存器、特殊功能寄存器、数据区IData、数据区XData,并可以根据需要点击“窗口”菜单下的选项来横向或纵向平铺窗口。

因为本程序需要一步一步地详细查看相应指令执行的结果,所以我们需要在执行指令时点击“指令跟踪(F7)”或“指令单步(F8)”按钮来单步执行。

指令执行中的一个画面如下图所示:

从图中我们能够清晰地观察到每一条指令执行的每一个结果,从而加深我们对这些指令的理解与记忆。

除以上实例程序中所书写的以外,我们还可以使用其他的指令书写程序并在MedWin中仿真,比如PUSH、POP、MOVC等,相信你会得到一个很好的结果,而且MedWin肯定会提高你学习指令的兴趣。

2.算术操作类指令

算术操作类指令主要有:ADD、ADDC、DA A、SUB、INC、DEC、MUL、DIV等。

算术操作类指令比较复杂,掌握起来比较困难,但在实际的单片机项目应用中很少涉及,尤其是MUL、DIV两条指令,在51系列单片机中更是被束之高阁,很少使用。

此处,我们不再像上节那样逐条书写并仿真课本上的程序,如果感兴趣,你可以仿照上节自己书写程序并进行仿真,观察并体会每一条指令执行的结果以及对系统的影响。这里我们通过一个比较实用的例子来演示仿真算术类指令的操作。

例2.两个压缩BCD码求和:将两个BCD码(每个占4位)分别放在一个字节的高4位和低4位即组成压缩BCD码。本例中有两个压缩BCD码数字,都是四位数,第一个数的高两位放在20H,低两位放在21H中;第二个高低位分别放在30H、31H中。要求所得结果放在40H、41H中。

汇编源程序如下图:

在MedWin中编辑好源文件后,以“.asm”为后缀将其保存为汇编文件,然后进行编译、汇编并将代码装入内存进行仿真。你可以像上例那样步进观察其详细执行过程,分析原因;当然也可以在“ljmp  $”处设置断点,然后全速运行。需要注意程序中使用到了内部存储器,所以你需要将数据区“IData”窗口调出来进行观察。运行的最后结果如下图所示:

从图中我们能够很清楚地看到内部存储器相应单元的内容,进而观察到程序执行的结果,即:2097+4559=6656。

3.逻辑运算指令、控制转移类指令

逻辑运算指令,顾名思义,是用于逻辑运算的指令。主要包括:CLR、CPL、ANL、ORL、XRL等常用逻辑指令以及循环移位指令如:RL、RLC、RR、RRC等。

控制转移类指令是指在程序中根据具体的条件(或者没有条件)使程序转移到相应的入口的指令。它主要包括三类指令:一是无条件转移指令,比如:AJMP、SJMP、LJMP等;二是条件转移指令,比如:JZ、CJNE、DJNZ等;三是子程序调用返回指令,比如:ACALL、LCALL、RET、RETI等。

鉴于单独针对逻辑运算指令进行的仿真十分简单(事实上与数据传送类指令相同),可以很容易、很方便地自己针对相应的指令设计程序来观察结果,进行学习。所以此处不再针对逻辑运算指令举例仿真。而控制转移类指令又不可能单独使用,往往与其他指令结合使用来组成相应的程序,所以也无法单独进行仿真。所以下面我们就将逻辑运算类指令与控制转移类指令相结合来编写仿真程序,通过一个实例同时来仿真这两类指令的应用。

例3.十六进制整数转化为BCD码整数:4位十六进制整数高低位依次放在R3、R4中,要求转换后的BCD整数按高低位顺序放在R5、R6、R7中。

程序源文件如下图:

在MedWin中编辑好源文件以后,将其以“.asm”为后缀保存为汇编源文件,然后编译、汇编并将产生的代码装入内存进行仿真调试。仿真前需要注意首先输入R3、R4设置十六进制初始值,具体设置方法如下。首先调出寄存器窗口,然后在需要修改的寄存器名称或者数值上双击,这时其内容将变为可修改,我们在其中填入需要设置的数值(字母大小写均可)即可,如下图所示:

设置好初始值以后,你可以单步观察几步以便明白其原理,然后就可以设置一个断点全速运行了,最后就可以看到所得到的结果,比如我们输入8FD6,将得到结果:R5=03,R6=68,R7=22。

4.位操作指令

位操作比较简单,我们也不再写实例进行仿真,如果你感兴趣,可以自己写一些针对相应指令的小程序来仿真之。

这里我们主要说明一下仿真位操作指令与其他指令的不同及注意事项。

位操作指令是对单片机内部存储器的位地址空间进行的相应操作,所以我们查看相应结果时应该打开相应窗口。单片机的位地址空间可以这样来打开:点击“查看”菜单下面的“数据区 Bit”子菜单。位地址空间窗口如下图所示:

Proteus软件使用方法 三

2008-11-18 20:53

Proteus仿真辅助定时器/计数器的学习

2008年

MCS-51系列单片机内部有两个定时器/计数器T0、T1,它们都具有两种工作模式(定时器和计数器)以及四种工作方式(方式0、1、2、3)。

定时器/计数器T0由特殊功能寄存器TH0和TL0构成,T1由特殊功能寄存器TH1和TL1构成。除此之外,与定时器/计数器有关的特殊功能寄存器还有工作方式控制寄存器TMOD和控制寄存器TCON。关于它们的详细内容和具体应用请参阅相关参考文献,此处不做探讨。

由于定时器/计数器T0与T1用法几乎完全相同,所以下面的例子中我们将全部使用T0。而且定时器/计数器方式0和方式3较少使用,因此我们也将主要仿真说明其方式1和2的用法,另外我们还会给出一种其计数器的用法。

例1.定时器/计数器T0工作于定时器模式方式1,在P1.0端口产生周期为100ms的方波。

首先计算计数初值:周期为100ms,定时应为50ms(半个周期)。一个计算公式为:

计数初值=216-t×f/12

其中t为定时时间(单位为s),f为单片机的时钟频率(单位为MHz)。

所以,计数初值为216-0.05×12M/12=15536=3CB0H。因此,TH0的初值应为3CH,TL0的初值应为B0H。

因此,此例的源代码如下图:

在MedWin中将源文件编辑完成以后,保存为汇编源文件并编译、汇编产生源代码(.HEX文件)。

下面我们在Proteus中设计电路,此例电路也比较简单,只需在AT89C51单片机的P1.0口连上一个示波器来观察产生的相应波形就可以了。选择示波器时要注意首先在前面的文章“我的毕业论文(三):Proteus软件的基本用法”中第一个图:Proteus界面里面的区域⑤点击按钮 选择虚拟仪器模式,然后在区域③中选择“OSCILLOSCOPE”(示波器)。

完成的电路图如下图所示:

构建好电路图以后,下面就可以为单片机添加程序代码(.HEX文件)了。双击单片机图标,添加上面的源文件所生成的程序代码,添加好以后,接着就可以进行下面的仿真。点击运行按钮,系统就运行了起来,我们可以适当调整示波器面板上的按钮来使波形最有利于我们观察。调整好以后,系统产生的波形效果如下图所示:

如果你的Proteus版本是7.0以前的版本,那么你的示波器和波形效果可能与图中略有不同,但并不影响仿真效果;如果是最新版本,则应该完全相同。

从图中我们能够看出,波形的周期为100ms,这与我们设定的目标相一致;而其幅值则近似为5V。

例2.设计一个延时程序,延时500ms。为了能够清晰地看到延时效果,我们设计在P1.0口连接一个LED发光二极管,使其使用该延时程序每500ms闪烁一次。

通常情况下,为了简便,人们会使用软件延时,即通过执行一段没有意义的程序来达到延时的目的。但那样做会浪费系统资源,使得系统在延时过程中不能响应任何外部或内部事件。所以,人们对其做了改进,而通过定时器/计数器定时来进行延时。

由于方式2定时时间过短(12MHz下最大250μs左右),所以,此处我们仍然选用方式1。但方式1在12MHz下的最大定时时间也只有60多ms,仍然不能满足延时要求。所以,延时程序需要软硬件协作。即我们可以这样去做,通过硬件T0延时50ms,然后设置一个计数器,当计数器计到10时,我们延时的目标就达到了。

源程序如下图:(计数器初值计算与上例相同)

将上面的源文件保存为汇编文件,然后进行编译/汇编,并生产源代码装入内存在MedWin中仿真运行看延时效果(可以通过指令单步执行“lcall dly500”一句观察指令执行时间,则实际执行时间就是延时时间)。结果发现,实际执行中该延时程序比我们的要求多延时了87μs,这是因为延时程序中还插入了其他指令(比如设置T0模式等),所以我们的延时程序不是十分精确,实际应用中我们可以通过调整T0初值来稍作调整,但此处对延时要求并不精确,所以我们就不再做调整了。

下面我们可以在Proteus中构建电路来观察我们的延时效果。电路图十分简单,如下图所示:

注意LED的阴阳极不要接反,图中的限流电阻在模拟时可以略去,但如果添加上的话,最好阻值不要设置的过大,以免LED发光太弱,影响观察效果。

设置好电路图以及各元器件的属性以后,我们就可以点击仿真按钮来观察效果了。可以看到,LED按照大约0.5s的周期开始闪烁。

例3.定时器/计数器的计数功能。本例使用T1对外部脉冲进行计数,每计数一次,与P1口相连的8个LED发光二极管的亮灯个数和位置就按照它们的顺序所表示的BCD码(亮灯代表1,灭灯为0)做加法。比如开始为29(00101001),计数一次以后,对应的数字变为30(00110000)。这里我们用按键来模拟外部脉冲,每按一次,表示产生一个脉冲。

显然,根据要求,我们可以使T1工作于计数器方式2,而且我们可以设置其初值为FF,这样,外部产生一个脉冲,T1检查到就会发生中断,然后我们在中断子程序中按要求进行处理。

其源程序如下图所示:

将上面在MedWin中编辑好的源文件保存为汇编文件,然后进行编译/汇编,并产生相应的源代码(.HEX文件)。注意因为Proteus仿真电路的按键为理想按键,所以程序设计时并没有考虑按键的抖动,但在实际应用中应该注意,否则将可能实现不了预期目的。另外,本例为了仿真的方便,设置T1计数器的初值为FFH,实际应用中可以灵活地根据相关要求进行改动。

然后我们根据题中要求设计电路。设计好的电路图如下图所示:

设计电路图时要注意因为本电路图中需要较多的限流电阻(如果添加的话),所以在绘制电路图时考虑用排阻来进行代替。图中RP1就是一个8×的排阻。Proteus中提供了几种排阻,你可以使用关键词“respack”进行查找。

设计好电路图,我们就可以将上面汇编源文件产生的源代码装入单片机,然后进行仿真。仿真时使用鼠标点击按键,你可以看到LED按照BCD码

Proteus软件使用方法 四

2008-11-18 20:59

Proteus仿真辅助中断功能的学习

MCS-51系列单片机具有5个中断源,2个中断优先级,可以实现2级中断服务程序嵌套。5个中断源分别为:两个外部输入中断源INT0(P3.2)和INT1(P3.3),中断请求标志分别为IE0和IE1;2个内部定时器/计数器的溢出中断源T0(计数时P3.4输入)和T1(计数时P3.5输入),中断请求标志分别为TF0和TF1;串口中断请求源,其中断请求标志为RI或TI。

中断请求标志位分布在特殊功能寄存器TCON(IE0、IE1、TF0、TF1)和SCON(RI、TI)中。与中断有关的特殊功能寄存器除它们以外还有中断允许寄存器IE和中断优先级寄存器IP。这些寄存器都能够进行位寻址。此处不再对它们进行详细的探讨。关于它们的详细情况和具体功能以及中断的其他知识请参阅相关参考文献,此处我们从略。

事实上,关于中断我们在上一篇文章中讨论定时器/计数器时已经对T0、T1的相关中断进行过较为详尽的讨论和举例。而关于串口中断,我们会在下节讲解串口时进行相应的讨论,所以本节我们只简单讨论一下外部中断INT0和INT1,并举例分析。

例1.外部中断INT0和INT1同时存在。和上篇文章中的例3一样,P1口连接8个LED发光二极管,两个按键分别接到外部中断INT0和INT1。正常情况下,8个LED闪烁发光。当INT0发生中断时,使P1口的8个LED做一个灯的左移右移两次;当INT1发生中断时,使P1口的8个LED做两个灯的左移右移两次。

此例的源程序如下图所示:

源文件编辑结束以后,将源文件保存为汇编文件,然后进行编译/汇编,并产生相应的源代码以便下面仿真使用。

下面我们在Proteus中绘制电路,此例电路图和上篇文章中最后一例的电路图大体相同,只不过将接在P3.5的按键改为接在P3.2和P3.3的INT0和INT1的中断请求输入端。绘制好的电路图如下图所示:

电路设计好以后,我们就可以将上面生成的源代码装入单片机,然后进行仿真了。可以看到,仿真开始时,8个LED作大约0.2S间隔的闪烁;当我们按下INT0口的按键时,LED作一个灯的左移右移两次;当我们按下INT1口的

Proteus仿真辅助串口功能的学习

MCS-51系列单片机内部有一个可编程全双工串行通信接口,具有UART(Universal Asynchronous Receiver/Transmitter,通用异步收发器)功能。它有四种工作方式,可由软件设定;它的波特率也可由软件设置片内的定时器/计数器来进行控制。

与串口相关的特殊功能寄存器主要有串口控制寄存器SCON和电源控制寄存器PCON。其中需要注意的是PCON不可位寻址。

51系列单片机的串口主要用来进行串口数据通信,除此以外,它还可以用来非常方便地扩展并行IO口,可以扩充输入或者输出。本节我们主要通过实例来说明其在串行数据通信的应用及其在扩展IO口上的应用,考虑到篇幅,我们只举以下二例。

例1.两个AT89C51的双机通信。其中一个单片机P1口外接8个按键(事实上可以用拨码开关来代替,但Proteus中没有这个器件的仿真模型),第二个单片机P2口外接8个LED灯,使用双机串口通信将第一个单片机的拨码开关的状态发送到第二个,并在第二个单片机的LED灯上显示出相应状态。

我们取两机串口都工作于方式1,由定时器T1和SMOD控制其波特率,设T1工作于定时模式方式2,SMOD取0,取波特率为4800bit/s。则因为计算波特率公式

波特率=2SMOD/32×f/(12×(28-X))

其中,f为单片机时钟频率,X为定时器初值。

所以,我们可以得到T1计数初值为:FAH(此处为了精确,我们取f=11.0592MHz)。

源文件如下所示:

发送程序如下图:

接收程序如下图:

源文件编辑结束以后,将源文件保存为汇编文件,然后进行编译/汇编,并产生相应的源代码,准备用于仿真。

下面我们来设计电路。首先在电路图中放置两片AT89C51芯片,并将它们的P3.0(RXD)和P3.1(TXD)引脚交叉相连。然后在片一的P1口连接8个按键;片二的P2口连接上8个LED。最终结果如下图所示:

在进行仿真以前,我们需要来再熟悉一下Proteus的按键。

如上图所示,仿真时我们可以点击键帽,但当我们松开鼠标时,按键就弹开了;我们还可以点击键帽右侧的标有上下箭头的红黑色小圆圈,此时当我们松开鼠标时,键帽不会弹开,按键一直保持着按下的状态,只有当我们再次点击小圆圈时,键帽才会弹开,按键才会改变状态。此例我们就需要这种属性来根据要求进行我们的仿真。

设计好电路图以后,我们就可以装入相应的程序了。注意装入程序时不要发生错误,要将相应的源代码装入相应的单片机。然后进行仿真,可以通过点击相应的按键来改变状态,进而观察到LED的状态。可以看到,串口通信得到了实现。仿真中的一个画面如上面电路图中的效果所示。

例2.串口扩充并行IO口输出。单片机的串口扩充的8位并行IO口上外接8个LED,然后从串口输出数据实现8个LED左移2次,闪烁2次的循环。

串口扩充并行口时,串口工作于方式0:同步移位寄存器方式,波特率固定,数据由RXD端输出,移位时钟由TXD送出。使用74LS164串入并出移位寄存器。

本例源文件如下图:

源文件编辑结束以后,将其保存为汇编文件,然后进行编译/汇编,并产生相应的源代码,准备用于仿真。

然后我们来绘制电路图。电路图比较简单,如下图所示,此处不再详述。但有一点需要注意:此前的排阻不能使用了,因为那些都是多输入单输出,不能符合此例要求。

此处我们换作另外一种8输入8输出的排阻(见上图中RN1),你可以在Proteus中用关键词“RX8”进行查找。设计好的电路图如上图所示。

电路图设计好以后,我们就可以将上面产生的代码装入单片机了。装入以后进行仿真,仿真中的一个画面也可以从上图看到。

Proteus软件使用方法 六

2008-11-18 21:04

Proteus仿真辅助继电器的学习

继电器是一种功率开关器件,它能够实现弱电控制强电的功能。下面我们以一个例子来说明继电器的使用和仿真。

例.单片机的P2.0引脚接一开关,使用该开关来控制接在P2.7引脚上的继电器,进而达到控制电灯的目的。当然,此例在实际中是没有任何意义的,也根本没有必要。此处主要用来说明继电器的作用,即通过弱电来控制强电。实际应用中,可能不是来控制一个电灯泡,而是来控制大功率发动机的起停。

本例源程序十分简单,如下图所示:

源文件编辑结束以后,将其保存为汇编文件,然后进行编译/汇编,并产生相应的源代码,准备用于仿真。

下面我们来编辑电路图。本例的电路图也较为简单,但有两点需要注意。

一是继电器,在Proteus中有很多继电器模型,出于仿真的目的,我们只需选择一种较为简单的模型即可,你可以用关键词“Relay”来进行查找。

二是继电器的工作电压与仿真系统的默认电压不兼容的问题。系统默认电压为5V,而继电器需要12V,电压不足,继电器不动作。所以我们需要进行相应的修改。这里有两种方法,或者我们改变继电器的工作电压为5V,你可以双击继电器图标,然后进行修改;或者我们改变系统的默认电压,方法如下:点击“Design”菜单下面的“Configure Power Rails...”子菜单,系统将弹出“Power Rail Configuration”对话框,如下图所示:

然后我们在该对话框中的“Name”属性右侧的下拉菜单中选择图中的“VCC/VDD”,接着在其右面的“Voltage”框中输入我们需要的数值即可,此处我们取12V。但是由于改变系统默认电压牵一发而动全身,所以不到迫不得已我们不推荐这种方法,此处我们推荐采用第一种方法。

最后设计好的电路图如下图所示:

关于电路我们还有几点需要说明:

(1)图中Q1是一个PNP三极管,通过P2.7输出高低电平来控制其通断,进而达到控制继电器工作的目的。需要注意由于单片机引脚的驱动能力有限,在实际应用中我们经常使用这种大功率晶体管控制电路。不过有时我们可能会在其基极与单片机引脚之间接上一个电阻。

(2)P2.0引脚上的开关和我们前面使用的按键类似,可以使用关键词“Switch”查找。

(3)图中BAT1是一块电池,提供直流12V电压,可以用关键词“Battery”进行搜索;L1是一个灯泡,此例用来指示继电器动作的状态,可以使用关键词“Lamp”进行查找。

设计好电路并装入我们上面的程序所产生的源代码以后,就可以进行仿真了。点击仿真按钮,然后我们就可以通过开关的通断来控制继电器的动作,进而达到控制灯泡的亮灭了。

Proteus软件使用方法 七

2008-11-18 21:09

Proteus仿真辅助数码管的学习

数码管又称LED数码管,它是由7段或8段LED构成的显示器件。有共阴极和共阳极两种。按其显示方式则可分为静态显示方式和动态显示方式两种。关于数码管的其他知识请参阅相关参考文献,此处不作讨论。下面我们将主要讲述数码管显示的仿真。

1.静态显示方式

静态显示方式较为简单,编程十分容易,但占用IO口线较多。实际使用中不太多见。下面我们就通过一个简单的例子来予以说明。

例1.单片机的P2口接一个共阳极数码管,利用该数码管显示从0到9,然后返回到0的循环。

该例子较为简单,源文件如下图:

源文件编辑结束以后,将其保存为汇编文件,然后进行编译/汇编,并产生相应的源代码,准备用于仿真。

下面我们编辑电路图。此例的电路图十分简单,只需将一个共阳极数码管连到单片机的P2口即可。数码管使用关键词“7Seg”进行查找。可以看到有很多结果,注意区分共阳极“Anode”和共阴极“Cathode”即可。这里我们选用较为简单的“7SEG-COM-ANODE”数码管。

最后得到的电路图如下图所示:

绘制好电路图,我们就可以将前面所生成的源代码装入单片机,然后点击仿真按钮进行仿真。

可以看到数码管显示的数字按照我们程序中设定的要求进行变化着,仿真中的一个画面如上图所示。

2.动态显示方式

动态显示方式是一种相对较为高级的显示方式,它编程较为复杂,但占用IO口线少,达到了节约硬件资源的目的,实际使用中较多利用。下面我们也利用一个实例来详细说明这种显示方式。

例2.数码管动态显示方式。单片机P2口接一个二位数码管的8位段码线,P3口的低二位接数码管的两位位码线。程序使得二位数码管做0到99的循环显示。

该例源文件如下图所示:

源文件编辑结束以后,将其保存为汇编文件,然后进行编译/汇编,并产生相应的源代码,准备用于仿真。

接下来我们绘制电路图。此例电路图比较简单,如下图所示,但有几点需要注意:

(1)单片机的IO口的驱动能力有限,所以此例我们选用了大功率晶体管驱动电路,即图中的两个NPN三极管,单片机通过控制它们的通断来达到控制位码的目的。

(2)关于数码管,此例我们选用了2位的共阳极数码管7SEG-MPX2-CA,这样可以方便我们连线和使用。而且由于我们的例子中没有用到小数点(DP),所以为了简便在图中我们没有连接P2.7和DP引脚。当然,如果你连接好这个引脚,仿真结果不会受到任何影响,因为在段码表中,P2.7引脚一直输出的都是高电平,也就是说小数点一直处于熄灭状态。

绘制好电路图,就可以点击仿真按钮进行仿真了。仿真中的一个效果如上图所示。

3.事实上,在实际的应用中我们还可以选用数码管显示驱动译码芯片来达到控制数码管显示的目的。常用的这类芯片有CD4511、MAX7219等。关于这些芯片的使用方法请参阅相关参考文献,此处我们仅以MAX7219为例来简单介绍一下这类芯片的使用。

例3.单片机使用MAX7219接8个数码管,初始时利用这些数码管从左到右显示7到0,然后依次将最右侧的数字移到最左侧显示。

鉴于C51语言在此类程序编写中的明显优势,此例我们将使用C51语言进行编写,源文件如下:

在Keil中编辑好源文件以后,进行编译、链接,并生成源代码(.HEX文件)。注意生成.HEX文件时要按照前面的文章中的相应介绍进行设置。

然后我们来绘制电路图。本例的电路图较为简单,MAX7219与数码管连接的段码和位码在芯片上已经标识明确,直接相连即可;唯独需要注意的就是要按照前面程序中定义的那样,将MAX7219的DN、CLK、LOAD三引脚分别与单片机AT89C51的P1.0、P1.1、P1.2引脚相连。如下图所示,此处我们就不再作其他说明了。

绘制好电路图以后,将我们刚才生成的源代码装入单片机,然后仿真运行,就可以看到我们所希望的效果了,仿真中的一个画面如上图所示。

Proteus软件使用方法 八

2008-11-18 21:11

Proteus仿真辅助LED点阵的学习

LED点阵是由LED构成的点数为8×8、16×16的点阵显示器,它可以用来显示数字、字母以及汉字等。使用十分灵活,应用较为广泛,比如大街上随处可见的LED电子广告牌。

下面我们通过一个实例来简单介绍LED点阵的使用和仿真。

例.使用一块8X8的LED点阵来显示一个向左循环移动的数字“1”。

此例比较简单,但需要注意的新东西有很多。一是8X8LED点阵,它的行列扫描。二是关于字模,网上有很多字模软件可供下载,但针对8X8LED点阵的比较少。因为数字“1”的字模比较简单,我们可以自己写出来。

由于C51语言的方便性,此处我们仍然采用其来书写,源文件如下图:

编辑好源文件以后,在Keil中进行编译、链接、并生成相应的工程源代码。

然后,我们就开始绘制电路图。关于本例的电路图,我们需要说明的是,由于采用总线方式绘制电路可以很大程度上使得电路图简化、美观,所以,此处我们将采用总线方式来绘制电路。关于总线的知识请参阅相关参考文献,此处我们只简单叙述一下在Proteus中如何绘制我们需要的总线。

采用总线方式绘制电路,首先要点击前面的“Proteus简介”一文中Proteus界面图区域⑤对象拾取区中的总线按钮,使系统进入绘制总线模式。这样你就可以在你需要绘制总线的地方单击像绘制一般连线一样来绘制总线了,需要注意在你想要结束总线的地方双击才能结束总线的绘制。绘制好总线以后,我们可以先在需要与总线连接的各个线端来添加相应的标签(Label)。首先点击上述区域⑤对象拾取区中的添加标签按钮,使系统进入添加标签模式。然后你就可以在需要添加标签的线端上点击鼠标,系统将会弹出编辑标签对话框(Edit Wire Label)。我们只需在其中的“Label”选项卡的“String”框中填入我们需要的标签并点击确定(OK),就完成了相应标签的添加。添加好标签以后,接下来就要绘制各总线分支。绘制总线分支时需要注意按一下“Ctrl”键,你会发现连线方向已经按照你所需要的方向(45°)偏转了。在连接好总线分支以后,总线绘制就完成了。然后再稍作修饰,最后完成的电路图如下图所示:

绘制好电路图,我们就可以将上面产生的源代码装入单片机进行模拟仿真了。可以看到8X8LED点阵已经按照我们的要求开始循环显示数字“1”

Proteus软件使用方法 九

2008-11-18 21:13

Proteus仿真辅助LCD(液晶显示器)的学习

LCD就是液晶显示器,液晶显示器正在以其低功耗、高性价比以及方便实用的特性而成为单片机系统的一个重要输出器件。

关于LCD显示器的详细知识请参阅相关书籍和参考文献,此处我们只通过一个简单实例来说明LCD的用法。

例.使用Proteus中的128×64点阵图形液晶显示器来显示字符“郑州大学物理工程学院”。

首先我们要生成字符的字模,这需要通过字模软件来完成。网上有很多免费的字模软件可供下载使用,此处使用字模软件HZDotReader来生成。关于字模软件的用法请参阅相关书籍,此处也不再赘言。

生成好字模以后,因为软件设计与电路图有关,所以,我们首先来绘制例子所需要的电路图。此例选用的LCD器件是“AMPIRE128×64”,在Proteus中你可以使用该关键词来进行查找。除此以外,电路图中还需要一个滑动变阻器,你可以使用关键词“POT-”来查找,并根据需要选择相应的类型(POT-HG、POT-LIN等)。电路图中涉及的其他元器件我们在以前的电路图中都已经见到过,此处不再叙述。

最后绘制好的电路图如下图所示:

由于C51语言在此类程序编写上具有突出的优势,本例仍然采用C51语言来书写。本例的程序源文件如下面几个图所示:

编辑好源文件以后,在Keil中编译、链接并生成工程代码(.HEX文件)。然后将生成的源代码装入上面电路图里面的单片机中,然后进行仿真,可以看到如图中所示的结果。

当然,你还可以对源程序稍作修改来实现其他你所需要的功能,比如打字效果,或者字体的移动,等等。

 

Proteus软件使用方法 十

2010年04月09日 星期五 下午 03:52

利用Proteus仿真51单片机IO口模拟IIC总线协议

I2C总线是Philips公司提出的一种集成电路IC器件之间相连接的总线协议,其目的是使电子系统(不只限于单片机系统)各个IC器件之间的连线变得容易。因为使用传统的并行总线在IC器件之间连接,往往会使得IC之间连线较多,显得非常复杂。而I2C总线则使IC器件之间只需SDA、SCL两条连线就可以传送数据,因而十分方便。由于I2C在印刷体中不容易书写(需要上标),所以实际书写时,还常见到IIC、I2C等书写方法,本文采用IIC的写法,敬请注意。关于IIC总线的知识,请参阅相关书籍,此处不再做进一步介绍。

下面我们用一个使用IIC总线连接器件的例子来简单说明IIC总线的仿真。

例.EEPROM24C02是采用IIC接口的一种常用2Kbit(256×8bit)的存储器。编写程序使用AT89C51的IO口模拟实现IIC总线协议进行通信,并向24C02存储器内从字节0到字节FF写入数字0到FF。

51系列单片机本身没有IIC接口,但一些本身具有IIC接口的单片机往往是高端产品,一方面价格不菲,另一方面我们的系统也没有必要使用之。通常我们就使用软件通过51系列单片机的IO口来模拟实现IIC总线通信。

本例事实上比较简单,但需要对IIC总线时序有较好的理解。源文件如下图所示(采用C51语言编写):

在Keil中编辑好源文件以后,接下来就可以建立工程文件并生成相应的源代码了,然后我们来绘制电路图。

此例的电路图极其简单。只需两个IC,即AT89C51和24C02C,和两个上拉电阻,而且上拉电阻还可以省略。至于连接,就更为简单了。最后得到绘制好的电路图如下图所示:

绘制好电路图,我们就可以将前面刚刚生成的程序源代码装入单片机了,装入以后,下面我们就可以来进行仿真了。

首先点击仿真按钮,系统没有什么反映,只有高低电平变化的颜色。我们要想查看结果,还要用前文中仿真扩展RAM存储器的方法,先点击暂停,然后点击“Debug”菜单下的“I2C Memory Internal Memory – U2”子菜单来打开U2即EEPROM存储器24C02C的内容窗口“I2C Memory Internal Memory – U2”,然后我们就看到了其中的内容,也就是我们仿真程序的结果。如下图所示:

Proteus 仿真库简介

2008-12-15 19:38

Proteus 仿真库简介

2007-12-14 19:18

元件名称 中文名 说明
7407 驱动门
1N914 二极管
74Ls00 与非门
74LS04 非门
74LS08 与门
74LS390 TTL 双十进制计数器
7SEG 4针BCD-LED 输出从0-9 对应于4根线的BCD码
7SEG 3-8译码器电路BCD-7SEG转换电路
ALTERNATOR 交流发电机
AMMETER-MILLI mA安培计
AND 与门
BATTERY 电池/电池组
BUS 总线
CAP 电容
CAPACITOR 电容器
CLOCK 时钟信号源
CRYSTAL 晶振
D-FLIPFLOP D触发器
FUSE 保险丝
GROUND 地
LAMP 灯
LED-RED 红色发光二极管
LM016L 2行16列液晶 可显示2行16列英文字符,有8位数据总线D0-D7,RS,R/W,EN三个控制端口(共14线),工作电压为5V。没背光,和常用的1602B功能和引脚一样(除了调背光的二个线脚)
LOGIC ANALYSER 逻辑分析器
LOGICPROBE 逻辑探针
LOGICPROBE[BIG] 逻辑探针 用来显示连接位置的逻辑状态
LOGICSTATE 逻辑状态 用鼠标点击,可改变该方框连接位置的逻辑状态
LOGICTOGGLE 逻辑触发
MASTERSWITCH 按钮 手动闭合,立即自动打开
MOTOR 马达
OR 或门
POT-LIN 三引线可变电阻器
POWER 电源
RES 电阻
RESISTOR 电阻器
SWITCH 按钮 手动按一下一个状态
SWITCH-SPDT 二选通一按钮
VOLTMETER 伏特计
VOLTMETER-MILLI mV伏特计
VTERM 串行口终端
Electromechanical 电机
Inductors 变压器
Laplace Primitives 拉普拉斯变换
Memory Ics  
Microprocessor Ics  
Miscellaneous 各种器件 AERIAL-天线;ATAHDD;ATMEGA64;BATTERY;CELL;CRYSTAL-晶振;FUSE;METER-仪表;
Modelling Primitives 各种仿真器件 是典型的基本元器模拟,不表示具体型号,只用于仿真,没有PCB
Optoelectronics 各种发光器件 发光二极管,LED,液晶等等
PLDs & FPGAs  
Resistors 各种电阻
Simulator Primitives 常用的器件
Speakers & Sounders
Switches & Relays 开关,继电器,键盘
Switching Devices 晶阊管
Transistors 晶体管(三极管,场效应管)
TTL 74 series  
TTL 74ALS series  
TTL 74AS series  
TTL 74F series  
TTL 74HC series  
TTL 74HCT series  
TTL 74LS series  
TTL 74S series  
Analog Ics 模拟电路集成芯片
Capacitors 电容集合
CMOS 4000 series  
Connectors 排座,排插
Data Converters ADC,DAC
Debugging Tools 调试工具
ECL 10000 Series

 

 

 

 

 

Proteus软件使用方法 一

发起投票 | 删除

       Proteus软件是Labcenter Electronics公司的一款电路设计与仿真软件,它包括ISIS、ARES等软件模块,ARES模块主要用来完成PCB的设计,而ISIS模块用来完成电路原理图的布图与仿真。Proteus的软件仿真基于VSM技术,它与其他软件最大的不同也是最大的优势就在于它能仿真大量的单片机芯片,比如MCS-51系列、PIC系列等等,以及单片机外围电路,比如键盘、LED、LCD等等。通过Proteus软件的使用我们能够轻易地获得一个功能齐全、实用方便的单片机实验室。

本文中由于我们主要使用Proteus软件在单片机方面的仿真功能,所以我们重点研究ISIS模块的用法,在下面的内容中,如不特别说明,我们所说的Proteus软件特指其ISIS模块。

          在进行下面的操作前,我先说明一点:我的Proteus版本是7.1,如果你使用的是6.9以前的版本,可能你发现在鼠标操作上会略有不同。这主要表现在6.9以前的版本鼠标左右键的作用与一般软件刚好相反,而7.0以后已经完全改过。

下面我们首先来熟悉一下Proteus的界面。Proteus是一个标准的Windows窗口程序,和大多数程序一样,没有太大区别,其启动界面如下图所示:

如图中所示,区域①为菜单及工具栏,区域②为预览区,区域③为元器件浏览区,区域④为编辑窗口,区域⑤为对象拾取区,区域⑥为元器件调整工具栏,区域⑦为运行工具条。

下面我们就以建立一个和我们在Keil简介中所讲的工程项目相配套的Proteus工程为例来详细讲述Proteus的操作方法以及注意事项。

首先点击启动界面区域③中的“P”按钮(Pick Devices,拾取元器件)来打开“Pick Devices”(拾取元器件)对话框从元件库中拾取所需的元器件。对话框如下图所示:

在对话框中的“Keywords”里面输入我们要检索的元器件的关键词,比如我们要选择项目中使用的AT89C51,就可以直接输入。输入以后我们能够在中间的“Results”结果栏里面看到我们搜索的元器件的结果。在对话框的右侧,我们还能够看到我们选择的元器件的仿真模型、引脚以及PCB参数。

这里有一点需要注意,可能有时候我们选择的元器件并没有仿真模型,对话框将在仿真模型和引脚一栏中显示“No Simulator Model”(无仿真模型)。那么我们就不能够用该元器件进行仿真了,或者我们只能做它的PCB板,或者我们选择其他的与其功能类似而且具有仿真模型的元器件。

搜索到所需的元器件以后,我们可以双击元器件名来将相应的元器件加入到我们的文档中,那么接着我们还可以用相同的方法来搜索并加入其他的元器件。当我们已经将所需的元器件全部加入到文档中时,我们可以点击“OK”按钮来完成元器件的添加。

添加好元器件以后,下面我们所需要做的就是将元器件按照我们的需要连接成电路。首先在元器件浏览区中点击我们需要添加到文档中的元器件,这时我们就可以在浏览区看到我们所选择的元器件的形状与方向,如果其方向不符合你的要求,你可以通过点击元器件调整工具栏中的工具来任意进行调整,调整完成之后在文档中单击并选定好需要放置的位置即可。接着按相同的操作即可完成所有元器件的布置,接下来是连线。事实上Proteus的自动布线功能是如此的完美以至于我们在做布线时从来都不会觉得这是一项任务,而通常像是在享受布线的乐趣。布线时我们只需要单击选择起点,然后在需要转弯的地方单击一下,按照你所需走线的方向移动鼠标到线的终点单击即可。本例我们布线的结果如下图所示(仿真我们在上面的Keil操作介绍中的简单例子)。

因为该工程十分简单,我们没有必要加上复位电路,所以这点在图中予以忽略,请大家注意。除此以外,你可能还发现,单片机系统没有晶振,这一点你需注意。事实上在Proteus中单片机的晶振可以省略,系统默认为12MHz,而且很多时候,当然也为了方便,我们只需要取默认值就可以了。

下面我们来添加电源。先说明一点,Proteus中单片机芯片默认已经添加电源与地,所以我们可以省略。然后在添加电源与地以前,我们先来看一下上面第一个图中区域⑤的对象拾取区,我们在这里只说明本文中可能会用得到的以及比较重要的工具。

l :(Selection Mode)。选择模式,通常情况下我们都需要选中它,比如布局时和布线时。

    

l :(Component Mode)。组件模式,点击该按钮,能够显示出区域③中的元器件,以便我们选择。

l    :(Wire Label Mode)。线路标签模式,选中它并单击文档区电路连线能够为连线添加标签。经常与总线配合使用。

l   :(Text Script Mode)。文本模式,选中它能够为文档添加文本。

l    :(Buses Mode)。总线模式,选中它能够在电路中画总线。关于总线画法的详细步骤与注意事项我们在下面会进行专门讲解。

l :(Terminals Mode)。终端模式,选中它能够为电路添加各种终端,比如输入、输出、电源、地等等。

l :(Virtual Instruments Mode)。虚拟仪器模式,选中它我们能够在区域③中看到很多虚拟仪器,比如示波器、电压表、电流表等等。关于它们的用法我们会在后面的相应章节中详细讲述。

好了,下面我们就来添加电源。首先点击 ,选择终端模式,然后在元器件浏览区中点击POWER(电源)来选中电源,通过区域⑥中的元器件调整工具进行适当的调整,然后就可以在文档区中单击放置电源了。放置并连接好线路的电路图一部分如下图:

连接好电路图以后我们还需要做一些修改。由上图我们可以看出,图中的R1电阻值为10k,这个电阻作为限流电阻显然太大,将使发光二极管D1亮度很低或者根本就不亮,影响我们的仿真结果。所以我们要进行修改。修改方法如下:首先我们双击电阻图标,这时软件将弹出“Edit Component”对话框(见下图所示的对话框),对话框中的“Component Referer”是组件标签之意,可以随便填写,也可以取默认,但要注意在同一文档中不能有两个组件标签相同;“Resistance”就是电阻值了,我们可以在其后的框中根据需要填入相应的电阻值。填写时需注意其格式,如果直接填写数字,则单位默认为Ω;如果在数字后面加上K或者k,则表示kΩ之意。这里我们填入270,表示270Ω。

修改好各组件属性以后就要将程序(HEX文件)载入单片机了。首先双击单片机图标,系统同样会弹出“Edit Component”对话框,如下图。在这个对话框中我们点击“Program files”框右侧的 ,来打开选择程序代码窗口,选中相应的HEX文件后返回,这时,按钮左侧的框中就填入了相应的HEX文件,我们点击对话框的“OK”按钮,回到文档,程序文件就添加完毕了。

装载好程序,我们就可以进行仿真了。首先来熟悉一下上面第一个图中区域⑦的运行工具条。因为比较简单,我们只作一下介绍。

工具条从左到右依次是“Play”、“Step”、“Pause”、“Stop”按钮,即运行、步进、暂停、停止。下面我们点击“Play”按钮来仿真运行,效果如下图所示,可以看到系统按照我们的程序在运行着,而且我们还能看到其高低电平的实时变化。如果我们已经观察到了结果就可以点击“Stop”来停止运行。

proteus软件使用方法 二

2008-11-18 20:50

计算机仿真辅助单片机指令系统学习

计算机仿真对单片机指令系统的学习的帮助主要在于帮助理解,加强记忆,适当应用。能够在单片机指令系统学习中的软件主要是MedWin,因为其操作简单,而且可以直观地看到结果。

1.数据传送指令:

数据传送类指令主要包括:MOV、MOVX、MOVC、PUSH、POP、XCH等。

下面我们通过一个简单的汇编程序来学习这些指令。

例1.汇编语言源文件如下图所示:

在MedWin中编辑好源文件以后,以“.asm”为后缀保存为汇编源文件。然后进行编译、汇编并将代码装入内存进行仿真。由于本程序对寄存器、特殊功能寄存器、内部存储器、外部数据存储器都进行了操作,所以需要首先点击“查看”菜单下的相应子菜单打开相应的窗口,即寄存器、特殊功能寄存器、数据区IData、数据区XData,并可以根据需要点击“窗口”菜单下的选项来横向或纵向平铺窗口。

因为本程序需要一步一步地详细查看相应指令执行的结果,所以我们需要在执行指令时点击“指令跟踪(F7)”或“指令单步(F8)”按钮来单步执行。

指令执行中的一个画面如下图所示:

从图中我们能够清晰地观察到每一条指令执行的每一个结果,从而加深我们对这些指令的理解与记忆。

除以上实例程序中所书写的以外,我们还可以使用其他的指令书写程序并在MedWin中仿真,比如PUSH、POP、MOVC等,相信你会得到一个很好的结果,而且MedWin肯定会提高你学习指令的兴趣。

2.算术操作类指令

算术操作类指令主要有:ADD、ADDC、DA A、SUB、INC、DEC、MUL、DIV等。

算术操作类指令比较复杂,掌握起来比较困难,但在实际的单片机项目应用中很少涉及,尤其是MUL、DIV两条指令,在51系列单片机中更是被束之高阁,很少使用。

此处,我们不再像上节那样逐条书写并仿真课本上的程序,如果感兴趣,你可以仿照上节自己书写程序并进行仿真,观察并体会每一条指令执行的结果以及对系统的影响。这里我们通过一个比较实用的例子来演示仿真算术类指令的操作。

例2.两个压缩BCD码求和:将两个BCD码(每个占4位)分别放在一个字节的高4位和低4位即组成压缩BCD码。本例中有两个压缩BCD码数字,都是四位数,第一个数的高两位放在20H,低两位放在21H中;第二个高低位分别放在30H、31H中。要求所得结果放在40H、41H中。

汇编源程序如下图:

在MedWin中编辑好源文件后,以“.asm”为后缀将其保存为汇编文件,然后进行编译、汇编并将代码装入内存进行仿真。你可以像上例那样步进观察其详细执行过程,分析原因;当然也可以在“ljmp  $”处设置断点,然后全速运行。需要注意程序中使用到了内部存储器,所以你需要将数据区“IData”窗口调出来进行观察。运行的最后结果如下图所示:

从图中我们能够很清楚地看到内部存储器相应单元的内容,进而观察到程序执行的结果,即:2097+4559=6656。

3.逻辑运算指令、控制转移类指令

逻辑运算指令,顾名思义,是用于逻辑运算的指令。主要包括:CLR、CPL、ANL、ORL、XRL等常用逻辑指令以及循环移位指令如:RL、RLC、RR、RRC等。

控制转移类指令是指在程序中根据具体的条件(或者没有条件)使程序转移到相应的入口的指令。它主要包括三类指令:一是无条件转移指令,比如:AJMP、SJMP、LJMP等;二是条件转移指令,比如:JZ、CJNE、DJNZ等;三是子程序调用返回指令,比如:ACALL、LCALL、RET、RETI等。

鉴于单独针对逻辑运算指令进行的仿真十分简单(事实上与数据传送类指令相同),可以很容易、很方便地自己针对相应的指令设计程序来观察结果,进行学习。所以此处不再针对逻辑运算指令举例仿真。而控制转移类指令又不可能单独使用,往往与其他指令结合使用来组成相应的程序,所以也无法单独进行仿真。所以下面我们就将逻辑运算类指令与控制转移类指令相结合来编写仿真程序,通过一个实例同时来仿真这两类指令的应用。

例3.十六进制整数转化为BCD码整数:4位十六进制整数高低位依次放在R3、R4中,要求转换后的BCD整数按高低位顺序放在R5、R6、R7中。

程序源文件如下图:

在MedWin中编辑好源文件以后,将其以“.asm”为后缀保存为汇编源文件,然后编译、汇编并将产生的代码装入内存进行仿真调试。仿真前需要注意首先输入R3、R4设置十六进制初始值,具体设置方法如下。首先调出寄存器窗口,然后在需要修改的寄存器名称或者数值上双击,这时其内容将变为可修改,我们在其中填入需要设置的数值(字母大小写均可)即可,如下图所示:

设置好初始值以后,你可以单步观察几步以便明白其原理,然后就可以设置一个断点全速运行了,最后就可以看到所得到的结果,比如我们输入8FD6,将得到结果:R5=03,R6=68,R7=22。

4.位操作指令

位操作比较简单,我们也不再写实例进行仿真,如果你感兴趣,可以自己写一些针对相应指令的小程序来仿真之。

这里我们主要说明一下仿真位操作指令与其他指令的不同及注意事项。

位操作指令是对单片机内部存储器的位地址空间进行的相应操作,所以我们查看相应结果时应该打开相应窗口。单片机的位地址空间可以这样来打开:点击“查看”菜单下面的“数据区 Bit”子菜单。位地址空间窗口如下图所示:

Proteus软件使用方法 三

2008-11-18 20:53

Proteus仿真辅助定时器/计数器的学习

2008年

MCS-51系列单片机内部有两个定时器/计数器T0、T1,它们都具有两种工作模式(定时器和计数器)以及四种工作方式(方式0、1、2、3)。

定时器/计数器T0由特殊功能寄存器TH0和TL0构成,T1由特殊功能寄存器TH1和TL1构成。除此之外,与定时器/计数器有关的特殊功能寄存器还有工作方式控制寄存器TMOD和控制寄存器TCON。关于它们的详细内容和具体应用请参阅相关参考文献,此处不做探讨。

由于定时器/计数器T0与T1用法几乎完全相同,所以下面的例子中我们将全部使用T0。而且定时器/计数器方式0和方式3较少使用,因此我们也将主要仿真说明其方式1和2的用法,另外我们还会给出一种其计数器的用法。

例1.定时器/计数器T0工作于定时器模式方式1,在P1.0端口产生周期为100ms的方波。

首先计算计数初值:周期为100ms,定时应为50ms(半个周期)。一个计算公式为:

计数初值=216-t×f/12

其中t为定时时间(单位为s),f为单片机的时钟频率(单位为MHz)。

所以,计数初值为216-0.05×12M/12=15536=3CB0H。因此,TH0的初值应为3CH,TL0的初值应为B0H。

因此,此例的源代码如下图:

在MedWin中将源文件编辑完成以后,保存为汇编源文件并编译、汇编产生源代码(.HEX文件)。

下面我们在Proteus中设计电路,此例电路也比较简单,只需在AT89C51单片机的P1.0口连上一个示波器来观察产生的相应波形就可以了。选择示波器时要注意首先在前面的文章“我的毕业论文(三):Proteus软件的基本用法”中第一个图:Proteus界面里面的区域⑤点击按钮 选择虚拟仪器模式,然后在区域③中选择“OSCILLOSCOPE”(示波器)。

完成的电路图如下图所示:

构建好电路图以后,下面就可以为单片机添加程序代码(.HEX文件)了。双击单片机图标,添加上面的源文件所生成的程序代码,添加好以后,接着就可以进行下面的仿真。点击运行按钮,系统就运行了起来,我们可以适当调整示波器面板上的按钮来使波形最有利于我们观察。调整好以后,系统产生的波形效果如下图所示:

如果你的Proteus版本是7.0以前的版本,那么你的示波器和波形效果可能与图中略有不同,但并不影响仿真效果;如果是最新版本,则应该完全相同。

从图中我们能够看出,波形的周期为100ms,这与我们设定的目标相一致;而其幅值则近似为5V。

例2.设计一个延时程序,延时500ms。为了能够清晰地看到延时效果,我们设计在P1.0口连接一个LED发光二极管,使其使用该延时程序每500ms闪烁一次。

通常情况下,为了简便,人们会使用软件延时,即通过执行一段没有意义的程序来达到延时的目的。但那样做会浪费系统资源,使得系统在延时过程中不能响应任何外部或内部事件。所以,人们对其做了改进,而通过定时器/计数器定时来进行延时。

由于方式2定时时间过短(12MHz下最大250μs左右),所以,此处我们仍然选用方式1。但方式1在12MHz下的最大定时时间也只有60多ms,仍然不能满足延时要求。所以,延时程序需要软硬件协作。即我们可以这样去做,通过硬件T0延时50ms,然后设置一个计数器,当计数器计到10时,我们延时的目标就达到了。

源程序如下图:(计数器初值计算与上例相同)

将上面的源文件保存为汇编文件,然后进行编译/汇编,并生产源代码装入内存在MedWin中仿真运行看延时效果(可以通过指令单步执行“lcall dly500”一句观察指令执行时间,则实际执行时间就是延时时间)。结果发现,实际执行中该延时程序比我们的要求多延时了87μs,这是因为延时程序中还插入了其他指令(比如设置T0模式等),所以我们的延时程序不是十分精确,实际应用中我们可以通过调整T0初值来稍作调整,但此处对延时要求并不精确,所以我们就不再做调整了。

下面我们可以在Proteus中构建电路来观察我们的延时效果。电路图十分简单,如下图所示:

注意LED的阴阳极不要接反,图中的限流电阻在模拟时可以略去,但如果添加上的话,最好阻值不要设置的过大,以免LED发光太弱,影响观察效果。

设置好电路图以及各元器件的属性以后,我们就可以点击仿真按钮来观察效果了。可以看到,LED按照大约0.5s的周期开始闪烁。

例3.定时器/计数器的计数功能。本例使用T1对外部脉冲进行计数,每计数一次,与P1口相连的8个LED发光二极管的亮灯个数和位置就按照它们的顺序所表示的BCD码(亮灯代表1,灭灯为0)做加法。比如开始为29(00101001),计数一次以后,对应的数字变为30(00110000)。这里我们用按键来模拟外部脉冲,每按一次,表示产生一个脉冲。

显然,根据要求,我们可以使T1工作于计数器方式2,而且我们可以设置其初值为FF,这样,外部产生一个脉冲,T1检查到就会发生中断,然后我们在中断子程序中按要求进行处理。

其源程序如下图所示:

将上面在MedWin中编辑好的源文件保存为汇编文件,然后进行编译/汇编,并产生相应的源代码(.HEX文件)。注意因为Proteus仿真电路的按键为理想按键,所以程序设计时并没有考虑按键的抖动,但在实际应用中应该注意,否则将可能实现不了预期目的。另外,本例为了仿真的方便,设置T1计数器的初值为FFH,实际应用中可以灵活地根据相关要求进行改动。

然后我们根据题中要求设计电路。设计好的电路图如下图所示:

设计电路图时要注意因为本电路图中需要较多的限流电阻(如果添加的话),所以在绘制电路图时考虑用排阻来进行代替。图中RP1就是一个8×的排阻。Proteus中提供了几种排阻,你可以使用关键词“respack”进行查找。

设计好电路图,我们就可以将上面汇编源文件产生的源代码装入单片机,然后进行仿真。仿真时使用鼠标点击按键,你可以看到LED按照BCD码

Proteus软件使用方法 四

2008-11-18 20:59

Proteus仿真辅助中断功能的学习

MCS-51系列单片机具有5个中断源,2个中断优先级,可以实现2级中断服务程序嵌套。5个中断源分别为:两个外部输入中断源INT0(P3.2)和INT1(P3.3),中断请求标志分别为IE0和IE1;2个内部定时器/计数器的溢出中断源T0(计数时P3.4输入)和T1(计数时P3.5输入),中断请求标志分别为TF0和TF1;串口中断请求源,其中断请求标志为RI或TI。

中断请求标志位分布在特殊功能寄存器TCON(IE0、IE1、TF0、TF1)和SCON(RI、TI)中。与中断有关的特殊功能寄存器除它们以外还有中断允许寄存器IE和中断优先级寄存器IP。这些寄存器都能够进行位寻址。此处不再对它们进行详细的探讨。关于它们的详细情况和具体功能以及中断的其他知识请参阅相关参考文献,此处我们从略。

事实上,关于中断我们在上一篇文章中讨论定时器/计数器时已经对T0、T1的相关中断进行过较为详尽的讨论和举例。而关于串口中断,我们会在下节讲解串口时进行相应的讨论,所以本节我们只简单讨论一下外部中断INT0和INT1,并举例分析。

例1.外部中断INT0和INT1同时存在。和上篇文章中的例3一样,P1口连接8个LED发光二极管,两个按键分别接到外部中断INT0和INT1。正常情况下,8个LED闪烁发光。当INT0发生中断时,使P1口的8个LED做一个灯的左移右移两次;当INT1发生中断时,使P1口的8个LED做两个灯的左移右移两次。

此例的源程序如下图所示:

源文件编辑结束以后,将源文件保存为汇编文件,然后进行编译/汇编,并产生相应的源代码以便下面仿真使用。

下面我们在Proteus中绘制电路,此例电路图和上篇文章中最后一例的电路图大体相同,只不过将接在P3.5的按键改为接在P3.2和P3.3的INT0和INT1的中断请求输入端。绘制好的电路图如下图所示:

电路设计好以后,我们就可以将上面生成的源代码装入单片机,然后进行仿真了。可以看到,仿真开始时,8个LED作大约0.2S间隔的闪烁;当我们按下INT0口的按键时,LED作一个灯的左移右移两次;当我们按下INT1口的

Proteus仿真辅助串口功能的学习

MCS-51系列单片机内部有一个可编程全双工串行通信接口,具有UART(Universal Asynchronous Receiver/Transmitter,通用异步收发器)功能。它有四种工作方式,可由软件设定;它的波特率也可由软件设置片内的定时器/计数器来进行控制。

与串口相关的特殊功能寄存器主要有串口控制寄存器SCON和电源控制寄存器PCON。其中需要注意的是PCON不可位寻址。

51系列单片机的串口主要用来进行串口数据通信,除此以外,它还可以用来非常方便地扩展并行IO口,可以扩充输入或者输出。本节我们主要通过实例来说明其在串行数据通信的应用及其在扩展IO口上的应用,考虑到篇幅,我们只举以下二例。

例1.两个AT89C51的双机通信。其中一个单片机P1口外接8个按键(事实上可以用拨码开关来代替,但Proteus中没有这个器件的仿真模型),第二个单片机P2口外接8个LED灯,使用双机串口通信将第一个单片机的拨码开关的状态发送到第二个,并在第二个单片机的LED灯上显示出相应状态。

我们取两机串口都工作于方式1,由定时器T1和SMOD控制其波特率,设T1工作于定时模式方式2,SMOD取0,取波特率为4800bit/s。则因为计算波特率公式

波特率=2SMOD/32×f/(12×(28-X))

其中,f为单片机时钟频率,X为定时器初值。

所以,我们可以得到T1计数初值为:FAH(此处为了精确,我们取f=11.0592MHz)。

源文件如下所示:

发送程序如下图:

接收程序如下图:

源文件编辑结束以后,将源文件保存为汇编文件,然后进行编译/汇编,并产生相应的源代码,准备用于仿真。

下面我们来设计电路。首先在电路图中放置两片AT89C51芯片,并将它们的P3.0(RXD)和P3.1(TXD)引脚交叉相连。然后在片一的P1口连接8个按键;片二的P2口连接上8个LED。最终结果如下图所示:

在进行仿真以前,我们需要来再熟悉一下Proteus的按键。

如上图所示,仿真时我们可以点击键帽,但当我们松开鼠标时,按键就弹开了;我们还可以点击键帽右侧的标有上下箭头的红黑色小圆圈,此时当我们松开鼠标时,键帽不会弹开,按键一直保持着按下的状态,只有当我们再次点击小圆圈时,键帽才会弹开,按键才会改变状态。此例我们就需要这种属性来根据要求进行我们的仿真。

设计好电路图以后,我们就可以装入相应的程序了。注意装入程序时不要发生错误,要将相应的源代码装入相应的单片机。然后进行仿真,可以通过点击相应的按键来改变状态,进而观察到LED的状态。可以看到,串口通信得到了实现。仿真中的一个画面如上面电路图中的效果所示。

例2.串口扩充并行IO口输出。单片机的串口扩充的8位并行IO口上外接8个LED,然后从串口输出数据实现8个LED左移2次,闪烁2次的循环。

串口扩充并行口时,串口工作于方式0:同步移位寄存器方式,波特率固定,数据由RXD端输出,移位时钟由TXD送出。使用74LS164串入并出移位寄存器。

本例源文件如下图:

源文件编辑结束以后,将其保存为汇编文件,然后进行编译/汇编,并产生相应的源代码,准备用于仿真。

然后我们来绘制电路图。电路图比较简单,如下图所示,此处不再详述。但有一点需要注意:此前的排阻不能使用了,因为那些都是多输入单输出,不能符合此例要求。

此处我们换作另外一种8输入8输出的排阻(见上图中RN1),你可以在Proteus中用关键词“RX8”进行查找。设计好的电路图如上图所示。

电路图设计好以后,我们就可以将上面产生的代码装入单片机了。装入以后进行仿真,仿真中的一个画面也可以从上图看到。

Proteus软件使用方法 六

2008-11-18 21:04

Proteus仿真辅助继电器的学习

继电器是一种功率开关器件,它能够实现弱电控制强电的功能。下面我们以一个例子来说明继电器的使用和仿真。

例.单片机的P2.0引脚接一开关,使用该开关来控制接在P2.7引脚上的继电器,进而达到控制电灯的目的。当然,此例在实际中是没有任何意义的,也根本没有必要。此处主要用来说明继电器的作用,即通过弱电来控制强电。实际应用中,可能不是来控制一个电灯泡,而是来控制大功率发动机的起停。

本例源程序十分简单,如下图所示:

源文件编辑结束以后,将其保存为汇编文件,然后进行编译/汇编,并产生相应的源代码,准备用于仿真。

下面我们来编辑电路图。本例的电路图也较为简单,但有两点需要注意。

一是继电器,在Proteus中有很多继电器模型,出于仿真的目的,我们只需选择一种较为简单的模型即可,你可以用关键词“Relay”来进行查找。

二是继电器的工作电压与仿真系统的默认电压不兼容的问题。系统默认电压为5V,而继电器需要12V,电压不足,继电器不动作。所以我们需要进行相应的修改。这里有两种方法,或者我们改变继电器的工作电压为5V,你可以双击继电器图标,然后进行修改;或者我们改变系统的默认电压,方法如下:点击“Design”菜单下面的“Configure Power Rails...”子菜单,系统将弹出“Power Rail Configuration”对话框,如下图所示:

然后我们在该对话框中的“Name”属性右侧的下拉菜单中选择图中的“VCC/VDD”,接着在其右面的“Voltage”框中输入我们需要的数值即可,此处我们取12V。但是由于改变系统默认电压牵一发而动全身,所以不到迫不得已我们不推荐这种方法,此处我们推荐采用第一种方法。

最后设计好的电路图如下图所示:

关于电路我们还有几点需要说明:

(1)图中Q1是一个PNP三极管,通过P2.7输出高低电平来控制其通断,进而达到控制继电器工作的目的。需要注意由于单片机引脚的驱动能力有限,在实际应用中我们经常使用这种大功率晶体管控制电路。不过有时我们可能会在其基极与单片机引脚之间接上一个电阻。

(2)P2.0引脚上的开关和我们前面使用的按键类似,可以使用关键词“Switch”查找。

(3)图中BAT1是一块电池,提供直流12V电压,可以用关键词“Battery”进行搜索;L1是一个灯泡,此例用来指示继电器动作的状态,可以使用关键词“Lamp”进行查找。

设计好电路并装入我们上面的程序所产生的源代码以后,就可以进行仿真了。点击仿真按钮,然后我们就可以通过开关的通断来控制继电器的动作,进而达到控制灯泡的亮灭了。

Proteus软件使用方法 七

2008-11-18 21:09

Proteus仿真辅助数码管的学习

数码管又称LED数码管,它是由7段或8段LED构成的显示器件。有共阴极和共阳极两种。按其显示方式则可分为静态显示方式和动态显示方式两种。关于数码管的其他知识请参阅相关参考文献,此处不作讨论。下面我们将主要讲述数码管显示的仿真。

1.静态显示方式

静态显示方式较为简单,编程十分容易,但占用IO口线较多。实际使用中不太多见。下面我们就通过一个简单的例子来予以说明。

例1.单片机的P2口接一个共阳极数码管,利用该数码管显示从0到9,然后返回到0的循环。

该例子较为简单,源文件如下图:

源文件编辑结束以后,将其保存为汇编文件,然后进行编译/汇编,并产生相应的源代码,准备用于仿真。

下面我们编辑电路图。此例的电路图十分简单,只需将一个共阳极数码管连到单片机的P2口即可。数码管使用关键词“7Seg”进行查找。可以看到有很多结果,注意区分共阳极“Anode”和共阴极“Cathode”即可。这里我们选用较为简单的“7SEG-COM-ANODE”数码管。

最后得到的电路图如下图所示:

绘制好电路图,我们就可以将前面所生成的源代码装入单片机,然后点击仿真按钮进行仿真。

可以看到数码管显示的数字按照我们程序中设定的要求进行变化着,仿真中的一个画面如上图所示。

2.动态显示方式

动态显示方式是一种相对较为高级的显示方式,它编程较为复杂,但占用IO口线少,达到了节约硬件资源的目的,实际使用中较多利用。下面我们也利用一个实例来详细说明这种显示方式。

例2.数码管动态显示方式。单片机P2口接一个二位数码管的8位段码线,P3口的低二位接数码管的两位位码线。程序使得二位数码管做0到99的循环显示。

该例源文件如下图所示:

源文件编辑结束以后,将其保存为汇编文件,然后进行编译/汇编,并产生相应的源代码,准备用于仿真。

接下来我们绘制电路图。此例电路图比较简单,如下图所示,但有几点需要注意:

(1)单片机的IO口的驱动能力有限,所以此例我们选用了大功率晶体管驱动电路,即图中的两个NPN三极管,单片机通过控制它们的通断来达到控制位码的目的。

(2)关于数码管,此例我们选用了2位的共阳极数码管7SEG-MPX2-CA,这样可以方便我们连线和使用。而且由于我们的例子中没有用到小数点(DP),所以为了简便在图中我们没有连接P2.7和DP引脚。当然,如果你连接好这个引脚,仿真结果不会受到任何影响,因为在段码表中,P2.7引脚一直输出的都是高电平,也就是说小数点一直处于熄灭状态。

绘制好电路图,就可以点击仿真按钮进行仿真了。仿真中的一个效果如上图所示。

3.事实上,在实际的应用中我们还可以选用数码管显示驱动译码芯片来达到控制数码管显示的目的。常用的这类芯片有CD4511、MAX7219等。关于这些芯片的使用方法请参阅相关参考文献,此处我们仅以MAX7219为例来简单介绍一下这类芯片的使用。

例3.单片机使用MAX7219接8个数码管,初始时利用这些数码管从左到右显示7到0,然后依次将最右侧的数字移到最左侧显示。

鉴于C51语言在此类程序编写中的明显优势,此例我们将使用C51语言进行编写,源文件如下:

在Keil中编辑好源文件以后,进行编译、链接,并生成源代码(.HEX文件)。注意生成.HEX文件时要按照前面的文章中的相应介绍进行设置。

然后我们来绘制电路图。本例的电路图较为简单,MAX7219与数码管连接的段码和位码在芯片上已经标识明确,直接相连即可;唯独需要注意的就是要按照前面程序中定义的那样,将MAX7219的DN、CLK、LOAD三引脚分别与单片机AT89C51的P1.0、P1.1、P1.2引脚相连。如下图所示,此处我们就不再作其他说明了。

绘制好电路图以后,将我们刚才生成的源代码装入单片机,然后仿真运行,就可以看到我们所希望的效果了,仿真中的一个画面如上图所示。

Proteus软件使用方法 八

2008-11-18 21:11

Proteus仿真辅助LED点阵的学习

LED点阵是由LED构成的点数为8×8、16×16的点阵显示器,它可以用来显示数字、字母以及汉字等。使用十分灵活,应用较为广泛,比如大街上随处可见的LED电子广告牌。

下面我们通过一个实例来简单介绍LED点阵的使用和仿真。

例.使用一块8X8的LED点阵来显示一个向左循环移动的数字“1”。

此例比较简单,但需要注意的新东西有很多。一是8X8LED点阵,它的行列扫描。二是关于字模,网上有很多字模软件可供下载,但针对8X8LED点阵的比较少。因为数字“1”的字模比较简单,我们可以自己写出来。

由于C51语言的方便性,此处我们仍然采用其来书写,源文件如下图:

编辑好源文件以后,在Keil中进行编译、链接、并生成相应的工程源代码。

然后,我们就开始绘制电路图。关于本例的电路图,我们需要说明的是,由于采用总线方式绘制电路可以很大程度上使得电路图简化、美观,所以,此处我们将采用总线方式来绘制电路。关于总线的知识请参阅相关参考文献,此处我们只简单叙述一下在Proteus中如何绘制我们需要的总线。

采用总线方式绘制电路,首先要点击前面的“Proteus简介”一文中Proteus界面图区域⑤对象拾取区中的总线按钮,使系统进入绘制总线模式。这样你就可以在你需要绘制总线的地方单击像绘制一般连线一样来绘制总线了,需要注意在你想要结束总线的地方双击才能结束总线的绘制。绘制好总线以后,我们可以先在需要与总线连接的各个线端来添加相应的标签(Label)。首先点击上述区域⑤对象拾取区中的添加标签按钮,使系统进入添加标签模式。然后你就可以在需要添加标签的线端上点击鼠标,系统将会弹出编辑标签对话框(Edit Wire Label)。我们只需在其中的“Label”选项卡的“String”框中填入我们需要的标签并点击确定(OK),就完成了相应标签的添加。添加好标签以后,接下来就要绘制各总线分支。绘制总线分支时需要注意按一下“Ctrl”键,你会发现连线方向已经按照你所需要的方向(45°)偏转了。在连接好总线分支以后,总线绘制就完成了。然后再稍作修饰,最后完成的电路图如下图所示:

绘制好电路图,我们就可以将上面产生的源代码装入单片机进行模拟仿真了。可以看到8X8LED点阵已经按照我们的要求开始循环显示数字“1”

Proteus软件使用方法 九

2008-11-18 21:13

Proteus仿真辅助LCD(液晶显示器)的学习

LCD就是液晶显示器,液晶显示器正在以其低功耗、高性价比以及方便实用的特性而成为单片机系统的一个重要输出器件。

关于LCD显示器的详细知识请参阅相关书籍和参考文献,此处我们只通过一个简单实例来说明LCD的用法。

例.使用Proteus中的128×64点阵图形液晶显示器来显示字符“郑州大学物理工程学院”。

首先我们要生成字符的字模,这需要通过字模软件来完成。网上有很多免费的字模软件可供下载使用,此处使用字模软件HZDotReader来生成。关于字模软件的用法请参阅相关书籍,此处也不再赘言。

生成好字模以后,因为软件设计与电路图有关,所以,我们首先来绘制例子所需要的电路图。此例选用的LCD器件是“AMPIRE128×64”,在Proteus中你可以使用该关键词来进行查找。除此以外,电路图中还需要一个滑动变阻器,你可以使用关键词“POT-”来查找,并根据需要选择相应的类型(POT-HG、POT-LIN等)。电路图中涉及的其他元器件我们在以前的电路图中都已经见到过,此处不再叙述。

最后绘制好的电路图如下图所示:

由于C51语言在此类程序编写上具有突出的优势,本例仍然采用C51语言来书写。本例的程序源文件如下面几个图所示:

编辑好源文件以后,在Keil中编译、链接并生成工程代码(.HEX文件)。然后将生成的源代码装入上面电路图里面的单片机中,然后进行仿真,可以看到如图中所示的结果。

当然,你还可以对源程序稍作修改来实现其他你所需要的功能,比如打字效果,或者字体的移动,等等。

 

Proteus软件使用方法 十

2010年04月09日 星期五 下午 03:52

利用Proteus仿真51单片机IO口模拟IIC总线协议

I2C总线是Philips公司提出的一种集成电路IC器件之间相连接的总线协议,其目的是使电子系统(不只限于单片机系统)各个IC器件之间的连线变得容易。因为使用传统的并行总线在IC器件之间连接,往往会使得IC之间连线较多,显得非常复杂。而I2C总线则使IC器件之间只需SDA、SCL两条连线就可以传送数据,因而十分方便。由于I2C在印刷体中不容易书写(需要上标),所以实际书写时,还常见到IIC、I2C等书写方法,本文采用IIC的写法,敬请注意。关于IIC总线的知识,请参阅相关书籍,此处不再做进一步介绍。

下面我们用一个使用IIC总线连接器件的例子来简单说明IIC总线的仿真。

例.EEPROM24C02是采用IIC接口的一种常用2Kbit(256×8bit)的存储器。编写程序使用AT89C51的IO口模拟实现IIC总线协议进行通信,并向24C02存储器内从字节0到字节FF写入数字0到FF。

51系列单片机本身没有IIC接口,但一些本身具有IIC接口的单片机往往是高端产品,一方面价格不菲,另一方面我们的系统也没有必要使用之。通常我们就使用软件通过51系列单片机的IO口来模拟实现IIC总线通信。

本例事实上比较简单,但需要对IIC总线时序有较好的理解。源文件如下图所示(采用C51语言编写):

在Keil中编辑好源文件以后,接下来就可以建立工程文件并生成相应的源代码了,然后我们来绘制电路图。

此例的电路图极其简单。只需两个IC,即AT89C51和24C02C,和两个上拉电阻,而且上拉电阻还可以省略。至于连接,就更为简单了。最后得到绘制好的电路图如下图所示:

绘制好电路图,我们就可以将前面刚刚生成的程序源代码装入单片机了,装入以后,下面我们就可以来进行仿真了。

首先点击仿真按钮,系统没有什么反映,只有高低电平变化的颜色。我们要想查看结果,还要用前文中仿真扩展RAM存储器的方法,先点击暂停,然后点击“Debug”菜单下的“I2C Memory Internal Memory – U2”子菜单来打开U2即EEPROM存储器24C02C的内容窗口“I2C Memory Internal Memory – U2”,然后我们就看到了其中的内容,也就是我们仿真程序的结果。如下图所示:

从图中我们能清楚地看到我们的仿真结果,程序完全正确地执行了我们的命令。

当然,如果你过早地点击了暂停按钮,那么你得到的结果可能和上图略有不同,那可能是因为程序尚未执行完毕。此时你可以继续点击运行按钮,或者点击单步按钮来仔细查看程序执行过程中24C02C存储器内容的改变情况。

 

从图中我们能清楚地看到我们的仿真结果,程序完全正确地执行了我们的命令。

当然,如果你过早地点击了暂停按钮,那么你得到的结果可能和上图略有不同,那可能是因为程序尚未执行完毕。此时你可以继续点击运行按钮,或者点击单步按钮来仔细查看程序执行过程中24C02C存储器内容的改变情况。