用Proteus仿真单片机的方法_第1页
用Proteus仿真单片机的方法_第2页
用Proteus仿真单片机的方法_第3页
用Proteus仿真单片机的方法_第4页
用Proteus仿真单片机的方法_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 用PROTEUS对单片机进行仿真的方法与实例 吴汉清 Proteus软件是英国Labcenter Electronics公司的一款电路设计与仿真软件,它包括ISIS、ARES等软件模块,ARES模块主要用来完成PCB的设计; ISIS模块用来完成电路原理图的布图和仿真。它可以进行模拟电路仿真、数字电路仿真,也可以进行单片机及其外围电路组成的系统的仿真;软件提供了各种虚拟仪器,如示波器、逻辑分析仪、信号发生器、电压表、电流表等。和其它仿真软件相比,Proteus ISIS最大特色是对单片机系统的仿真,目前支持的单片机类型有: 68000系列、8051系列、ARM系列、AVR系列、PIC系列、Z

2、80系列、HC11系列等。本文主要介绍Proteus软件在单片机方面的仿真功能,即ISIS模块的用法。 在单片机学习开发的过程中,程序的调试是一个很重要的环节,要安装电路进行实验,而且电路在调试过程中往往要进行调整和改变,这不紧增加了费用和难度,而且也影响了学习和开发的进度,这也成了一些初学者学习的障碍。如果使用Proteus 软件就可以大大节省时间和开发费用,可以在软件仿真通过后再制作印刷电路板进行电路实验。一、Proteus ISIS软件的工作环境和一些基本使用方法 下面通过一个流水灯的实例来说明Proteus的基本使用方法,使用的软件版本是Proteus.Professional 7.1

3、 SP2。 流水灯使用AT89C51单片机,用P2口作输出口。先在Keil uVision编译器中输入下列程序:#include <reg51.h>void Delay1ms(unsigned int count)/延时子程序 unsigned int i,j; for(i=0;i<count;i+) for(j=0;j<120;j+);main() /主程序 unsigned char LEDIndex = 0; bit LEDDirection = 1; while(1) if(LEDDirection) P2 = (0x01<<LEDIndex); e

4、lse P2 = (0x80>>LEDIndex); if(LEDIndex=7) LEDDirection = !LEDDirection; LEDIndex = (LEDIndex+1)%8; Delay1ms(200); 将上述程序编译生成目标文件LED.hex。然后按下列步骤进行:1. 运行Proteus 7 Professional(ISIS 7 Professional)出现如图1所示的界面: 这是一种标准的Windows界面,包括标题栏、主菜单、标准工具栏、绘图工具栏、状态栏、对象选择按钮、预览对象方位控制按钮、仿真进程控制按钮、预览窗口、对象选择器窗口、图形编辑窗口

5、。2.添加元件到对象选择器元件列表中 单击绘图工具栏中的按钮,再单击对象选择按钮P,出现挑选元件对话框,见图2。按表1添加本例所用的元件。表1 名称元件种类(Category)子种类(Sub-category)单片机AT89C51Microprocessor ICs8051 Family按钮开关BUTTONSwitches & RelaysSwitches电容器CAPCapacitorsGeneric电解电容器CAP-ELECCapacitorsGeneric电阻器RESResistorsGeneric发光二极管LED-REDOptoelectronicsLEDs晶振CRYSTALMi

6、scellaneous 如果一开始对种类不熟悉,可直接在对话框的KEYWORDS中输入元件的名称如AT89C51、CAP等,就可以直接找到所需的元件,如图3。 添加好元件的对象选择器元件列表见图4。 3.放置元件 在元件列表中左键选取AT89C51,在原理图编辑窗口中适当的位置单击左键,这样AT89C51就被放到原理图编辑窗口中了,同样放置其它元件。两次右击可以删除放置的元件,右击选中元件后按方向控制按钮可改变元件的方向。右击选中元件后再按住左键可移动元件位置。 4.放置“地”、“电源” 添加“地”:左键选择模型选择工具栏中的 图标,在图5中左键选择GROUND,并在原理图编辑窗口中左击,这样

7、“地”就被放置到原理图编辑窗口中了。同样地,选择POWER可放置“电源”。 5.编辑元件的属性 右击选元件后再左击即可编辑元件的属性,也可以右击后在快捷菜单中选择命令Edit Prorerties。如R1的属性窗口如图6。 在对AT89C51的属性进行编辑时要加入仿真文件,在Program File中单击出现文件浏览对话框,找出LED.hex文件,单击确定完成添加文件,单击OK退出。6.连线 在要连线的一个点左击,移动鼠标到到另一个点再左击即可画好一条连线,按 放置导线连接结点,画好连线的仿真电路图见图7。 AT89C51的VSS、VDD不需要连线,默认VSS=0V、VDD=+5V、GND=0

