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 显示增量时间的测定
类似上述方法,当程序运行到display(x);语句处时,先点击Zero(清time 的0),然后点击MPLAB IDE 模拟调试的快捷命令“Run”(全速运行),使程序从display(x);全速运行到预先设置的断点X++ ;处,此时,图52 中time 的显示值为1.036104S(秒),说明pic07.c 程序中的d=100 值大了一点。
此时,我们可将程序中的d 值改为99(或98、97),然后在用前述增量时间测定方法对其进行运行时间测定,来找到最准确的0 ~ 99 递增为1 秒的d 值。
需要说明的是,每次修改了d 值之后,都要按照《PIC 单片机C 语言程序设计(9)》一文介绍的方法,先在MPLAB IDE7.40 集成开发环境中,对源程序pic07.C 进行编译,并确认编译成功,再按本文所述方法进行增量时间测定。