DIY编程器网

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 231|回复: 0
打印 上一主题 下一主题

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

[复制链接]
跳转到指定楼层
楼主
发表于 2012-1-27 14:12:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

                      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 进行编译,并确认编译成功,再按本文所述方法进行增量时间测定。
            
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|文字版|手机版|DIY编程器网 ( 桂ICP备14005565号-1 )

GMT+8, 2025-11-12 18:19 , 耗时 0.084319 秒, 18 个查询请求 , Gzip 开启.

各位嘉宾言论仅代表个人观点,非属DIY编程器网立场。

桂公网安备 45031202000115号

DIY编程器群(超员):41210778 DIY编程器

DIY编程器群1(满员):3044634 DIY编程器1

diy编程器群2:551025008 diy编程器群2

QQ:28000622;Email:libyoufer@sina.com

本站由桂林市临桂区技兴电子商务经营部独家赞助。旨在技术交流,请自觉遵守国家法律法规,一旦发现将做封号删号处理。

快速回复 返回顶部 返回列表