水电电工知识
电工文库|Keil软件延时
2016-01-13  浏览:47
水电之家讯:C语言常用的延时办法,有以下4种

图1C语言延时

图1是我们编程语言常用的4种延时方法,其中两种非精确延时,两种精确一些的延时。for语句和while语句都可以通过改变i的范围值来改变延时时间,但是C语言的时间都是不能通过程序看出来的。

精确延时有两个方法,一个方法是用定时器来延时,这个方法我们后边课程要详细介绍,定时器是单片机的一个重点。另外一个就是用库函数_nop_();,一个NOP的时间是一个机器周期的时间,这个后边也要介绍。

非精确延时,只是在我们做一些简单的比如小灯闪烁,流水灯等简单实验中使用,而实际做实际开发程序中其实这种非精确延时用的极少,这里我们只是做演示功能使用。

好了,介绍完了,我们就要实战了。上节课的LED小灯闪烁的程序,我们用的延时方式是for(i=0;i<30000;i++);大家如果把这里的i改成100,下载进入单片机,会发现小灯一直亮,而不是闪烁状态,现在大家都把这个程序改一下,都改成100,然后下载观察一下现象再继续。

观察完了,毫无疑问,实际现象和我提到的理论是相符合的,这是为什么呢?这里介绍一个常识。我们人的肉眼对闪烁的光线有一个最低分辨能力,通常情况下当闪烁的频率高于50Hz时,我们看到的信号就是常亮的。即,延时的时间低于20ms的时候,我们的肉眼是分辨不出来小灯是在闪烁的,可能最多看到的是小灯亮暗稍微变化了一下。要想清楚的看到小灯闪烁,延时的值必须大一点,大到什么程度呢,不同的亮度的灯不完全一样,大家可以自己做实验。

那么如何观察延时有多长时间呢?大家鼠标点Keil的Project-->OptionsforTarget‘Target1’,或点Target1右侧图标,进入设置选项,如图2所示

图2OptionsforTarget

首先我们打开Target这个选项卡,找到里边的Xtal(MHz)这个位置,这是填写我们进行模拟时间的晶振选项,从我们原理图以及板子上都可以看到,我们单片机所配的晶振是11.0592MHz,所以这个地方我们要填上11.0592。然后找到Debug这个选项,选择左侧的UseSimulator,然后点击最下边的OK就可以了,如图3所示。

图3Debug配置信息

点击Debug菜单里的Start/StopDebugSession,或者鼠标点做左侧的这个Debug图标,会进入一个新的页面,如图4所示。



图4Debug窗口显示

最左侧那一栏是单片机的一些寄存器和系统信息,最上边那一栏是Keil将C语言转换成汇编的代码,下边就是我们C语言的程序,还有各种窗口都可以打开,在view菜单可以打开或者关闭我们的各种窗口。这节课我们只关心我们需要的窗口,其他窗口用到再说。那么有时候我们觉得这种分布不是特别的好,所以我们想改变一下窗口分布怎么办呢?比如Disassembly(汇编)窗口,我们先用鼠标拖动它,然后中间会出现一个方向符号,再用鼠标点那个方向符号,他就给我们分布了,如图5所示。

图5Keil窗口移动(一)

我们点击最右边的那个箭头,然后窗口变化成如6图所示。或者我们如果用不到汇编的程序,也可以直接关掉。

图6 所示Keil窗口移动(二)

细心的同学会看到在C语言的程序里有个黄色的箭头,这个箭头代表的就是这个程序当前运行的位置,在这个Debug里边,我们可以看到我们的程序运行的过程。在左上角有这三个图标,第一个是复位,点击一下之后,程序就会跑到最开始的位置运行,第二个图标是全速运行图标,点击一下程序就会全速运行跑起来,第三个图标是停止图标,当程序全速运行跑起来后,我们可以通过点击第三个图标来让程序停止,观察程序运行到哪里了。点击一下复位后,我们会发现C语言程序左侧有的灰色或者绿色,有的地方还是保持原来的白色,我们可以在我们灰色的位置双击鼠标设置断点,就是比如程序一共20行,在第十行设置断点后,点全速运行,程序就会运行到第十行停止,方便我们观察运行到这个地方的情况。

同学们会发现,有的位置可以设置断点,有的地方不可以设置断点,这是为什么呢?Keil软件本身具备优化我们程序的功能,如果大家想在所有的位置设置断点,可以把优化选项设置到0位置,就是程序不进行优化。如图7所示。



图7优化选项设置

这节课我们重点是看看C语言代码的运行时间,在最左侧的register那个框内,有一个sec选项,这个选项就是单片机运行时间的统计选项,大家点一下复位按钮,会发现这个sec变成了0,然后我们在LED=0;这一句加一个断点,在LED=1;这个位置加一个断点,我们点击全速运行按钮,会直接停留在LED=0;我们会看到我们的时间变化成0.000197秒,如图8所示。

图8断点设置

我们再点一下全速运行,会发现sec变成了0.07530650秒,那么这样一个for循环的时间大概有75ms左右,我们也可以通过改变30000这个数字来改变这个间隔时间。当然了,大家要注意i的变量范围,你如果写成了大于65535的值以后,程序就会一直运行不下去了,因为i无论如何变化,都不会大于这个值,如果要大于这个值正常运行,必须改变i定义的类型了。后边如果我们要求看一段程序运行多长时间,都可以通过这种方式来看。

水电之家为您提供最全面的管材,管件,水电,电线,电工,管材水电品牌的装修知识点和各种管材水电的导购与在线购买服务,拥有最便宜的管材水电价格和最优质的售后服务,每天都有秒杀的抢购活动哦!敬请登陆水电之家:http://shuidian.jc68.com/
更多»您可能感兴趣的文章:
更多»有关 水电 的产品:
  • 水电电工资讯
  • 发表评论 | 0评
  • 评论登陆
  • 移动社区 天花之家 木门之家 灯具之家 铁艺之家 幕墙之家 五金头条 楼梯头条 墙纸头条 壁纸头条 玻璃头条 老姚之家 灯饰之家 电气之家 全景头条 照明之家 防水之家 防盗之家 区快洞察 建材 枣庄建材 临沂建材 南昌建材 上饶建材 抚州建材 宜春建材 吉安建材 赣州建材 鹰潭建材 新余建材 九江建材 萍乡建材 景德镇陶瓷 石家庄建材 衡水建材 廊坊建材 沧州建材 承德建材 建材之家 企业之家 720全景
    (c)2015-2017 BYBC.CN SYSTEM All Rights Reserved