您当前的位置:五五电子网电子知识单片机-工控设备PIC单片机PIC单片机源程序的模拟仿真与调试 正文
PIC单片机源程序的模拟仿真与调试

PIC单片机源程序的模拟仿真与调试

点击数:7695 次   录入时间:03-04 11:44:18   整理:http://www.55dianzi.com   PIC单片机

  我们在编辑PIC单片机的C语言时,常常应用对源程序的模拟仿真技术,因为对程序的模拟仿真可代替部分单片机的硬件制作与调试,即使在深入学习PIC单片机C语言程序时,模拟仿真技术,也是不可缺少的。这里以程序实例演示其操作方法。

  对源程序的模拟仿真可以完成下列功能:直接观察C程序从主程序main()开始运行的全过程;为了清楚观察程序中各变量和寄存器的变化情况,可采用单步运行(stePINto)命令和单步越过(stepover)命令进行模拟运行调试,使观察变量更方便;设置断点再选择Run(快速)命令,程序运行到断点处会停下来,以便观察变量功能;此外,还能定量观察程序中的变化值,如直接观察程序的延时量等多种功能。当然在进行程序模拟仿真时,对源程序还有些技巧性的处理,以下将分别叙述。

  1.PICC与PICC18的C编译简介
  
  要用C语言开发PIC单片机和模拟仿真调试程序,必须有相应的编译器,PICC与PICC18的C编译器是优化的PIC单片机C编译器,它由澳大利亚HI-TECH公司研制的,该编译器是目前性能优异的PIC系列单片机C编译器软件,也完全符合美国ANSIC标准。PICC是用于PIC16系列产品:PICC18可用于PIC18系列产品;这两个编译器均可运行在微芯公司MPLABIDE集成开发的环境下工作。

  由于该C编译器是运行在MP/ABIDE集成开发环境下的,所以要求用户熟悉MPLABIDE集成开发环境下的使用方法。

  (1)PICC与PICC18编译器的主要特性。该编译器是在MPLAIDE集成开发环境下,对源代码程序的调试,可在源程序上设置断点,而当源程序运行到断点处会自动停止下来,、以便操作者观察变量值和修改变量值;在集成开发环境下进行程序的单步,连续运行操作,也便于操作者观察程序中的各个变量值;支持硬件仿真,即MPLABICE(ln-CircuitEmulator)、支持软件仿真,即MPLABSIM(Simulator)和一些在线调试器,如MPLABICD(ln-CircuitDebugger)ICD2调试器。此外,在单个项目中允许汇编语言和C语言的混含编程。

  (2)PICC与PICC18编译器支持的变量类型。在编辑PIC单片机C程序时,定要按照PICC与PICC18的编译器所支持的变量类型书写程序的格式进行,这些格式如图附表所示。

  以上所述的内容,均可在以下的程序实例中得到说明。有关MPLABIDE和PICC与PICC18的软件,均可在网站上下载获取,再安装在自己的电脑中,注意:电脑桌面应是XP系统的。

  2.源程序的软件仿真调试前的准备
  
  对PIC单片机的软件仿真调试时,应首先在MPLABIDE集成开发环境下(笔者用的是MPLABIDEv7.40版)编辑其源程序,并命名XX.C。

  然后通过创建项目(project)再经PICC编译器(在MPLABIDE环境下)对程序编译,最后生成了目标码.hex后,才可对源程序进行仿真调试。

  将上述在C编译成功的C程序PIC1.c直接调到MPLABIDE的桌面上(若笔者要引用PICl.e作模拟仿真调试,仍应在MPLABIDE环境下,经pice编译器对PICl.e编译生成.hex,才能进行仿真调试),如下图所示(部分界面),在图4的界面上标记有MPLABIDEV7.40和PICl.c的部分程序。

  用鼠标点击界面上的Debugger(调试),在其下拉菜单SelectTool引导下的命令MPLABSIM(软件模拟调试),用鼠标点击之,生成上图的界面(部分),在其界面顶端有7个按钮(调试快捷图标),为了说明问题,单独取下,如下图所示。

  按钮各命令的特性:

  (1)Run:用鼠标点击Run按钮,可直接运行程序,直到遇到断点(以下将介绍)或单击Halt(停机)按钮为止。多数情况下不使用Run方式进行程序调试,因为这种运行方式很难观察到程序运行中的状态。只是在程序中设置有断点时,方可派上用场。

  (2)Halt:用鼠标点击该Halt按钮,可使单片机处于停机状态。如其他各按钮一旦工作,程序运行,只需点击Halt按钮,程序即刻停止运行。

  (3)Animate:用鼠标点击该按钮,可使仿真程序慢步运行,在运行时不停地刷新寄存器的值,利用watch窗口即可观察到寄存器的改变值(定量察看)。

  (4)Step Into:用鼠标点击该按钮,仅执行一条代码指令,然后停机,再点击该按钮,又执行一条代码指令。

  (5)Step over:用鼠标点击该按钮,可把调用的子程序全部执行完成,然后在下一条指令操作码处暂停。当被调用的程序是一个延时程序时,特别有用,这与单步执行完全等效。

  (6)Step out:用鼠标点击该按钮时,就直接跳出程序。

  (7)Reset:用鼠标点击该按钮,程序运行复位。

  上述各个仿真按钮功能,在实际对程序仿真调试时,往往是配合使用而不是单一的使用.这将在以下仿真调试时清楚地看到。



www.55dianzi.com

  3.源程序的软件仿真操作
  
  (1)定性观察源程序PICl.e的运行过程:将已编译成功的PICl.e源程序图5放在电脑桌面上放大获得完整界面之后,用鼠标点击按钮Animate(慢速),然后快速又用鼠标点击图6的按钮Halt(停止),即可使程序快速运行到主函数处,停止运行,如下图所示。

 

  从界面上可看到主程序main()的下方左边,有一程序运行的黄色箭头并指向程序体中的赋值语句TRISB=0x00;代表C程序的运行总是从主程序开始的。接着用鼠标点击图6的按钮Step Into(单步),每点击_次程序运行的黄色箭头就顺序向下运行一次,直到首次运行到主调显示函数display(x);你可不再点击而停下来,如下图所示。

  程序首次运行到主调显示函数display(x);的原因是在main()函数体内的赋值语句x=0;此时若用鼠标再点击按钮Step Into(单步),则程序就转到被调函数处,将主调函数的实参0,经值传递到被调函数Voiddisplay(unsigned int x)的形参,然后由被调函数执行其显示的功能,此时数码管LED显示为00。其显示界面如下图所示。

  若要使程序再运行,就要将鼠标不断点击按钮Step Into、直到运行到赋值语句urut_bit=X%l0;处,就不再点击为止,如下图所示。

  要使程序再运行,换用按钮Step over(单步越过),此时程序即可顺序运行下去,如下图所示。

  由于程序运行到while(d>0)中,而D=97,若再用鼠标点击按钮Stepover,也很难跳出循环,为此要让程序跳出while(d>0)循环,可用鼠标点击按钮Stepout(单步跳出),此时程序跳出循环到while(l)循环语句中的x++;处即黄色箭头所指位置(不是第一次的display(x)处,如下图所示。

  此时程序执行X++的0+1=1,若再用鼠标点击按钮Step Into(单步),程序运行到下一步的if语句,即判断X达到100否(数码管LED显示最大为99),如下图所示。

[1] [2]  下一页


本文关键字:单片机  源程序  PIC单片机单片机-工控设备 - PIC单片机