8、V。 7.仿真 单击仿真进程控制按钮中的开始仿真,我们可看到发光二极管分别按两个方向依次点亮。输出端的小方点红色代表高点平,蓝色代表低电平,灰色代表不确定电平。在仿真时单片机的晶振电路和复位电路可以省略不画,时钟频率可以在AT89C51的属性中设置,默认值为12MHz。对于设计好的文件可以保存以便下次调用。 二、单片机仿真实例 上面通过一个简单的例子介绍了Proteus ISIS的基本使用方法,下面再通过笔者设计的几个实例进一步介绍Proteus ISIS的使用方法和技巧,同时也能够使大家看到几个单片机应用的实例。 1.电感测试仪电感测试仪以电感加上电压后电流增加的规律作为测量依据,因为电感加

9、上电压后电流增加的速度与电感量相关,通过测量电流达到某一预定值所花的时间就能测量出电感的电感量。单片机使用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对时间进行计数,再将计数结果显示出来即得出测量结果。量程可分为多档,采用两位

10、半数码管显示,单位为mH。我们只要仿真其中的一档即可,这里取×10档进行仿真,即读数乘以10为实际电感量。电感测试仪的源程序如下:#include <reg51.h>unsigned char j,m,n,t,DispBuf3;unsigned int L;unsigned char codeBitTab3=0xdf,0xef,0xf7;/位驱动码unsigned char codeDispTab11=0x41,0xcf,0x52,0x46,0xcc,0x64,0x60,0x4f,0x40,0x44,0xff;/字形码sbit P1_2=P12;sbit P3_6=P36

11、;void Delay1ms(unsigned int count) /延时程序 for(n=0;n<count;n+) for(m=0;m<250;m+);void main() /主程序 TMOD=0x01;/定时器T0方式1 while(1) /无限循环 t=BitTabj;/取位值 P1=P1|0x38;/P1.3-P1.5送1 P1=P1&t; /P1.3-P1.5输出取出的位值 t=DispBufj;/取出待显示的数 t=DispTabt;/取字形码 P3=t; /字型码由P3输出显示 Delay1ms(5); j+; /j作为数码管的计数器,取值0-2,显示程

12、序通过它确认显示哪个数码管 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) DispBuf2=10; DispBuf1=10; DispBuf0=1; /超量程,百位数显示1,个位、十位不显示(灭) else /不超量程,取各位数值 DispBuf2=L;/取个位数 L=L/10; DispBuf1=L

13、;/取十位数 DispBuf0=L/10;/取百位数 用Keil uVision将上述程序编译生成目标文件DGZS.hex。电路中所使用的元件见表2。表2 名称元件种类(Category)子种类(Sub-category)单片机AT89C2051Microprocessor ICs8051 Family电阻器RESResistorsGeneric可变电阻器POT-LINResistorsVariable三极管2N2905TransistorsBipolar电感器IND-AIRInductorsGeneric4位共阴数码管7SEG-MPX4-CAOptoelectronics7-Segment

14、Displays 绘制好的仿真电路图如图9。图中添加示波器时,先左键选择模型选择工具 栏中的 图标,再选择OSCILLOSCOPE,并在原理图编辑窗口中左击,这样示波器就被放置到原理图中了。由于AT89C2051的P1.0和P1.1是复用端口,除了作I/O口外,还有一个功能是作为电压比较器的输入端,P1.0为同相输入端,P1.1为反相输入端,这里作电压比较器的输入端使用,因此在设置AT89C2051的属性时要将其设置电压比较器的输入端,即Ehable Comparator选择Yes,如图10。 被测电感器的电感量定为1H。单击开始仿真,可变电阻RP1是用来校准测量值的,按动RP1的+或-按钮,

15、调节RP1使数码管显示100。仿真结果见图10。电阻R2为换挡电阻,改变它的值即可改变挡位。2. 充电器 这是用PIC12F675单片机做的充电器,能对两节镍镉或镍氢电池充电,充电器采用电压监测的方法判断充电是否结束,充电结束后能自动停止充电。图11是电路图,图中PIC12F675的7脚作模拟信号输入端AN0使用。单片机使用内部时钟振荡器,引脚3作充电控制电压输出端GP4使用。S为复位开关,复位开关主要在重新放上电池后使用。 接上电源后,PIC12F675的GP4输出低电平,三极管VT1饱和导通,两节电池开始充电。随着电池电压的上升,输入到单片机的模拟电压也不断升高,当电压大于预定的设定值3V

16、时,GP4输出高电平使VT1截止,电池停止充电,并自锁在这一工作状态,即使电池在停止充电后电压略有下降也不会重新进行充电。 在PIC单片机的MPLAB IDE编译器中输入下列程序:#INCLUDE "P12F675.INC"W_TEMP EQU 20HSW EQU 21HTEMP EQU 22H ORG 000HMAIN NOP MOVLW 00H MOVWF SW MOVLW 95H MOVWF TEMP BSF STATUS,RP0 MOVLW B'00001001' MOVWF TRISIO MOVLW B'00000001' MOVW

