单片机C语言延时程序,延时时间是怎样计算的

比如下面这个延时1ms的程序 它是怎样计算的?
/*延时1MS*/
void delay(uint k)
{
uint i,j;
for(i=0;i<k;i++)
{
for(j=0;j<60;j++)
{;}
}
}

这怎么是延时1ms的程序?

k不一样延时也不一样。

而这种靠执行指令延时的程序的延时里昂:
1. 可以通过查看她的反汇编代码来分析得到。
2. 也可以通过定时计数器的获得。

执行前从0开始计数启动定时器,然后以一定参数k调用delay,在返回后检查定时器的计数值 T。
T = tc + k * t0,
tc是任何一次调用都具有的调用开销。
t0时k=1时去掉调用开销tc的循环体执行时间。
给两个不同的k得到两个不同的T,就可以确定这两个参数 tc和t0。 从而就可以根据谣言吃的时间和容易的计算出k的值。
温馨提示:内容为网友见解,仅供参考
第1个回答  2007-07-27
最好不要用精确延时,因为这样是算不准的,编译器不一样,可能也会不一样.

单片机延时程序的延时时间怎么算的?
单片机的延时程序通过执行指令来达到延时效果,这个时间等于执行的指令需要的时间,而一个指令需要的时间叫做指令周期,这个时间等于若干个机器周期。

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

51单片机用c语言怎么写延时函数?
延时时间的计算与单片机的晶振频率有关。若晶振频率为12Mhz,那么单片机每震动一次所需要的时间是1\/12M s。那么再来看看单片机执行一次自减所需要的振动次数是96次,假如我们对时间要求不是特别精确的话,可以约等于100来计算。现在通过上面两个数据可以得出:单片机每执行一次自减所需要的时间是1\/12M *10...

单片机延时的方法有哪些?
计数器初值可以通过以下公式计算:计数器初值 = 256 - 延时所需指令数 + 2。因此,计数器初 1,333,333 + 2 = 0x0F。以上程序中使用了一个8位计数器,所以最大可以延时255个机器周期(即85ms左右)。如果需要更长的延时时间,可以使用16位计数器或者多次调用延时函数来实现。

在C51单片机中延时子程序的延时时间是怎么算的?
void delay (){ int x;char y;for(x=1000;x>0;x--){ for(y=100;y>0;y--)};} x每减一次,y减100次,x一共减少1000次 这个子程序的延时时间是:1000*100=100ms(默认时间是us)如果想更精确的话,可以用软件进行调试 for语句下面的{}还可以省略 有不清的可以多交流 ...

怎么用C语言做单片机的精确延时
1 C语言程序延时 Keil C51的编程语言常用的有2种: 一种是汇编语言;另一种是C 语言。用汇编语言写单片机程序时,精确时间延时是相对容易解决的。比如,用的是晶振频率为12 MHz的AT89C51,打算延时20 μs,51单片机的指令周期是晶振频率的1\/12,即一个机器周期为1 μs;“MOV R0,#X”需要2个...

单片机C语言中while的延时时间?
用KEIL软件可以计算时间,将while的起始位置和终止位置加红点(双击即可);然后左侧的SEC后面的就是执行的时间。再给你几个延时程序做参考:软件延时:(asm)晶振12MHZ,延时1秒 程序如下:DELAY:MOV 72H,#100 LOOP3:MOV 71H,#100 LOOP1:MOV 70H,#47 LOOP0:DJNZ 70H,LOOP0 NOP DJNZ 71H,LOOP...

单片机延时1秒如何计算要最详细一点的要过程用C语言
\/\/do something,如果一秒延时标志为1,则清除此标志,等待下次1秒,在此处 \/\/执行需要执行的程序 } } } \/* 定时器50ms产生一次中断 *\/ void Timer(void) interrupt 3 { \/* 重新载入T1参数 *\/ TH1=0x3C;TL1=0xAF;\/* 一秒累加 *\/ rSecondCount++;\/\/秒计时+1 if (rSecondCount==20) \/\/1...

请问AT89S52单片机用C语言编程时延时函数的延时时长怎么计算!(系统时钟...
时钟周期T1=1\/12M 机器周期T2=T1*12 指令周期T3:1~4个机器周期 要算的话只能是看有几个指令了,然后大致预测一下。。。当然以实际为准。用keil测比较好

单片机延时程序,延时时间计算 for(m=20;m>0;m--) for(n=20;n>0;n...
void Delay_ms(void){ unsigned char m,n,s;for(m=20;m>0;m--)for(n=20;n>0;n--)for(s=248;s>0;s--);} 我结合了你的for循环软件延时来给你简单讲解一下,软件延时是单片机在执行一条空指令耗费的时间,当程序执行到Delay_ms();延时后,先执行M减一次for(m=20;m>0;m--) ...

相似回答