关于C语言延时时间的问题
来源:互联网 发布:linux怎么写shell脚本 编辑:程序博客网 时间:2024/05/22 02:13
回答了一个关于C语言延时时间的问题,题目给出延时函数如下:
delay(unsigned int x) {while(x--);}
delay(unsigned int x) {for (i =0, i < x; i++);}
单片机的晶振为12M。
要求说出他们所延迟的时间分别是X的多少倍?怎么计算的。
====================================
最佳答案:
C语言的执行时间,从来就没有计算公式。
C程序的执行时间,和操作系统有很大的关系,和编译软件也有关。
在单片机中,更和变量的存储类型有关(如单字节变量、两字节变量)。
因为有如此多的不确定因素,所以,从来就没有办法计算C的执行时间。
只是可以在仿真调试的时候,进行实际测量,得到一些(难以通用的)经验数据。
楼主要想准确的控制时间,应该研究使用汇编语言,或者使用硬件定时器。
C语言,只能干些粗活。
原题网址:http://zhidao.baidu.com/question/225783032.html
====================================
很多网友在C语言延时函数的延时时间方面,做出了很大的努力。
在网上找到的一篇文章,其中给出了一些经验数据,摘录一些主要内容如下。
=============================================
文章转自 Proteus仿真社区 作者:liaoguobao00
未作验证,如有问题请和原作者联系:
=============================================
用C语言写程序,是非常的简练,不足之处是它的延时很不好控制。
很难知道一段延时程序的精确延时到底是多少,这和汇编延时程序无法相比。
通过测试,给大家提供一个延时子程序模块,并以此给出一个延时的数据表格。
延时模块:
void Delay()
{
unsigned char a,b,c;
for(a = 0; a < ?; a++)
for(b = 0; b < ?; b++)
for(c = 0; c < ?; c++);
}
其中问号代表要填的数,要延时多少,到下面的表格中去找数据,然后填上就OK!
数据表如下
/******************************************************/
延时时间 a的值 b的值 c的值 误差(us)
10us 1 1 1 -0.5
20us 1 1 8 0
30us 1 1 15 +0.5
40us 2 1 9 0
50us 1 1 28 0
60us 1 1 35 +0.5
70us 1 1 42 +1
80us 1 1 48 0
90us 1 1 55 +0.5
100us 1 1 61 -0.5
200us 1 1 128 0
300us 3 1 63 +1.5
400us 2 1 129 0
500us 5 1 63 +0.5
600us 6 1 63 0
700us 7 1 63 -0.5
800us 1 3 175 +0.5
900us 9 1 63 -1.5
1ms 1 3 219 -1.5
2ms 2 3 220 +3
3ms 3 3 220 +3
Xms X 3 220 +3
(X的范围为2到255)
/******************************************************/
注意:表格中的数据只适合上述延时模块。
这篇文章里面,也没有写清楚系统晶振是多少,所以做而论道也未进行实验,希望网友们进行测试。
- 关于C语言延时时间的问题
- C语言的时间问题。。
- 关于延时打印的问题
- 关于STM32的延时问题
- c语言中关于时间的函数
- C语言中关于时间的函数
- C语言中关于时间的函数
- C语言中关于时间的操作
- C语言中关于时间的函数
- C语言中关于时间的函数
- C语言中关于时间的函数
- c语言关于时间的两个函数
- C语言中关于时间的函数
- c语言中关于时间的函数
- 关于C语言的问题
- 关于c语言的问题
- C语言关于++--的问题
- 关于C语言的问题
- LCD1602 的4线接法
- 一代枭雄张作霖
- 四舍六入!
- <Test> XiMaLaYa 新奇部分的添加
- 4×4矩阵键盘,控制数码管显示
- 关于C语言延时时间的问题
- 【cocos3.x+box2d+tileMap】制作马里奥游戏(三)创世纪
- 日本发生9级地震与海啸
- MCS-51 单片机的存储器地址空间如何划分?
- IOS8 新增的UIVisualEffectView 使用
- 51单片机的中断控制
- 两台 PC 机之间的串口通信
- 用C语言编写程序,判断输入的一个字符串是否是回数
- 数据键入与排序程序--80x86汇编语言