17、F ANSEL MOVLW B'10000111' MOVWF OPTION_REG BCF STATUS,RP0 MOVLW B'00000111' MOVWF CMCON BCF GPIO,GP4 BSF GPIO,GP5LOOP BTFSC SW,0 GOTO LOOP MOVLW B'00000001' MOVWF ADCON0 BSF ADCON0,GOADC BTFSS PIR1,ADIF GOTO ADC MOVF ADRESH,0 SUBWF TEMP,0 BTFSC STATUS,C GOTO LOOP BSF GPIO,GP4

18、 BCF GPIO,GP5 BSF SW,0 GOTO LOOP END 然后编译生成目标文件charger.hex。 对充电器仿真时有一个难点,就是Proteus元件库中没有可仿真的充电电池,它的电池元件加上充电电流后电压不会上升,为此可在电池上串一只可变电阻,这样改变可变电阻的大小就可以就可以改变充电回路两端的电压,用来模拟电池电压的变化。电路中所使用的元件见表3。 表3 名称元件种类(Category)子种类(Sub-category)单片机PIC16F675Microprocessor ICsPIC12 Family电阻器RESResistorsGeneric可变电阻器POT-LINR

19、esistorsVariable三极管2N5415TransistorsBipolar按钮开关BUTTONSwitches & RelaysSwitches发光二极管LED-REDOptoelectronicsLEDs单节电池CELLMiscellaneous 绘制仿真电路图时添加直流电压表和上例中选择示波器类似,先左键选择模型选择工具栏中的 图标,再选择DC VOLTMETER即可。 将可变电阻器RP1滑动触点调到中点以下的位置单击 开始仿真,仿真结果见图12。 RP1的滑动触点向上调节,电压表的读数会逐渐上上升,当读数大于3V时,会停止充电,发光二极管VD1熄灭,电压表的读数恢复为

20、2.5V,这时即使我们把RP1 滑动触点调到中点以下也不会重新充电,只有按一下复位键S1才会重新充电。 3. 电机调速控制器 直流电机的调速主要调整其工作电流,通常有两种方式:一种是在电机供电电路中串接一个可变电阻,通过改变可变电阻的阻值调节工作电流,从而调节转速;另一种方法是在直流电机上加直流脉冲电压,通过改变脉冲直流电的占空比来调节转速。前一种方法因为可变电阻上有压降要损耗功率,所以效率不高,只有用小功率直流电机时使用,后一种工作效率高,如目前的电动自行车都采用这种调速方式。下面用AVR单片机ATmega8设计一个电机调速控制器,使其定时/计数器T/C1工作在PWM模式,作为PWM脉宽调制

21、器。在ICCAVR编译器中输入下列程序:#include <iom8v.h>#define uchar unsigned char char k; void DelayMs(char i) char j; for(;i!=0;i-) for(j=143;j!=0;j-); #pragma interrupt_handler INT_0:2void INT_0(void) if(k!=250) k=k+5; OCR1A=k; /设置PWM参数 DelayMs(100); #pragma interrupt_handler INT_1:3void INT_1(void) if(k!=5

22、) k=k-5; OCR1A=k; /设置PWM参数 DelayMs(100); void main(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.h

23、ex。电路中所使用的元件见表4。表4 名称元件种类(Category)子种类(Sub-category)单片机ATmega8Microprocessor ICsAVR Family电阻器RESResistorsGeneric三极管2N3054TransistorsBipolar按钮开关BUTTONSwitches & RelaysSwitches电池BATTERYMiscellaneous 直流电机MOTORElectromechanical 绘制好仿真电路图,仿真结果见图13。 当按下S1时,PB1输出PWM信号占空比减小,电机速度减小;当按下S2时,PB1输出PWM信号占空比增加,

24、电机速度增加。从示波器上可以看到PWM信号占空比在调节时的变化。 4. 智力竞赛抢答器 用单片机AT89C51做一个抢答器,供8组抢答,当主持人按一下开始键后即可开始抢答,当某一组按下抢答键后,其它各组的按键被锁定,主机上的数码管显示相应的组号,同时该组桌上的发光二极管也点亮,并发出1秒钟的报警声,数码管和发光二极管的显示时间为5秒钟。 在Keil uVision编译器中输入下列程序:#include <reg51.h>unsigned char n,i;unsigned long int m,t;sbit S1=P00;sbit S2=P01;sbit S3=P02;sbit S

25、4=P03;sbit S5=P04;sbit S6=P05;sbit S7=P06;sbit S8=P07;sbit VD1=P10;sbit VD2=P11;sbit VD3=P12;sbit VD4=P13;sbit VD5=P14;sbit VD6=P15;sbit VD7=P16;sbit VD8=P17;sbit SOUND=P30;sbit START=P31;void delay(t) /延时子程序 for(;t>0;t-) for(i=0;i<250;i+); void main() /主程序 while(1) /无限循环 if(START=0)/若开始键按下 n=0; while(n=0)/若n=0,循环执行 if(S1=0)/若S1按下 VD1=0;P2=0x79;n=1; /发光二极管VD1点亮

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论