一、51单片机软件延时:
1、 几种周期介绍
周期名称
描述
时间
振荡
单片机提供时钟脉冲信号
的振荡源的周期
T=1/f
状态
振荡周期经二分频后得到
的
2T
机器
CPU 可以完成一个独立操
作所需要的周期
12T
指令
指 CPU 完成一条操作所需
的全部时间
n*12T
2、指令:
1、MUL、DIV:仅有的 4 周期指令
2、包含 DPTR 和 PC 的指令均为 2 周期指令
3、所有的绝对跳转和条件转移指令,均为 2 周期指令
4、所有包括 A 寄存器的指令,均为单周期指令
5、位操作指令中,ANL 和 ORL 是 2 周期指令
6、所有包含立即地址的指令,除 INC direct 及 DEC direct 外,均为 2 周期指令
7、剩下的均为单周期指令。如:
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 us
3、计算误差出现的原因:
1.软件仿真时,函数调用的时候入栈出栈操作的耗时。
2.指令周期随指令的不同而不同导致的误差。
3.中断的影响。
4.变量的范围超过,从而与预计时间不一样。
while(i--):如果 i 为 char 型,执行一次大概为 5us 左右;如果 i 为 int 型则执行一次大概为 10us 左右。注意:软件延时通常用于时序要求较高的编程中,其它需延时较长的地方必须采用单片机内部定时器。
|