回答了一个关于C语言延时时间的问题,题目给出延时函数如下:
delay(unsigned int x) {while(x--);}
delay(unsigned int x) {for (i =0, i < x; i++);}
单片机的晶振为12M。
要求说出他们所延迟的时间分别是X的多少倍?怎么计算的。
====================================
最佳答案:
C语言的执行时间,从来就没有计算公式。
C程序的执行时间,和操作系统有很大的关系,和编译软件也有关。
在单片机中,更和变量的存储类型有关(如单字节变量、两字节变量)。
因为有如此多的不确定因素,所以,从来就没有办法计算C的执行时间。
只是可以在仿真调试的时候,进行实际测量,得到一些(难以通用的)经验数据。
楼主要想准确的控制时间,应该研究使用汇编语言,或者使用硬件定时器。
C语言,只能干些粗活。
原题网址:http://www.eeskill.com/article/id/50594
====================================
很多网友在C语言延时函数的延时时间方面,做出了很大的努力。
在网上找到的一篇文章,其中给出了一些经验数据,摘录一些主要内容如下。
=============================================
用C语言写程序,是非常的简练,不足之处是它的延时很不好控制。
很难知道一段延时程序的精确延时到底是多少,这和汇编延时程序无法相比。
通过测试,给大家提供一个延时子程序模块,并以此给出一个延时的数据表格。
延时模块:
void Delay()
{
unsigned char a,b,c;
for(a = 0; a < ?; a++)
for(b = 0; b < ?; b++)
for(c = 0; c < ?; c++);
}
其中问号代表要填的数,要延时多少,到下面的表格中去找数据,然后填上就OK!
数据表如下
/******************************************************/
(X的范围为2到255)
/******************************************************/
注意:表格中的数据只适合上述延时模块。
这篇文章里面,也没有写清楚系统晶振是多少,所以做而论道也未进行实验,希望网友们进行测试。