用Proteus仿真单片机的方法.docx

上传人:b****3 文档编号:3843759 上传时间:2023-05-06 格式:DOCX 页数:24 大小:329.93KB
下载 相关 举报
用Proteus仿真单片机的方法.docx_第1页
第1页 / 共24页
用Proteus仿真单片机的方法.docx_第2页
第2页 / 共24页
用Proteus仿真单片机的方法.docx_第3页
第3页 / 共24页
用Proteus仿真单片机的方法.docx_第4页
第4页 / 共24页
用Proteus仿真单片机的方法.docx_第5页
第5页 / 共24页
用Proteus仿真单片机的方法.docx_第6页
第6页 / 共24页
用Proteus仿真单片机的方法.docx_第7页
第7页 / 共24页
用Proteus仿真单片机的方法.docx_第8页
第8页 / 共24页
用Proteus仿真单片机的方法.docx_第9页
第9页 / 共24页
用Proteus仿真单片机的方法.docx_第10页
第10页 / 共24页
用Proteus仿真单片机的方法.docx_第11页
第11页 / 共24页
用Proteus仿真单片机的方法.docx_第12页
第12页 / 共24页
用Proteus仿真单片机的方法.docx_第13页
第13页 / 共24页
用Proteus仿真单片机的方法.docx_第14页
第14页 / 共24页
用Proteus仿真单片机的方法.docx_第15页
第15页 / 共24页
用Proteus仿真单片机的方法.docx_第16页
第16页 / 共24页
用Proteus仿真单片机的方法.docx_第17页
第17页 / 共24页
用Proteus仿真单片机的方法.docx_第18页
第18页 / 共24页
用Proteus仿真单片机的方法.docx_第19页
第19页 / 共24页
用Proteus仿真单片机的方法.docx_第20页
第20页 / 共24页
亲,该文档总共24页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

用Proteus仿真单片机的方法.docx

《用Proteus仿真单片机的方法.docx》由会员分享,可在线阅读,更多相关《用Proteus仿真单片机的方法.docx(24页珍藏版)》请在冰点文库上搜索。

用Proteus仿真单片机的方法.docx

用Proteus仿真单片机的方法

用PROTEUS对单片机进行仿真的方法与实例

吴汉清

Proteus软件是英国LabcenterElectronics公司的一款电路设计与仿真软件,它包括ISIS、ARES等软件模块,ARES模块主要用来完成PCB的设计;ISIS模块用来完成电路原理图的布图和仿真。

它可以进行模拟电路仿真、数字电路仿真,也可以进行单片机及其外围电路组成的系统的仿真;软件提供了各种虚拟仪器,如示波器、逻辑分析仪、信号发生器、电压表、电流表等。

和其它仿真软件相比,ProteusISIS最大特色是对单片机系统的仿真,目前支持的单片机类型有:

68000系列、8051系列、ARM系列、AVR系列、PIC系列、Z80系列、HC11系列等。

本文主要介绍Proteus软件在单片机方面的仿真功能,即ISIS模块的用法。

在单片机学习开发的过程中,程序的调试是一个很重要的环节,要安装电路进行实验,而且电路在调试过程中往往要进行调整和改变,这不紧增加了费用和难度,而且也影响了学习和开发的进度,这也成了一些初学者学习的障碍。

如果使用Proteus软件就可以大大节省时间和开发费用,可以在软件仿真通过后再制作印刷电路板进行电路实验。

一、ProteusISIS软件的工作环境和一些基本使用方法

下面通过一个流水灯的实例来说明Proteus的基本使用方法,使用的软件版本是Proteus.Professional7.1SP2。

流水灯使用AT89C51单片机,用P2口作输出口。

先在KeiluVision编译器中输入下列程序:

#include

voidDelay1ms(unsignedintcount)//延时子程序

