当前位置:首页 > 单片机 > 单片机
[导读]   我们在编辑PIC单片机的C语言时,常常应用对源程序的模拟仿真技术,因为对程序的模拟仿真可代替部分单片机的硬件制作与调试,即使在深入学习PIC单片机C语言程序时,模拟仿真技术,也是不可缺少的。这

  我们在编辑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:用鼠标点击该按钮,程序运行复位。

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


  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),如下图所示。

  若X++<100,又用鼠标点击按钮Step Into(单步),则程序立刻返回到调用显示函数处display(x);如下图所示。

  此时仍然注意程序运行的黄色箭头指示。

  上述的源程序软件仿真操作,均利用下图的各按钮进行的,实际操作时也可利用MPLAB IDE的Debugger(调试)下拉菜单,同样有下图按钮对应的命令从Run-Reset,只不过使用起来很不方便吧!

  (2)定量观察源程序中变量值的变化:这里的定量观察是指两种定量:1)变量,如PICl.c中的数码管LED的个位,十位的变量显示的增薰值变化;2)程序运行时每条命令代码所清耗的时间或程序段的清耗时间。

  其操作方法如下:在操作右图时,同时用鼠标点击MPLAB IDE中的Debugger,在其下拉菜单中,点击Setting,即可出现——Simulator Setting新界面,该界面用于用户对PIC单片机时钟频率的设置,将界面中的20(MHz)改为实际工作频率(笔者是4MHz),然后用鼠标点击确定,界面消失。再用鼠标点击Debugger,在其下拉菜单中,点击命令Stopwatch,即出现Stopwatch界面,将该界面放在MPLAB IDE的桌面上,又用鼠标点击MPLAB IDE中的View,在其下拉菜单中,点击LOCals命令,则又出现Locals的新界面。这样右图的界面中同时又出现了上面两种界面(包括程序菜单三种界面),如下图所示。

  此时仍按右图的方法进行仿真操作,此时可在Stopwatch界面中观察到程序运行一次的时间值(用鼠标每次点Zero观察)或程序的累计值(不管Zero);同时在Locals界面上观察数码管LED的个位或十位的累计值。

  实际操作时,往往需对程序作技术处理,否则操作耗时太长。如将PICl.c中的d值从97改为3和将if(x==100)改为if(12),然后再进行编译生成目标码.hex后,再进行上述仿真调试,就很理想了。


本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

该系列产品有助于嵌入式设计人员在更广泛的系统中轻松实现USB功能

关键字: 单片机 嵌入式设计 USB

单片机编程语言是程序员与微控制器进行交流的桥梁,它们构成了单片机系统的软件开发基石,决定着如何有效、高效地控制和管理单片机的各项资源。随着微控制器技术的不断发展,针对不同应用场景的需求,形成了丰富多样的编程语言体系。本文...

关键字: 单片机 微控制器

单片机,全称为“单片微型计算机”或“微控制器”(Microcontroller Unit,简称MCU),是一种高度集成化的电子器件,它是现代科技领域的关键组件,尤其在自动化控制、物联网、消费电子、汽车电子、工业控制等领域...

关键字: 单片机 MCU

STM32是由意法半导体公司(STMicroelectronics)推出的基于ARM Cortex-M内核的32位微控制器系列,以其高性能、低功耗、丰富的外设接口和强大的生态系统深受广大嵌入式开发者喜爱。本文将详细介绍S...

关键字: STM32 单片机

在当前的科技浪潮中,单片机作为嵌入式系统的重要组成部分,正以其强大的功能和广泛的应用领域受到越来越多行业的青睐。在众多单片机中,W79E2051以其卓越的性能和稳定的工作特性,成为市场上的明星产品。本文将深入探讨W79E...

关键字: 单片机 w79e2051单片机

单片机,又称为微控制器或微处理器,是现代电子设备中的核心部件之一。它集成了中央处理器、存储器、输入输出接口等电路,通过外部信号引脚与外部设备进行通信,实现对设备的控制和管理。本文将详细介绍单片机的外部信号引脚名称及其功能...

关键字: 单片机 微控制器 中央处理器

随着科技的飞速发展,单片机和嵌入式系统在现代电子设备中的应用越来越广泛。它们不仅提高了设备的智能化水平,还推动了各行各业的创新与发展。在单片机和嵌入式系统的开发中,编程语言的选择至关重要。本文将深入探讨单片机和嵌入式系统...

关键字: 单片机 嵌入式系统 电子设备

PLC(可编程逻辑控制器)和单片机是两种不同的控制设备,它们之间存在明显的区别:

关键字: 单片机 plc 控制器

Holtek隆重推出全新一代32-bit Arm® Cortex®-M0+ 5V CAN MCU - HT32F53231/HT32F53241/HT32F53242/HT32F53252。这一系列单片机带有来自Bosc...

关键字: MCU 工业自动化 单片机

Holtek精益求精,宣布推出全新5V宽电压Arm® Cortex®-M0+ 32-bit MCU系列HT32F50431/HT32F50441/HT32F50442/HT32F50452。此系列MCU经多方位升级能满...

关键字: 单片机 智能家居 工业控制
关闭
关闭