首页 理论教育单片机多语言编程中的for语句应用及延时控制方法

单片机多语言编程中的for语句应用及延时控制方法

【摘要】:for循环语句常用于不要求精确延时的程序。图4-6for语句流程图3.利用for循环进行延时,控制灯闪烁。在本例中,使用了3个for循环进行延时。单击“跟踪”,执行一次空运行。程序点评本例的目的是理解for循环语句,并通过仿真计算每一个空语句执行时间为6μs。如果想实际观察for循环语句的执行,可以进行单步执行,即一步步执行即可了解每一个循环的执行过程。若必须精确延时,要加头文件及_NOP_();语句。

for循环语句常用于不要求精确延时的程序。

1.流程图(见图4-6)

2.格式

978-7-111-47138-7-Chapter04-38.jpg

语句的执行过程是,首先计算表达式1,向下执行语句组,转去执行表达式3,将结果按表达式2进行判断,若成立(不为0),则再执行语句组,再执行表达式3,继续循环执行,直到按表达式2进行判断,若结果不成立(为0),则结束循环,向下执行。

978-7-111-47138-7-Chapter04-39.jpg

图4-6 for语句流程图

3.利用for循环进行延时,控制灯闪烁。

【例4-12】 灯D0闪烁运行,间隔0.5s。

(1)编辑C语言源程序

978-7-111-47138-7-Chapter04-40.jpg

978-7-111-47138-7-Chapter04-41.jpg

(2)编译

(3)执行

1)软仿真。在本例中,使用了3个for循环进行延时。但每一个空语句的执行时间,并不是像汇编语言那样是按晶体振荡器频率计算出的空指令的执行时间,而要决定于C语言编译器的空语句时间,可以通过软仿真计算得到。现在让我们进入调试状态,调出P1窗口。(www.chuimin.cn)

主要是计算延时时间。单击“跟踪”,P1.0=0,表示灯D0亮。进入{;}空语句。在目标管理器窗口下方显示执行一次空运行的时间。

①显示时间:0.00080400sec。单击“跟踪”,执行一次空运行。

②显示时间:0.00081000sec,如图4-7所示。

由此可计算出执行一个空语句运行的时间为0.00080400-0.00081000s=0.000006s=6×10-6s=6μs。

③单击“RST”,返回开始状态。单击“跟踪”,执行到delay()。单击“单步”,可以得到整个延时子函数的时间6×167×100×5μs=501000μs=0.5s。实际显示:0.50685s。

978-7-111-47138-7-Chapter04-42.jpg

图4-7 执行时间

2)下载到实验机。可观察到灯D0的闪烁,间隔时间约为0.5s。

(4)程序点评

本例的目的是理解for循环语句,并通过仿真计算每一个空语句执行时间为6μs。这为以后计算延时时间提供了条件。如果想实际观察for循环语句的执行,可以进行单步执行,即一步步执行即可了解每一个循环的执行过程。为了简化,延时子函数也可以写为如下形式:

978-7-111-47138-7-Chapter04-43.jpg

978-7-111-47138-7-Chapter04-44.jpg

这个效果与原来相同。用C语言软件进行的延时与直接用纯硬件NOP空指令的延时时间是不同的。C语言的软件延时除受设置的晶振频率的影响,还受编译器的影响,准确度不是很高。若必须精确延时,要加头文件<intrins.h>及_NOP_();语句。