原创 微秒级延时子程序

2008-5-25 10:14 4259 9 9 分类: MCU/ 嵌入式
微秒级的延时,问题主要在于如何做到精确控制。最近一段时间做项目,我对此i进行了分析如下:

c语言实现:


 WAVE仿真器,处理器89c51,晶振12MHz.


 #include<define.h>
 #include<AT89X51.H>
 #include<global.h>
void   delay(int time);
int   time;
main()
{delay(1);       //us延时
 delay(10);
 delay(50);
}
void   delay(int time)
  {do    {time--;
         }while(time>1);
}********delay(1);       实际用时18us


*********delay(5);    实际用时54us


*********delay(10);    实际用时114us


*********delay(50);    实际用时594us


*********delay(100);    实际用时1194us


汇编实现:


延时时间常数(十进制)保存在R2中,处理器89c51,晶振12MHz,WAVE仿真器


ORG  0000H
JMP  MAIN
ORG 0100h
MAIN:
           MOV   r2,#1            
           CALL  DELAYUS
           ljmp   main              
DELAYUS:    NOP                      ;10us延时DELAYUS
            NOP
            NOP
            NOP
            NOP
            NOP
            NOP
            NOP
            DJNZ   R2,DELAYUS
            RET
******************计数值R2=1时,CALL  DELAYUS用时14uS


                  ******************计数值R2=5时,CALL  DELAYUS用时54uS


                 ******************计数值R2=10时,CALL  DELAYUS用时104uS


                 ******************计数值R2=50时,CALL  DELAYUS用时504uS


               ******************计数值R2=100时,CALL  DELAYUS用时1004uS


通过以上对比,可以发现,在微秒级延时方面:汇编程序远比C程序准确。


所以在对延时要求苛刻的程序编写时,我选用汇编延时程序。对于延时没有严格要求时,我们尽可以享受C语言带给我们编程的方便。

文章评论0条评论)

登录后参与讨论
我要评论
0
9
关闭 站长推荐上一条 /2 下一条