对于需要精确延时的应用场合,需要精确知道延时函数的具体延时时间。以C语言编写的单片机延时函数网上有两个不同的版本(都说是延时n毫秒),分别如下:
void delay(uint x) //延时X毫秒
{
uint y,z;
for(z=x;z>0;z--)
for(y=110;y>0;y--);
}
void delay_ms(uint n) //延时n毫秒
{
uchar i;
while(n--)
{
for(i=0;i<120;i++);
}
}
上述两个函数的实现方法是一样的,只是给的时间常数不同,一个是110,另一个是120。近来工作因为对时间的精度要求很高,就特地验证了下这两个函数运行时所用的时间。 主程序为:
void main(void)
{
delay(1);
}
反汇编之后(推荐用C51智能反编译器,不过要手工加上ORG地址和END结束符):
标号 指令 地址 机器码 机器周期
ORG 0000H
Q0000: LJMP Q0021 ;0000 02 00 21
;============