用Proteus仿真单片机的方法.docx
- 文档编号:17627471
- 上传时间:2023-07-27
- 格式:DOCX
- 页数:25
- 大小:332.45KB
用Proteus仿真单片机的方法.docx
《用Proteus仿真单片机的方法.docx》由会员分享,可在线阅读,更多相关《用Proteus仿真单片机的方法.docx(25页珍藏版)》请在冰点文库上搜索。
用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。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Proteus 仿真 单片机 方法