{

unsignedinti,j;

for(i=0;i

for(j=0;j<120;j++);

}

main()//主程序

{

unsignedcharLEDIndex=0;

bitLEDDirection=1;

while

(1)

{

if(LEDDirection)

P2=~(0x01<

else

P2=~(0x80>>LEDIndex);

if(LEDIndex==7)

LEDDirection=!

LEDDirection;

LEDIndex=(LEDIndex+1)%8;

Delay1ms(200);

}

}

将上述程序编译生成目标文件LED.hex。

然后按下列步骤进行:

1.运行Proteus7Professional(ISIS7Professional)

出现如图1所示的界面:

这是一种标准的Windows界面,包括标题栏、主菜单、标准工具栏、绘图工具栏、状态栏、对象选择按钮、预览对象方位控制按钮、仿真进程控制按钮、预览窗口、对象选择器窗口、图形编辑窗口。

2.添加元件到对象选择器元件列表中

单击绘图工具栏中的按钮,再单击对象选择按钮P,出现挑选元件对话框,见图2。

按表1添加本例所用的元件。

表1

名称

元件

种类(Category)

子种类(Sub-category)

单片机

AT89C51

MicroprocessorICs

8051Family

按钮开关

BUTTON

Switches&Relays

Switches

电容器

CAP

Capacitors

Generic

电解电容器

CAP-ELEC

Capacitors

Generic

电阻器

RES

Resistors

Generic

发光二极管

LED-RED

Optoelectronics

LEDs

晶振

CRYSTAL

Miscellaneous

如果一开始对种类不熟悉,可直接在对话框的KEYWORDS中输入元件的名称如AT89C51、CAP等,就可以直接找到所需的元件,如图3。

添加好元件的对象选择器元件列表见图4。

3.放置元件

在元件列表中左键选取AT89C51,在原理图编辑窗口中适当的位置单击左键,这样AT89C51就被放到原理图编辑窗口中了,同样放置其它元件。

两次右击可以删除放置的元件,右击选中元件后按方向控制按钮可改变元件的方向。

右击选中元件后再按住左键可移动元件位置。

4.放置“地”、“电源”

添加“地”:

左键选择模型选择工具栏中的图标,在图5中左键选择

GROUND,并在原理图编辑窗口中左击,这样“地”就被放置到原理图编辑窗口中了。

同样地,选择POWER可放置“电源”。

5.编辑元件的属性

右击选元件后再左击即可编辑元件的属性,也可以右击后在快捷菜单中选择命令EditProrerties。

如R1的属性窗口如图6。

在对AT89C51的属性进行编辑时要加入仿真文件,在ProgramFile中单击出现文件浏览对话框,找出LED.hex文件,单击确定完成添加文件,单击OK退出。

6.连线

在要连线的一个点左击,移动鼠标到到另一个点再左击即可画好一条连线,按放置导线连接结点,画好连线的仿真电路图见图7。

AT89C51的VSS、VDD不需要连线,默认VSS=0V、VDD=+5V、GND=0V。

7.仿真

单击仿真进程控制按钮中的开始仿真,我们可看到发光二极管分别按两个方向依次点亮。

输出端的小方点红色代表高点平,蓝色代表低电平,灰色代表不确定电平。

在仿真时单片机的晶振电路和复位电路可以省略不画,时钟频率可以在AT89C51的属性中设置,默认值为12MHz。

对于设计好的文件可以保存以便下次调用。

二、单片机仿真实例

上面通过一个简单的例子介绍了ProteusISIS的基本使用方法,下面再通过笔者设计的几个实例进一步介绍ProteusISIS的使用方法和技巧,同时也能够使大家看到几个单片机应用的实例。

1.电感测试仪

电感测试仪以电感加上电压后电流增加的规律作为测量依据,因为电感加上电压后电流增加的速度与电感量相关,通过测量电流达到某一预定值所花的时间就能测量出电感的电感量。

单片机使用AT89C2051,测量电路如图8所示,A为

AT89C2051内部构造的电压比较器,利用电压比较器测量电感中电流的变化,合上开关后电源电压E+加在电感LX和电阻R的串联回路上,这时回路中电流IL由零开始逐渐增加,在电阻R两端电压从0升到0.632E+的过程中,P3.6口输出为0,当电阻R两端电压一旦超过0.632E+后,P3.6口输出电平即变为1。

以P3.6口的输出状态为依据,用AT89C2051内部的定时器T0对时间进行计数,再将计数结果显示出来即得出测量结果。

量程可分为多档,采用两位半数码管显示,单位为mH。

我们只要仿真其中的一档即可,这里取×10档进行仿真,即读数乘以10为实际电感量。

电感测试仪的源程序如下:

#include

unsignedcharj,m,n,t,DispBuf[3];

unsignedintL;

unsignedcharcode

BitTab[3]={0xdf,0xef,0xf7};//位驱动码

unsignedcharcode

DispTab[11]={0x41,0xcf,0x52,0x46,0xcc,0x64,0x60,0x4f,0x40,0x44,0xff};//字形码

sbitP1_2=P1^2;

sbitP3_6=P3^6;

voidDelay1ms(unsignedintcount)//延时程序

{

for(n=0;n

for(m=0;m<250;m++);

}

voidmain()//主程序

{TMOD=0x01;//定时器T0方式1

while

(1)//无限循环

{

t=BitTab[j];//取位值

P1=P1|0x38;//P1.3-P1.5送1

P1=P1&t;//P1.3-P1.5输出取出的位值

t=DispBuf[j];//取出待显示的数

t=DispTab[t];//取字形码

P3=t;//字型码由P3输出显示

Delay1ms(5);

j++;//j作为数码管的计数器,取值0-2,显示程序通过它确认显示哪个数码管

if(j==3)

j=0;

TH0=0;

TL0=0;

P1_2=0;//测试开始

TR0=1;//开定时器T0

for(;P3_6==0;);//判断电阻上的电压上升到参考电压否

TR0=0;//电压达到参考电压,关定时器T0

P1_2=1;

L=TL0|(TH0<<8);//取定时器T0中的数值

L=L-3;

if(L>=200)

{

DispBuf[2]=10;

DispBuf[1]=10;

DispBuf[0]=1;//超量程,百位数显示1,个位、十位不显示(灭)

}

else//不超量程,取各位数值

{

DispBuf[2]=L;//取个位数

L=L/10;

DispBuf[1]=L;//取十位数

DispBuf[0]=L/10;//取百位数

}

}

}

用KeiluVision将上述程序编译生成目标文件DGZS.hex。

电路中所使用的元件见表2。

表2

名称

元件

种类(Category)

子种类(Sub-category)

单片机

AT89C2051

MicroprocessorICs

8051Family

电阻器

RES

Resistors

Generic

可变电阻器

POT-LIN

Resistors

Variable

三极管

2N2905

Transistors

Bipolar

电感器

IND-AIR

Inductors

Generic

4位共阴数码管

7SEG-MPX4-CA

Optoelectronics

7-SegmentDisplays

绘制好的仿真电路图如图9。

图中添加示波器时,先左键选择模型选择工具

栏中的图标,再选择OSCILLOSCOPE,并在原理图编辑窗口中左击,这样示波器就被放置到原理图中了。

由于AT89C2051的P1.0和P1.1是复用端口,除了作I/O口外,还有一个功能是作为电压比较器的输入端,P1.0为同相输入端,P1.1为反相输入端,这里作电压比较器的输入端使用,因此在设置AT89C2051的属性时要将其设置电压比较器的输入端,即EhableComparator选择Yes,如图10。

被测电感器的电感量定为1H。

单击开始仿真,可变电阻RP1是用来校准测量值的,按动RP1的+或-按钮,调节RP1使数码管显示100。

仿真结果见图10。

电阻R2为换挡电阻,改变它的值即可改变挡位。

2.充电器

这是用PIC12F675单片机做的充电器,能对两节镍镉或镍氢电池充电,充电器采用电压监测的方法判断充电是否结束,充电结束后能自动停止充电。

图11是电路图,图中PIC12F675的7脚作模拟信号输入端AN0使用。

单片

机使用内部时钟振荡器,引脚3作充电控制电压输出端GP4使用。

S为复位开关,复位开关主要在重新放上电池后使用。

接上电源后,PIC12F675的GP4输出低电平,三极管VT1饱和导通,两节电池开始充电。

随着电池电压的上升,输入到单片机的模拟电压也不断升高,当电压大于预定的设定值3V时,GP4输出高电平使VT1截止,电池停止充电,并自锁在这一工作状态,即使电池在停止充电后电压略有下降也不会重新进行充电。

在PIC单片机的MPLABIDE编译器中输入下列程序:

#INCLUDE"P12F675.INC"

W_TEMPEQU20H

SWEQU21H

TEMPEQU22H

ORG000H

MAINNOP

MOVLW00H

MOVWFSW

MOVLW95H

MOVWFTEMP

BSFSTATUS,RP0

MOVLWB'00001001'

MOVWFTRISIO

MOVLWB'00000001'

MOVWFANSEL

MOVLWB'10000111'

MOVWFOPTION_REG

BCFSTATUS,RP0

MOVLWB'00000111'

MOVWFCMCON

BCFGPIO,GP4

BSFGPIO,GP5

LOOPBTFSCSW,0

GOTOLOOP

MOVLWB'00000001'

MOVWFADCON0

BSFADCON0,GO

ADCBTFSSPIR1,ADIF

GOTOADC

MOVFADRESH,0

SUBWFTEMP,0

BTFSCSTATUS,C

GOTOLOOP

BSFGPIO,GP4

BCFGPIO,GP5

BSFSW,0

GOTOLOOP

END

然后编译生成目标文件charger.hex。

对充电器仿真时有一个难点,就是Proteus元件库中没有可仿真的充电电池,它的电池元件加上充电电流后电压不会上升,为此可在电池上串一只可变电阻,这样改变可变电阻的大小就可以就可以改变充电回路两端的电压,用来模拟电池电压的变化。

电路中所使用的元件见表3。

表3

名称

元件

种类(Category)

子种类(Sub-category)

单片机

PIC16F675

MicroprocessorICs

PIC12Family

电阻器

RES

Resistors

Generic

可变电阻器

POT-LIN

Resistors

Variable

三极管

2N5415

Transistors

Bipolar

按钮开关

BUTTON

Switches&Relays

Switches

发光二极管

LED-RED

Optoelectronics

LEDs

单节电池

CELL

Miscellaneous

绘制仿真电路图时添加直流电压表和上例中选择示波器类似,先左键选择模型选择工具栏中的图标,再选择DCVOLTMETER即可。

将可变电阻器RP1滑动触点调到中点以下的位置单击开始仿真,仿真结果见图12。

RP1的滑动触点向上调节,电压表的读数会逐渐上上升,当读数大于3V时,会停止充电,发光二极管VD1熄灭,电压表的读数恢复为2.5V,这时即使我们把RP1滑动触点调到中点以下也不会重新充电,只有按一下复位键S1才会重新充电。

3.电机调速控制器

直流电机的调速主要调整其工作电流,通常有两种方式:

一种是在电机供电电路中串接一个可变电阻,通过改变可变电阻的阻值调节工作电流,从而调节转速;另一种方法是在直流电机上加直流脉冲电压,通过改变脉冲直流电的占空比来调节转速。

前一种方法因为可变电阻上有压降要损耗功率,所以效率不高,只有用小功率直流电机时使用,后一种工作效率高,如目前的电动自行车都采用这种调速方式。

下面用AVR单片机ATmega8设计一个电机调速控制器,使其定时/计数器T/C1工作在PWM模式,作为PWM脉宽调制器。

在ICCAVR编译器中输入下列程序:

#include

#defineucharunsignedchar

chark;

voidDelayMs(chari)

{

charj;

for(;i!

=0;i--)

{for(j=143;j!

=0;j--);}

}

#pragmainterrupt_handlerINT_0:

2

voidINT_0(void)

{

if(k!

=250)

k=k+5;

OCR1A=k;//设置PWM参数

DelayMs(100);

}

#pragmainterrupt_handlerINT_1:

3

voidINT_1(void)

{

if(k!

=5)

k=k-5;

OCR1A=k;//设置PWM参数

DelayMs(100);

}

voidmain(void)

{

DDRD=0X00;

PORTD=0xff;//设置PD口为带上拉电阻的输入口

DDRB=0xff;//设置PB口为推挽1输出

PORTB=0xff;

SREG=0x80;//开全局中断

GICR=0xc0;//开外部中断

TCCR1A=0xc1;//8位PWM,向上计数置位OC1A,向下计数清零OC1A

TCCR1B=0x01;//时钟1分频,PWM信号频率为1M/512=2KHz

k=125;

OCR1A=k;//设置PWM参数

while

(1);

}

编译生成目标文件djts.hex。

电路中所使用的元件见表4。

表4

名称

元件

种类(Category)

子种类(Sub-category)

单片机

ATmega8

MicroprocessorICs

AVRFamily

电阻器

RES

Resistors

Generic

三极管

2N3054

Transistors

Bipolar

按钮开关

BUTTON

Switches&Relays

Switches

电池

BATTERY

Miscellaneous

直流电机

MOTOR

Electromechanical

绘制好仿真电路图,仿真结果见图13。

当按下S1时,PB1输出PWM信号占空比减小,电机速度减小;当按下S2时,PB1输出PWM信号占空比增加,电机速度增加。

从示波器上可以看到PWM信号占空比在调节时的变化。

4.智力竞赛抢答器

用单片机AT89C51做一个抢答器,供8组抢答,当主持人按一下开始键后即可开始抢答,当某一组按下抢答键后,其它各组的按键被锁定,主机上的数码管显示相应的组号,同时该组桌上的发光二极管也点亮,并发出1秒钟的报警声,数码管和发光二极管的显示时间为5秒钟。

在KeiluVision编译器中输入下列程序:

#include

unsignedcharn,i;

unsignedlongintm,t;

sbitS1=P0^0;

sbitS2=P0^1;

sbitS3=P0^2;

sbitS4=P0^3;

sbitS5=P0^4;

sbitS6=P0^5;

sbitS7=P0^6;

sbitS8=P0^7;

sbitVD1=P1^0;

sbitVD2=P1^1;

sbitVD3=P1^2;

sbitVD4=P1^3;

sbitVD5=P1^4;

sbitVD6=P1^5;

sbitVD7=P1^6;

sbitVD8=P1^7;

sbitSOUND=P3^0;

sbitSTART=P3^1;

voiddelay(t)//延时子程序

{

for(;t>0;t--)

{for(i=0;i<250;i++);}

}

voidmain()//主程序

{

while

(1)//无限循环

{

if(START==0)//若开始键按下

{

n=0;

while(n==0)//若n=0,循环执行

{

if(S1==0)//若S1按下

{VD1=0;P2=0x79;n=1;}//发光二极管VD1点亮,数码管显示1

elseif(S2==0)//若S2按下

{VD2=0;P2=0x24;n=1;}//发光二极管VD2点亮,数码管显示2

elseif(S3==0)//若S3按下

{VD3=0;P2=0x30;n=1;}//发光二极管VD3点亮,数码管显示3

elseif(S4==0)//若S4按下

{VD4=0;P2=0x19;n=1;}//发光二极管VD4点亮,数码管显示4

elseif(S5==0)//若S5按下

{VD5=0;P2=0x12;n=1;}//发光二极管VD5点亮,数码管显示5

elseif(S6==0)//若S6按下

{VD6=0;P2=0x02;n=1;}//发光二极管VD6点亮,数码管显示6

elseif(S7==0)//若S7按下

{VD7=0;P2=0x78;n=1;}//发光二极管VD7点亮,数码管显示7

elseif(S8==0)//若S8按下

{VD8=0;P2=0x00;n=1;}//发光二极管VD8点亮,数码管显示8

}

for(m=0;m<1000;m++)//发出1秒报警声

{

SOUND=!

SOUND;

delay

(1);

}

delay(5000);//发光二极管、数码管继续点亮5秒

P1=0xff;

P2=0xff;

}

}

}

将上述源程序编译生成目标文件vie_answer.hex。

电路中所使用的元件见表5。

表5

名称

元件

种类(Category)

子种类(Sub-category)

单片机

AT89C51

MicroprocessorICs

8051Family

电阻器

RES

Resistors

Generic

三极管

2N2905

Transistors

Bipolar

共阳数码管

7SEG-COM-ANODE

Optoelectronics

7-SegmentDisplays

扬声器

SPEAKER

Speakers&Sounders

绘制好仿真电路图,设置好有关元件的属性,仿真后先按一下开始按钮S9,再按一下S1~S8中的任一个按钮比如S6,仿真结果见图14。

欢迎您的下载,资料仅供参考!

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 党团工作 > 入党转正申请

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2