用Proteus仿真单片机的方法.docx
用PROTEUS对单片机进行仿真的方法与实例吴汉清Proteus软件是英国1.abcenterElectronics公司的一款电路设计与仿真软件,它包括ISTS,ARES等软件模块.ARES模块主要用来完成PCB的设计:ISlS模块用来完成电路原理图的布图和仿真.它可以进行模拟电路仿式、数字电路仿衣.也可以进行单片机及其外围电路组成的系统的仿真:软件提供r各种虚拟仪器,如示波器、逻辑分析仪、信号发生器、电压表、电流表等。和其它仿真软件相比,ProteusISlS最大特色是对单片机系统的仿真,目前支持的单片机类型有:68000系列、8051系列、ARM系列、AVR系列、PIC系列、Z80系列、HCIl系列等.本文主要介绍PrO1.QUS软件在单片机方面的仿真功能,即ISlS模块的用法“在单片机学习开发的过程中,程序的调试是个很重要的环节要安装电路进行实验,而旦电路在调试过程中往往要进行调整和改变,这不紧增加了费用和难度,而且也膨响了学习和开发的进度,这也成了一些初学者学习的障碍.如果使用PrOteUS软件就可以大大节省时间和开发费用,可以在软件仿息通过后再制作印刷电路板进行电路实验。一、ProteusISlS软件的工作环境和一些根本使用方法下面通过一个流水灯的实例来说明PrOtCUS的根本使用方法,使用的软件版本是ProtCUS,Professional7.ISp2。流水灯使用AT89C51单片机,用P21.I作输出Ix先在KeilUviSion编译器中输入以下程序:include<reg51.h>voidDelaylms(unsignedintCoUln)延时子程序unsignedinti,j;for(i=0;i<count:i+)for(j=0J<120J+):mainO/主程序unsignedchar1.EDlndex=0:bit1.EDDirection=I:while(l)if(1.EW)irection)P2="(OxOKC1.EDIndex);elseP2='(0x80>>1.EDIndex):if(1.EDIndex=7)1.EDDirection=!1.EDDirection;1.EDlndcx=(1.EDIndex+1)%8;Dclaylms(200):)将上述程序编译生成目标文件1.ED.hexs然后按以下步骤进行:1 .运行ProteUS7Professional(ISIS7Professional)出现如图1所示的界而:这是种标准的WindgS界面,包括标题栏、主菜单、标准工具栏、绘图工具栏、状态栏、对象选择按钮、预览对象方位控制按钮、仿真进程控制按钮、预览雷口、对象选择器窗口、图形编辑窗口.2 .添加元件到对象选择器元件列表中单击绘图工具栏中的按钮,再单击对象选择按钮P,出现挑选元件对话框,见图2。按表1添加本例所用的元件.PickD*vicvIMJ>S4c30NiM)OOF.<'.Mmcne<:MfthateWa?HQ0A>CtfwwAfW100lCcC4ciatCMOS4000iIMCcrrwclortDCawwtviDetMXXX)Tod>CmJc.EC1.WOOOSeCllcmccharc4Mcui1.epinePhb*vciMmlaneoutMoe>2ArA田CXQuMMpOmOp*cmMmksPlDsIfPGAs"i5;SnUXOfPtiy,USardenC.rfMKMQ7<MSubcIl»9OyRManAVRftfOrBASICS<mm>MedJeiHCIIFfPw4<rAftMNCAimlOE.1Ib也.Dec"MICROMICROMICROMICROMCS051MCSTOIMCS9051MCS8051MC$8051MCS1MCSeO51McsmMCSanlMCSgMCS1McseMCSK61MCS8051MCS051MCS801MCSe(H1MCS1MCS051MCS1MCS9051MCSTOIMCS1MCSC61MCS061MCSTOIMCSKSIMeSfOMMCS1MCSa»1MCSWSIMCSgMCSMG<nac8MkfoconfrcferGmwcHMi9occ11fcrGnmc8*UtMQoCoHh4Geneac8*XMaOCCRtl480518ittrtMR0M¼m.1208MY«6&l/0,轴2Ti805>amOrtlCIeIR0Mw.12®M.8MMDalWTi90518encsoccrtttl<fR0Mm4寓。I/O.葡WTiO51coer93occmderROMs,2568RW46WO,"IgATi731/0.2XWGH70XMO,4£m团8051coeMxworirole*901co»Hocorrh>9051cownk>occrtcU41ROM12®RAM4W)1660513nx>CQrtc*eF»8ROM256BRAM.44MVO.>16805)coteMoocorticioiBlfiROM.256BRAM,4MI/O,*1680comMcKKcrtrakiA0Mmsz1三RAMWRXI/O.既,coIegXOntttIh1&SROM,决8WSrI/O,MPottXeMbI&BROM.2K8RAM&HKM0.3T1.M<5r*R0MM4O0WMMCC9051Mr×gckr田卦9R0M,298RAMMbfl/OM905>8e3g*y6SRoM印RAMMbtI/O801gMcnxortraleiROMfKffiRAMMS6MO.IaaIr-MMIgCgtra1«AOMfl2RAMUART8051coeeM<focor<roleROMs.12®RAMJXrAelc805»co«McaMJrtroteitWhIaBROM.2568RAK81RThen.a»i8tMc2cor<ro*h*BROM."68RARMMmThen.8051coeMxnxortrolefMthBROMS£8RAM缸51ged的805»coteMwxorirokIhlikBRO以方BRAM51-bwed8MgM<EoriyQThdBROMGWRAM130k*11&906IgFKOHral«*h3>BROMMBRAMMUOIrwt1-1G8051cowMkKKortro1«Ih1BR0MMBFUMt9I/OIrwi*119051cowMw三ortro¼hBROM.MBRNM.1$Izokw.l陆8051<xmM<oreolvWh3BROM.M8FUM.21VQkw>.U168½t3MaocWwthIUBROM.2%BRAM.MbcIQ.3bl80lcoteMcmortraleiMthBROM.12FUMQieMg31&8051coeeMe<oriwihBROM.1288FUH48Mga168051cohMwcortF*Ih做BEPWX51:BM.IQ、9051<xmMeocortrokfWth孙BEPPOM512B4吩HVOV加CgMWwortr1.hGSFPROMaRAMy©I/OW二名称元件种类(Category)子种类iSub-category)单片机T89C51MicroprocessorICs8051Family按钮开关BUTTONSwitches&RelaysSwitches电容器CAPCapacitorsGeneric电解电容器CAP-E1.E1.CapacitorsGeneric电阻器QESResistorsGeneric发光二极西.ED-REDOptoelectronics1.EDs品振CRYSTA1.Miscellaneous果一开始对种类不熟悉,可直接在对话框的KEYWORDS中输入元件的名称如AT89C51、CAP等,就可以直接找到所需的元件,如图3。PickDevicesDEVICESKeyWa8:t89c51MNCh皿holeWords)口Oy(lC3egor4MicropfocessorICsResuIU的Device1.ibraryAT89C51MCS8051AT89C51.BUSMCS8051AT89C51RB2MCS8051AT89C51RB2.BUSMCS8051AT89C51RC2MCS8051AT89C51RC2.BUSMCS051AT89C51RD2MCS8051AT89C51RD2.8USMCS8051添加好元件的对象选择器元件列表见图4。3-放置元件在元件列表中左键选取AT89C51,在原理图编辑窗口中适当的位置,单击左键,这样AT89C51就被放到原理图编辑窗口中了,同样放置其它元件。两次右击可以删除放置的元件,右击选中元件后按方向控制按钮可改变元件的方向。右击选中元件后再按住左键可移动元件位置,4 .放置“地”、“电源”添加“地”:左世选择模型选择【具栏中的图标,在图5中左键选择GROlMD并在原理图编辑窗11中左击.这样“地”就被放置到原理图编辑窗口中九同样地,选择POWER可放置“电源”.5 .编辑元件的属性右击选元件后再左击即可编辑兀件的属性也可以右击后在快捷菜单中选择命令EdilProrertiese如Rl的属性窗口如图6.在对AT89C51的属性进行编辑时要参加仿真文件,在PrOgramFile中单击出现文件浏览对话据,找出1.ED.hcx文件,单击确定完成涔加文件,单击OK退出.6,连线在要连线的一个点左击,移动鼠标到到另一个点再左击即可画好一条连线,按放置导线连接结点,画好连线的仿我电路图见图7.AT89C5I的YSS、YDD不需要连线,默认VSS=OV、VDD=+5V,GND=OV.7 .仿真电击仿或进程控制按钮中的开始仿冢,我们可看到发光.极管分别按两个方向依次点亮,输出端的小方点红色代表高点平,荏色代表低电平,灰色代表不确定电平.在仿真时单片机的晶振电路和空位电路可以省略不画,时钟频率可以在AT89C51的属性中设置,默认值为12MHz。对于设计好的文件可以保存以便下次调用“二、单片机仿真实例1.电感赛试仪就频量出电感的电感电路如耐示尚上面通过一个筒单的例子介绍了ProteusISK的根本使用方法,卜.而再通过盘者设计的几个实例进一步介绍PmleusISlS的使用方法和技巧,同时也到几个单片机应用的实例.T89C2051内部构造的电压比拟器,利用电压比拟器泄愤电感中电流的变化,合上开关后电源电压E加在电感1.X和由零开始逐渐增加,在电IylR两端电压从。升到0632E+的过程中,P3.61.1输出为0.当电BlR两端电压口.超过0.632E+后,P3.61输出电平即变为1。以P3.单位为mH.我们只要仿真其中的一档即可,这里取X10档进行仿真,即读数乘以K)为实际电感量.<reg51.h>charj,m,n,t,DispBuf3:下:gnedcharcodetTab3=<0xdf,Oxef,0xf7;位驱动码charcodeDispTab11=0x411Oxcf10x52,0x46,Oxcc,0x64,0x60,0x4f.0x40,0x44,OXn1;字形码SbitPl_2=Pl_2:sbitP3.-P3'6:voidDelaylms(unsignedinicount)延时程序for(n0:n<count:nTfor(m=0:m<250;m+):voidInaino/主程序TMoboXO1:定时器To方式1While(I)无限循环1.BilTabJ;取位值PI=PlIoX38"P1.3-P1.5送1Pl=PUt:/P1.3-P1.5输出取出的位值1.DiSPBUf仃;取出待显示的数1.DispTaMt:取字形码P3=i:字型码由P3输出显示Delaylns(三);j:/j作为数码管的计数器,取值0-2,显示程序通过它确认显小哪个数码管i'i.i,j=0:THO=O;T1.O=O:P1.2=0;测试开始TRO=I;开定时器Tofor(;P3_6=0:);判断电阻上的电氏上升到参考电压否TRo=0:/电压到达参考电压,关定时器TOPI.2=1;1.=T1.O(TH0<<8):取定时器TO中的数值1.=1.-3:if(1.>=200)DispBuf2=10;DispBufl=10;DispBuf0=1:超量程,百位数显示1,个位、十位不显示(灭)Jelse不超量程,取各位数值DiSPBUf2=1.;取个位数1.=1./10:DiSPBUfu=1.;取十位数DiSPBUfQ=1.lO;取百位数用KoiIuVision将上述程序编译生成目标文件DGZS.hex.电路中所使用的元件见表2表2名林元件种类ICategory;种类ISub-category单片机W89C2051MicroprocessorICs8051Family电阻器RESResistorsGenericUJ变电阻器POT-UNResistorsariable/管2N2905TransistorsBipolar电感塞IND-AlRInductorsGeneric。位共网数码也7SEG-MPX4-CAOptoelectronics7-SegmetDisplays绘制好的仿真电路图如图9图中添加示波器时,先左键选择模型选择工具栏中的图标,再选择OSCI1.1.OSa)PE,并在照理图编辑窗口中左击,这样示波器就被放置到原理图中了“由于AT89C2051的P1.O和P1.1是复用端口,除了作I/O口外,还有-个功能是作为电压比拟器的输入湍.Pl.0为同相输入端,P1.1为反相输入端.这里作电压比拟罂的输入端使用,因此在设置AT89C2051的属性时要将其设置电压比拟器的输入端,即EhabIeCOmParator选择Yes,如图10.被测电感器的电感量定为IH.单击开始仿真,可变电限RPl是用来校准测用值的,按动RPI的,或-按M,调节RPl使数码管显示100II仿真结果见图10。电阻R2为换挡电阻,改变它的值即可改变挡函;2.充电卷这是用PICl2F675单片机做的充电器,能对两节锲镉或银氢电池充电,充电器采用电压监测的方法判断充电是否结束,充:图11是电路图,图中P1C'12F675的7脚作模拟信号输入揣八0使用,附片机使用内部时钟振荡器,引脚3作充电控制电压输出端GP4使用“S为复位开关,复位开关主要在蓝新放上电池后使用.接上电演后,PICI2F675的GP礴的低电平,:.极管VTl饱和导通,两节电池开始充电的/电池电区的上.升.临入到单片机的模拟电压也不断升高,当电压大于愤定的设定值3Y时,GP4输出高电平使VTl截止,电池停止充电,并自锁在这一工作状态,即使电池在停止充电后电压略有下降也不会重新进行充电.在FIC单片机的MP1.ABIDE译器中输入以下程序:Sinclude*pi2F675.incWTEMPEQU2011SIEQu211lTEMPEQU2211ORGOOOHMAINNOPMOV1.WOOHMOVWI'SWMOV1.W95HMOVWITEMPBSFSTATUS,RpOMOV1.WB,0000100MOVWETRISIOUOV1.WB'OOOOOOOMOVWFANSE1.MOV1.WB'I000011MOVII-()PTION.REGBCFSTATUS,RIWMOV1.WB,0000011MOVWFCMCONBCFGPIO,GIMBSFGIUO,GP51.ooPBTFSCSW.0GOTOl00PMOV1.WB,00000001,MOVWFADCONOBSFADCONO,GOADCBTFSSPlRl,D1FGOTODCUOVFADRESH,OSlIBWFTEMP,OBTFSCSTATUS,CGOTO1.OOPBSFGPIO,GP4BCFGPIO,GP5BSFSW,OGOTO1.OOPEND然后编译生成目标文件charger.hex-对充电器仿典时有一个难点,就是Proteus元件库中没有可仿其的充电电池,它的电池元件加上充电电流后电压不会上升,为此可在电池上串一只可变电阻,这样改变可变电阻的大小就可以就可以改变充电回路两端的电压,用来模拟电池电压的变化,电路中所使用的元件见表3.表3名称元件种类(Category广种类ISUb-CategOry单片机PIC16F675MicroprocessorICs>IC12FamilyI1H1SRESResistorsGeneric对变电阻器POT-UNResistorsVariable既管2N5415TransistorsBipolar按钿开关BUTTONSwitches&RelaysSwitches,光二极管1.ED-REDOptoelectronics1.EDs单节电池CE1.1.Miscellaneous绘制仿真电路图时添加直流电压表和上例中选择示波器类似,先左键选择模型选择工具栏中的图标,再选择DevO1.TMETER即可.将可变电阻器RPI滑动触点调到中点以下的位置单击开始仿其,仿其结果见图12.RPl的滑动触点向上调节,电压表的读数会逐渐上上升,当读数大于3Y时,会停止充电,发光二极管VDl熄灭,电压表的读数恢复为2.5Y,这时即使我们把RPl爷动触点调到中点以下也不会重新充电,只有按吓复位键Sl才会重新充电。3电机调速控制器直流电机的调速主要调整其工作电流,通常1两种方式:种是在电机供电电路中中接个可变电阻,通过改变可变电吼的阳值周节工作电流,从而调节转速:另一种方法是在直流电机上加直流脉冲电压,通过改变脉冲直流电的占空比来调节转速“前一种方法因为可变电阻上有压低要损耗功率,所以效率不高,只有用小功率直流电机时使用.后,种工作效率高,如目的的电动自行车都采用这种调速方式Il下面用AVR单片机ATmCga8设计个电机调速控制静,使其定时/计数器T'C1工作在PWM模式,作为PwM脉宽倜制器“在ICCAVR编译罂中输入以下程序:Jfinclude<iom8v.h>defineucharunsignedcharchark;voidDelayMsCchari)charj:for(:i!=0:i-)(for(j=143:j!=0;j);)#pragmainterrupthandlerIN1.O:2voidINT_0(void)if(k!=250)k=k+5:OCRlA=k:设置PWM参数DelayMs(100):与pragmainterrupthandler1NT1:3voidINT1(void)if(k!=5)k=k-5;0CRlA=k:设置加参数DelayMs(100):voidmain(void)(DDRD=OXOO:PORTD=Oxff;设巴PD口为带上拉电阻的输入口DDRB=Oxff;设置PB口为推挽1输出PORTB=Oxff;SREG=OX80:开全局中断GICR=OxcO;开外部中断TCCRiA=Oxcl;8位PWM,向上计数置位OCIA向下计数清零OClATCCR1B=OxOl:时钟1分须,PWM信号频率为】M/512=2Kilzk=125;OCRlA=k;设置PwM参数编译生成目标文件djts.hex.电路中所使用的元件见表4表4名称元件种类(Category广种类iSub-category电片机ATmegaSMicroprocessorICsAVRFamily电RlsSRESResistorsGeneric三极管2N3054TransistorsBipolar按箱开关BUTTONSwitches&RelaysSwitches电池BATrERYMiscellaneousBt流电机MOTORElectromechanical绘制好仿真电路图,仿真结果见图13。当按下Sl时,PBI输出PWN信号占空比减小,电机速度减小;当按下S2时,PBl饰出PWM信号占空比增加,电机速度增加。从示波器上可以看到TX信号占空比在调节时的变化.4.智力竞奏抢答器川中.片机AT89C51做一个抢答器,供8组抢答,当主持人按一下开始邈后即UI开始抢答,当某一组按下抢答键后,其它各组的按键被锁定,主机上的数码管显示相应的组':,同时该组桌上的发光二极,i发出1秒钟的报警声.数玛管和发光二极管的显示时间为5秒钟.在Kei1UVision编译器中输入以卜程序:#include<reg51.h>unsignedcharn,i:unsignedlongintm.t;sbitSl=Po"0:sbitS2三P0'l;SbitS3=P0'2;sbitS4=l,0"3;sbitS5三P0'4;sbitSe=PO'5;sbitS7=P06;sbitS8=P07;sbitVDI=P0:sbitVD2P1'I:sbitVD3=P2:sbitVD4=P3;sbitVD5三P4;SbitVD6=P5;sbitVD7=P6:sbitVD8=P7:shi,S0UND=P3'0sbitSTART=P31voiddelay(t)延时子程序voidmainO主程序while(l)无限循环if(START=O)假设开始键按下n=0;WhiIe(n=0)/假设n=0,循环执行if(Sl=WJ)假设Sl按下;VDI-0:P2-0x79;n-I;)发光二极管VDl点亮,数码管显示1elseif(S2=0)假设S2按下VD2=0zP2-0x24jn=l:.'发光二极管VD2点亮,数码管显示2elseif(S30)假设S3按下<VD30;P20x30;n=l:发光二极管VD3点亮.数码管显示3elseif(S4=)锻设S4按下VD4=0;P2=«xl9;n=l:j/发光二极管YD4点亮,数码管显示4elseif(S50)假设S5按下VD5=0jP2=0xl2jn三;)发光二极管VD5点亮.数码管显示5elseif(S6=0)假设S6按下VD6R:P2,Ox02:n=l:)发光二极管V面点亮,敷码管显示6elseif(S7-0)假设S7按下VD7-0jP2-0x78url:.'./发光二极管VD7点亮.数码管显示7elseif(S8=0)级设S8按下30;P2;0x00;n=l;/发光二极管VD8点亮,数马管显示8for(m=0:m<1000;«+)发出1杪报警声SOUND=!SOItND:delay(l);,delay(5000);发光二极管、数码管继续点亮5秒Pl=Oxff:P2=0xff;将上述源程序编译生成目标文件vie_answor.hex.电路中所使用的元件见表5.名称元件种类ICategory了种类(SUb-CategOryJ单片机AT89C51MicroprocessorICs8051Family电阻器RESResistorsGeneric:极管2N2905TransistorsBipolar7SEG-COM-ANODEOptoelectronics7-SegmentDisplays&Sounders绘制好仿克电路图,设置好有关元件的属性,仿真后先按下开始按钮S9.再按下Sl'S8的任个按钮比方S6仿真结果见图11。