这个c语言程序延时2ms是怎么计算的?

void delay2ms(void) //延时2ms子程序
{
unsigned char i,j,z;
for(z=5;z>0;z--)
for(i=12;i>0;i--)
for(j=15;j>0;j--);
}

我用软件调试才0.00014145s,c语言定时不是很精确的,你可以用软件来调试,要准确定时要用定时/计数器实现。

温馨提示:内容为网友见解,仅供参考
第1个回答  2012-05-10
你给的算法误差大,不同的计算机运算速度不同,等待时间不同。

暂停,可以用 Windows.h 里的 Sleep() 函数,也可以自己写。
Sleep(1000); 参数是1000毫秒,就是暂停 1 秒。一般人认为,Sleep函数,每秒可能有25毫秒误差。

自己写,可以利用 clock () 函数,clock () 函数送返从程序开始运行到调用时的时间间隔,单位是毫秒。暂停开始,用clock () 取开始时间,然后,只要用clock ()再取时间,判断是否到结束时间,没到则继续暂停。

// 等待 多少秒:
void wait ( int seconds )
{
clock_t endwait;
endwait = clock () + seconds * CLOCKS_PER_SEC ;
while (clock() < endwait) {}
}
// 等待多少毫秒:
void wait_ms ( int ms )
{
clock_t endwait;
endwait = clock () + ms;
while (clock() < endwait) {}
}
精确计时算法见L_o_o_n_i_e 百度空间文章:C语言时间函数的应用本回答被提问者采纳
第2个回答  2012-05-10
你按2楼的做法去做!延时需要调试的,和你的函数和时钟频率有关。
第3个回答  2012-05-09
C语言中有一个专门的Sleep()函数可以简单来延时,楼上可以看下。
第4个回答  2012-05-09
5*12*15追问

大哥5*12*15 不等于2ms的

追答

这可能与,程序执行的速度 有关吧,(复杂度)。

这个c语言程序延时2ms是怎么计算的?
我用软件调试才0.00014145s,c语言定时不是很精确的,你可以用软件来调试,要准确定时要用定时\/计数器实现。

单片机C语言中,怎么通过循环次数计算延迟函数的延迟时间?
首先你要知道一个指令周期是几秒 算法是1\/(晶振频率除以12)然后你要知道循环究竟执行了几个指令周期 你可以用keil里在线反汇编命令看看你的循环编译成机器语言后到底是几个指令周期 这样就知道了延迟时间 当然你取近似值也可以的 比如 for(i=0,i<255,i++){x=2} 这里x=2是一个指令周期 而执...

51单片机延时程序问题
我以2MS为例说明一下:单片机的晶振周期为12HZ,则执行一条代码为一个机器周期,为1微妙(uA),所以2MS=10*200(uA),对R2赋值200(4位二进制数最大值为256,所以只能取到200)即#C8H。再对R2循环20次就实现了2MS延时。至于100ms、 200ms、 1s等等方法类似,只是调整相应的初值。多设置几次...

请教一个51单片机C语言的延时时间问题
应该是1-2ms,因为中断来临的时间不确定,有可能count刚被清零中断就来了,这时其实延时最接近1ms。然而如果在count清零之前刚执行过中断的话,那么延时最接近2ms。

8051若晶振为6MHz,是编写一个2ms延时子程序。求解答!
自己用Keil打断点测试三,这个跟你用什么语言,甚至什么类型数据都有关系,实测为准。其实等你以后会渐渐发现,延时2ms都算是对CPU的一种可耻浪费,不放想想看,用定时器的话如何实现?如何解放CPU?

用定时器计数器输出2ms的方波(c语言)
假设你用的晶振为12M,用P1.0口输出周期为2ms的方波。使用定时器工作方式1.至于计数初值的计算,授之以鱼不如授之以渔!在定时器模式下,计数器的计数脉冲来自于晶振脉冲的12分频信号,即对机器周期进行计数。若选择12M晶振,则定时器的计数频率为1MHZ。假设定时时间为T,机器周期为T1,即12\/晶振...

24.5M晶振的单片机 延时函数怎么计算 ?和12M的有什么区别?请帮忙写出1u...
一般来说要是通过延时函数来得到一个精准的延时时间(比如你说的1us、2us)是让正常人无法忍受的工作量,你可以点击编辑环境中的放大镜图标,在左边会弹出显示栏,sys下sec就是延时时间(要通过设置断点),你可以改变函数中变量值大概地调出需要的时间(希望你不要固执地去尝试调出你要的时间,因为这...

单片机C语言编程中延时函数和定时器中断有何关系
---主程序运行的时间即是延时函数的延时时间。定时器中断是在主程序中插入的事件,是在主程序的某个时间点,跳出主程序去执行定时器中断要做的事情。所以如果一个延时子程序不停地被中断(包括定时器中断或者其他中断)打断,就没有时间完成自身运行一次所需的那些语句。等到它自身运行完一次,可能原定...

单片机求一用C编写的延时1小时的子程序,要精确到秒级别
计时1小时差小于1秒,也就是误差要求小于1\/3600普通的晶振很难有这个精度,使用外部时钟比较有把据。你要的是软件就给你一个吧,能不能达到精度要求就看单片机的时钟部分,跟软件没有关系。\/***\/ \/*广州一丁自动化设备有限公司020-28969088 *\/ \/***\/ include <reg52.h> sbit led=P1^0;\/\/ l...

C语言动态和静态存储类别的区别
静态存储就是在程序开始的时候就分配固定的内存单元,整个程序结束后释放存储单元,而动态存储单元在程序运行初不分配内存单元在用到时才分配,而当用过后则立刻释放该内存空间

相似回答