51单片机延时函数计算问题以及如何准确延时

Posted wait_for_that_day5

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了51单片机延时函数计算问题以及如何准确延时相关的知识,希望对你有一定的参考价值。

几种周期介绍




周期名称描述时间
振荡(时钟)单片机提供时钟脉冲信号的振荡源的周期T=1/f
状态振荡周期经二分频后得到的2T
机器在一个机器周期内,CPU可以完成一个独立的 操作12T
指令指CPU完成一条操作所需的全部时间12-12nT

指令:

1、MUL、DIV:仅有的4周期指令

2、包含DPTR和PC的指令均为2周期指令

3、所有的绝对跳转和条件转移指令,均为2周期指令

4、所有包括A寄存器的指令,均为单周期指令

5、位操作指令中,ANL和ORL是2周期指令

6、所有包含立即地址的指令,除INC direct及DEC direct外,均为2周期指令

7、剩下的均为单周期指令。



STC-ISP软件查看各操作用时以及延时函数




_nop_函数可以在keil软件的C51->HLP->C51lib.chm文档中查阅  (授人以鱼不如授人以渔)




延时函数计算


示例:

void delay(uint z)



	uint i,j;

	for(i=z;i>0;i--)

		for(j=0;j<921;j++);


分析:

1.先计算你单片机的振荡(时钟)周期 T= 1/晶振(11.0592MHZ)

2.一次i--操作为12T

3.忽略变量定义,上述延时函数共需时间:921*z*12T

4.带入T:921*12*T*z 约为 z ms



计算出现误差的原因


1.软件仿真时,函数调用的时候入栈出栈操作的耗时。

2.指令周期随指令的不同而不同导致的误差。

3.中断的影响。

4.变量的范围超过,从而与预计时间不一样。


所以实际上我们应该只能算出估计值,根据最开始周期的信息来计算延时函数中延时的时长。

以上是关于51单片机延时函数计算问题以及如何准确延时的主要内容,如果未能解决你的问题,请参考以下文章

51单片机定时器0作为时间基准以及延时函数参考使用

解决延时函数耗费单片机内部资源的问题。可以将延时函数放在中断中……方法解释一下

单片机中用写delay函数做延时和用定时器做延时有啥区别?

51单片机C语言中delay函数是怎么定义和使用的?

关于keil延时函数的问题,和硬件不一致

89c51单片机延时问题,怎么求出延时是100ms,求详细回答。