下载
加入VIP
  • 专属下载特权
  • 现金文档折扣购买
  • VIP免费专区
  • 千万文档免费下载

上传资料

关闭

关闭

关闭

封号提示

内容

首页 用Proteus仿真单片机的方法

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

用Proteus仿真单片机的方法

撩人你的笑容温暖着俄的心房
2017-09-23 0人阅读 举报 0 0 暂无简介

简介:本文档为《用Proteus仿真单片机的方法doc》,可适用于综合领域

 用PROTEUS对单片机进行仿真的方法与实例                      吴汉清  Proteus软件是英国LabcenterElectronics公司的一款电路设计与仿真软件它包括ISIS、ARES等软件模块ARES模块主要用来完成PCB的设计ISIS模块用来完成电路原理图的布图和仿真。它可以进行模拟电路仿真、数字电路仿真也可以进行单片机及其外围电路组成的系统的仿真软件提供了各种虚拟仪器如示波器、逻辑分析仪、信号发生器、电压表、电流表等。和其它仿真软件相比ProteusISIS最大特色是对单片机系统的仿真目前支持的单片机类型有:系列、系列、ARM系列、AVR系列、PIC系列、Z系列、HC系列等。本文主要介绍Proteus软件在单片机方面的仿真功能即ISIS模块的用法。  在单片机学习开发的过程中程序的调试是一个很重要的环节要安装电路进行实验而且电路在调试过程中往往要进行调整和改变这不紧增加了费用和难度而且也影响了学习和开发的进度,这也成了一些初学者学习的障碍。如果使用Proteus软件就可以大大节省时间和开发费用可以在软件仿真通过后再制作印刷电路板进行电路实验。一、ProteusISIS软件的工作环境和一些基本使用方法 下面通过一个流水灯的实例来说明Proteus的基本使用方法使用的软件版本是ProteusProfessionalSP。  流水灯使用ATC单片机用P口作输出口。先在KeiluVision编译器中输入下列程序:#include<regh>voidDelayms(unsignedintcount)延时子程序{ unsignedinti,j for(i=i<counti) for(j=j<j)}main()主程序{ unsignedcharLEDIndex= bitLEDDirection= while() {   if(LEDDirection)     P=~(x<<LEDIndex)   else     P=~(x>>LEDIndex)   if(LEDIndex==)     LEDDirection=!LEDDirection   LEDIndex=(LEDIndex)   Delayms() }}将上述程序编译生成目标文件LEDhex。然后按下列步骤进行:  运行ProteusProfessional(ISISProfessional)出现如图所示的界面:  这是一种标准的Windows界面包括标题栏、主菜单、标准工具栏、绘图工具栏、状态栏、对象选择按钮、预览对象方位控制按钮、仿真进程控制按钮、预览窗口、对象选择器窗口、图形编辑窗口。添加元件到对象选择器元件列表中  单击绘图工具栏中的按钮再单击对象选择按钮P出现挑选元件对话框见图。按表添加本例所用的元件。表名称元件种类(Category)子种类(Subcategory)单片机ATCMicroprocessorICsFamily按钮开关BUTTONSwitchesRelaysSwitches电容器CAPCapacitorsGeneric电解电容器CAPELECCapacitorsGeneric电阻器RESResistorsGeneric发光二极管LEDREDOptoelectronicsLEDs晶振CRYSTALMiscellaneous  如果一开始对种类不熟悉可直接在对话框的KEYWORDS中输入元件的名称如ATC、CAP等就可以直接找到所需的元件如图。  添加好元件的对象选择器元件列表见图。  放置元件  在元件列表中左键选取ATC在原理图编辑窗口中适当的位置单击左键这样ATC就被放到原理图编辑窗口中了同样放置其它元件。两次右击可以删除放置的元件右击选中元件后按方向控制按钮可改变元件的方向。右击选中元件后再按住左键可移动元件位置。  放置“地”、“电源”  添加“地”:左键选择模型选择工具栏中的图标在图中左键选择GROUND并在原理图编辑窗口中左击这样“地”就被放置到原理图编辑窗口中了。同样地选择POWER可放置“电源”。  编辑元件的属性  右击选元件后再左击即可编辑元件的属性也可以右击后在快捷菜单中选择命令EditProrerties。如R的属性窗口如图。  在对ATC的属性进行编辑时要加入仿真文件在ProgramFile中单击出现文件浏览对话框找出LEDhex文件单击确定完成添加文件单击OK退出。连线  在要连线的一个点左击移动鼠标到到另一个点再左击即可画好一条连线按放置导线连接结点画好连线的仿真电路图见图。  ATC的VSS、VDD不需要连线默认VSS=V、VDD=V、GND=V。  仿真  单击仿真进程控制按钮中的开始仿真我们可看到发光二极管分别按两个方向依次点亮。输出端的小方点红色代表高点平蓝色代表低电平灰色代表不确定电平。在仿真时单片机的晶振电路和复位电路可以省略不画时钟频率可以在ATC的属性中设置默认值为MHz。对于设计好的文件可以保存以便下次调用。  二、单片机仿真实例  上面通过一个简单的例子介绍了ProteusISIS的基本使用方法下面再通过笔者设计的几个实例进一步介绍ProteusISIS的使用方法和技巧同时也能够使大家看到几个单片机应用的实例。  电感测试仪电感测试仪以电感加上电压后电流增加的规律作为测量依据因为电感加上电压后电流增加的速度与电感量相关通过测量电流达到某一预定值所花的时间就能测量出电感的电感量。单片机使用ATC测量电路如图所示,A为ATC内部构造的电压比较器利用电压比较器测量电感中电流的变化合上开关后电源电压E加在电感LX和电阻R的串联回路上这时回路中电流IL由零开始逐渐增加在电阻R两端电压从升到E的过程中P口输出为当电阻R两端电压一旦超过E后P口输出电平即变为。以P口的输出状态为依据用ATC内部的定时器T对时间进行计数再将计数结果显示出来即得出测量结果。量程可分为多档采用两位半数码管显示单位为mH。我们只要仿真其中的一档即可这里取×档进行仿真即读数乘以为实际电感量。电感测试仪的源程序如下:#include<regh>unsignedcharj,m,n,t,DispBufunsignedintLunsignedcharcodeBitTab={xdf,xef,xf}位驱动码unsignedcharcodeDispTab={x,xcf,x,x,xcc,x,x,xf,x,x,xff}字形码sbitP=P^sbitP=P^voidDelayms(unsignedintcount)延时程序{   for(n=n<countn)   for(m=m<m)}voidmain() 主程序{  TMOD=x定时器T方式   while() 无限循环 {      t=BitTabj取位值   P=P|xPP送   P=Pt PP输出取出的位值   t=DispBufj取出待显示的数   t=DispTabt取字形码   P=t字型码由P输出显示   Delayms()   j j作为数码管的计数器,取值,显示程序通过它确认显示哪个数码管   if(j==)   j=   TH=   TL=   P=测试开始   TR=开定时器T   for(P==)判断电阻上的电压上升到参考电压否      TR=电压达到参考电压,关定时器T   P= L=TL|(TH<<)取定时器T中的数值   L=L   if(L>=)      {          DispBuf=          DispBuf=          DispBuf= 超量程,百位数显示,个位、十位不显示(灭)      }   else 不超量程,取各位数值      {          DispBuf=L取个位数          L=L          DispBuf=L取十位数          DispBuf=L取百位数     }  }}用KeiluVision将上述程序编译生成目标文件DGZShex。电路中所使用的元件见表。表名称元件种类(Category)子种类(Subcategory)单片机ATCMicroprocessorICsFamily电阻器RESResistorsGeneric可变电阻器POTLINResistorsVariable三极管NTransistorsBipolar电感器INDAIRInductorsGeneric位共阴数码管SEGMPXCAOptoelectronicsSegmentDisplays绘制好的仿真电路图如图。图中添加示波器时先左键选择模型选择工具栏中的图标再选择OSCILLOSCOPE并在原理图编辑窗口中左击这样示波器就被放置到原理图中了。由于ATC的P和P是复用端口除了作IO口外还有一个功能是作为电压比较器的输入端P为同相输入端P为反相输入端这里作电压比较器的输入端使用因此在设置ATC的属性时要将其设置电压比较器的输入端即EhableComparator选择Yes如图。被测电感器的电感量定为H。单击开始仿真可变电阻RP是用来校准测量值的按动RP的或按钮调节RP使数码管显示。仿真结果见图。电阻R为换挡电阻改变它的值即可改变挡位。充电器  这是用PICF单片机做的充电器能对两节镍镉或镍氢电池充电充电器采用电压监测的方法判断充电是否结束充电结束后能自动停止充电。图是电路图图中PICF的脚作模拟信号输入端AN使用。单片机使用内部时钟振荡器引脚作充电控制电压输出端GP使用。S为复位开关复位开关主要在重新放上电池后使用。   接上电源后PICF的GP输出低电平三极管VT饱和导通两节电池开始充电。随着电池电压的上升输入到单片机的模拟电压也不断升高当电压大于预定的设定值V时GP输出高电平使VT截止电池停止充电并自锁在这一工作状态即使电池在停止充电后电压略有下降也不会重新进行充电。   在PIC单片机的MPLABIDE编译器中输入下列程序:#INCLUDE"PFINC"WTEMP  EQU   HSW    EQU   HTEMP  EQU   H       ORG   HMAIN  NOP       MOVLW   H       MOVWF   SW       MOVLW   H       MOVWF   TEMP       BSF       STATUS,RP       MOVLW   B''       MOVWF   TRISIO       MOVLW   B''          MOVWF  ANSEL       MOVLW   B''           MOVWF   OPTIONREG       BCF       STATUS,RP       MOVLW  B''       MOVWF   CMCON       BCF  GPIO,GP       BSF  GPIO,GPLOOP  BTFSC SW,       GOTO  LOOP       MOVLW   B''       MOVWF   ADCON       BSF       ADCON,GOADC      BTFSS PIR,ADIF       GOTO ADC       MOVF ADRESH,       SUBWFTEMP,       BTFSC STATUS,C       GOTO LOOP       BSF   GPIO,GP       BCF  GPIO,GP       BSF   SW,         GOTO LOOP    END  然后编译生成目标文件chargerhex。  对充电器仿真时有一个难点就是Proteus元件库中没有可仿真的充电电池它的电池元件加上充电电流后电压不会上升为此可在电池上串一只可变电阻这样改变可变电阻的大小就可以就可以改变充电回路两端的电压用来模拟电池电压的变化。电路中所使用的元件见表。  表名称元件种类(Category)子种类(Subcategory)单片机PICFMicroprocessorICsPICFamily电阻器RESResistorsGeneric可变电阻器POTLINResistorsVariable三极管NTransistorsBipolar按钮开关BUTTONSwitchesRelaysSwitches发光二极管LEDREDOptoelectronicsLEDs单节电池CELLMiscellaneous绘制仿真电路图时添加直流电压表和上例中选择示波器类似先左键选择模型选择工具栏中的图标再选择DCVOLTMETER即可。  将可变电阻器RP滑动触点调到中点以下的位置单击开始仿真仿真结果见图。RP的滑动触点向上调节电压表的读数会逐渐上上升当读数大于V时会停止充电发光二极管VD熄灭电压表的读数恢复为V这时即使我们把RP滑动触点调到中点以下也不会重新充电只有按一下复位键S才会重新充电。  电机调速控制器  直流电机的调速主要调整其工作电流通常有两种方式:一种是在电机供电电路中串接一个可变电阻通过改变可变电阻的阻值调节工作电流从而调节转速另一种方法是在直流电机上加直流脉冲电压通过改变脉冲直流电的占空比来调节转速。前一种方法因为可变电阻上有压降要损耗功率所以效率不高只有用小功率直流电机时使用后一种工作效率高如目前的电动自行车都采用这种调速方式。下面用AVR单片机ATmega设计一个电机调速控制器使其定时计数器TC工作在PWM模式作为PWM脉宽调制器。在ICCAVR编译器中输入下列程序:#include<iomvh>#defineucharunsignedchar       chark     voidDelayMs(chari)     {charjfor(i!=i) {for(j=j!=j)}}#pragmainterrupthandlerINT:voidINT(void){if(k!=)k=kOCRA=k设置PWM参数DelayMs()}#pragmainterrupthandlerINT:voidINT(void){if(k!=)k=kOCRA=k设置PWM参数DelayMs()}voidmain(void){DDRD=X        PORTD=xff设置PD口为带上拉电阻的输入口DDRB=xff 设置PB口为推挽输出PORTB=xffSREG=x 开全局中断GICR=xc 开外部中断TCCRA=xc位PWM,向上计数置位OCA向下计数清零OCATCCRB=x时钟分频,PWM信号频率为M=KHzk=OCRA=k设置PWM参数while()}  编译生成目标文件djtshex。电路中所使用的元件见表。表名称元件种类(Category)子种类(Subcategory)单片机ATmegaMicroprocessorICsAVRFamily电阻器RESResistorsGeneric三极管NTransistorsBipolar按钮开关BUTTONSwitchesRelaysSwitches电池BATTERYMiscellaneous直流电机MOTORElectromechanical  绘制好仿真电路图仿真结果见图。当按下S时PB输出PWM信号占空比减小电机速度减小当按下S时PB输出PWM信号占空比增加电机速度增加。从示波器上可以看到PWM信号占空比在调节时的变化。  智力竞赛抢答器  用单片机ATC做一个抢答器供组抢答当主持人按一下开始键后即可开始抢答当某一组按下抢答键后其它各组的按键被锁定主机上的数码管显示相应的组号同时该组桌上的发光二极管也点亮并发出秒钟的报警声数码管和发光二极管的显示时间为秒钟。  在KeiluVision编译器中输入下列程序:#include<regh>unsignedcharn,iunsignedlongintm,tsbitS=P^sbitS=P^sbitS=P^sbitS=P^sbitS=P^sbitS=P^sbitS=P^sbitS=P^sbitVD=P^sbitVD=P^sbitVD=P^sbitVD=P^sbitVD=P^sbitVD=P^sbitVD=P^sbitVD=P^sbitSOUND=P^sbitSTART=P^voiddelay(t)延时子程序{ for(t>t) {  for(i=i<i) }}voidmain()主程序{   while()无限循环 {  if(START==)若开始键按下 {  n=  while(n==)若n=,循环执行  {   if(S==)若S按下    {VD=P=xn=}发光二极管VD点亮,数码管显示   elseif(S==)    若S按下    {VD=P=xn=} 发光二极管VD点亮,数码管显示   elseif(S==)    若S按下    {VD=P=xn=} 发光二极管VD点亮,数码管显示   elseif(S==)    若S按下    {VD=P=xn=} 发光二极管VD点亮,数码管显示   elseif(S==)    若S按下    {VD=P=xn=} 发光二极管VD点亮,数码管显示   elseif(S==)    若S按下    {VD=P=xn=} 发光二极管VD点亮,数码管显示   elseif(S==)    若S按下    {VD=P=xn=} 发光二极管VD点亮,数码管显示   elseif(S==)    若S按下    {VD=P=xn=} 发光二极管VD点亮,数码管显示  }   for(m=m<m)  发出秒报警声   {       SOUND=!SOUND    delay()   }    delay()发光二极管、数码管继续点亮秒    P=xff    P=xff  } }}  将上述源程序编译生成目标文件vieanswerhex。  电路中所使用的元件见表。表名称元件种类(Category)子种类(Subcategory)单片机ATCMicroprocessorICsFamily电阻器RESResistorsGeneric三极管NTransistorsBipolar共阳数码管SEGCOMANODEOptoelectronicsSegmentDisplays扬声器SPEAKERSpeakersSounders  绘制好仿真电路图设置好有关元件的属性仿真后先按一下开始按钮S再按一下S~S中的任一个按钮比如S仿真结果见图。

用户评价(0)

关闭

新课改视野下建构高中语文教学实验成果报告(32KB)

抱歉,积分不足下载失败,请稍后再试!

提示

试读已结束,如需要继续阅读或者下载,敬请购买!

文档小程序码

使用微信“扫一扫”扫码寻找文档

1

打开微信

2

扫描小程序码

3

发布寻找信息

4

等待寻找结果

我知道了
评分:

/17

用Proteus仿真单片机的方法

VIP

在线
客服

免费
邮箱

爱问共享资料服务号

扫描关注领取更多福利