微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > PIC单片机C语言程序设计(11)

PIC单片机C语言程序设计(11)

时间:02-05 来源:互联网 点击:
  5.PIC单片机C语言程序SIM软件仿真技巧

  在《PIC 单片机C 语言程序设计(10)》中,我们以C 语言程序pic07.C 为例,介绍了SIM 软件仿真调试的基本手段和方法,下面介绍SIM 软件仿真的技巧,包括用跑表直接测试C 程序运行的耗时(包括秒值)、快速观察C 程序的运行路径、显示C程序中的变量值和修改程序中的错误等等。

  ⑴ 用跑表测试程序的延时量和秒计时值这里, 我们仍以pic07.C 为例, 介绍利用MPLAB IDE 提供的跑表(又称停表—stop watch 命令),测试C 程序中所要求的各种计时值的操作步骤。

  该操作十分简单,同时也是实际程序调试中经常要用到的。

  pic07.C 是一个0~99 秒的脉冲发生器程序。

  其秒个位在LED 显示(电路见《PIC 单片机C 语言程序设计(4)》中的图3)时,从0 到1、从1到2、??,每隔1 秒显示数字加1,而秒值是由pic07.C 程序显示函数中的d 值(d=100)决定的。

  如果用MPLAB IDE 提供的跑表测试该时间若未达到1 秒的要求,可直接改变d 值(增加或减少),来达到所规定的递增1 秒的要求。

  用跑表测试pic07.C 程序中各代码功能的时间,其操作方法如下:

  1) 例行操作

  按照《PIC 单片机C 语言程序设计(9)》一文介绍的方法,在MPLAB IDE7.40 集成开发环境中,对源程序pic07.C 进行编译,只要编译成功(此为进行软件仿真的必要和充分条件),便可进行下面的SIM 软件仿真操作了。

  点击图37( 见《PIC 单片机C 语言程序设计(9)》) 中的pic07.C, 把该程序调到MPLABIDE7.40 的桌面上。再按照《PIC 单片机C 语言程序设计(10)》中介绍的方法,在MPLAB IDE7.40的窗口上设置软件仿真调试状态窗口,如图49 所示。

图49

  注意:接下来将使用图49 中的7 个模拟调试快捷图标(Debug)。   2) 调用stop Watch(跑表)

  点击图49 中的Debugger 命令, 并在弹出的下拉菜单中点击setting,即可生成图50 所示的Simulator Settings 界面。在该界面中,频率为20MHz,我们将其改成实际电路(即《PIC 单片机C 语言程序设计(4)》中的图3))所用的晶振频率4MHz,然后点击图50 中的“确定”,回到图49 所示界面。在该界面中点击“Debugger”命令,并在弹出的下拉菜单中点击“Stop watch,即可生成图51 所示的对话框。

图50

图51

  3) 定量测试

  下面我们来验证程序运行时,各代码运行的具体时间是否如《PIC 单片机C 语言程序设计(10)》中的表6 所示。具体操作如下:

  a. 点击图49 快捷图标中的命令Animate,之后立即点击快捷图标中的Halt(停止),便会出现图52 所示界面。其中,主程序TRISA=0X10 赋值语句左边有一个绿色箭头,指向的是模拟调试时程序运行的起始语句;而语句X++ ;(自增量)左边有一个断点标志,即红色的“B”(若语句X++ ;左边无断点标志“B”,可通过双击X++ 旁的位置,来进行断点“B”的设置)。接下来,便可验证《PIC 单片机C 语言程序设计(10)》中表6 列出的程序各语句的耗时量了,其操作方法如下:

  b. 图52“Stop watch”界面右下角的程序频率为4(MHz),说明设置频率是正确的。点击图52 中的命令“Zero”清0,使Zero 右边的time 为0(说明:该行最右侧显示的是执行多条语句的累积时间,此处可不管),随后点击MPLAB IDE 菜单行中的模拟调试快捷图标Step Into(单步),使程序按照《PIC 单片机C 语言程序设计(10)》表6 所列,从绿色起始箭头所指语句TRIA=0X10 ;开始,只运行一步就停下来,此时,图52 中Zero 右侧time旁显示该语句运行耗时数是2μs,与表6 所列数值完全相符,而绿色起始箭头则指向了下一条语句“PORTB=0X40”;处。

图52

  接着运行语句“PORTB=0X40”;, 方法同语句“TRIA=0X10”;。即先点击Zero,清0,使Zero 右边的time 为0,再点击Step Into( 单步),执行语句“PORTB=0X40”;,可以看到绿色起始箭头又指向了其下一条语句INTCON=0X00;,此时,图52 中Zero 右侧time 旁边给出的该语句运行耗时数是3μs,与表6 所列数值完全相符。

  用同样的方法,依次执行表6 所列的语句,从而确认各语句运行的时间是否与表6 所列数值相同。

  需要注意的是,在点击Step Into( 单步) 命令运行一条语句前,必须先点击Zero,对time 清0 一次(即不观察累计时间)。

  此外,运行位赋值定义语句unit_bit=X%10 ;ten_bit= X10%10 ;时,应将点击Step into 命令换成点击“Step over”命令,其余操作不变,程序又可快速单步运行。遇到delay(200);延时语句时,也用“Step over”命令,才能顺利验证表6 中的耗时量。

  4) LED 显示增量时间的测定

类似上述方法,当

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top