1 / 15
文档名称:

单片机延时计算.doc

格式:doc   大小:44KB   页数:15页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

单片机延时计算.doc

上传人:tmm958758 2018/11/9 文件大小:44 KB

下载得到文件列表

单片机延时计算.doc

相关文档

文档介绍

文档介绍:C程序中可使用不同类型的变量来进行延时设计。经实验测试,使用unsigned char类型具有比unsigned int更优化的代码,在使用时应该使用unsigned char作为延时变量。 以某晶振为12MHz的单片机为例,晶振为12MHz即一个机器周期为1us。
void delay__ms(void) //x,y,z位固定值,故不能接受参数
{
unsigned char i,j,k;
for(i=x;i>0;i--)
for(j=y;j>0;j--)
for(k=z;k>0;k--);
}
【Delay_Time=[(2z+3)*y+3]*x+5】
一. 500ms延时子程序
程序:
     void delay500ms(void)
       {
       unsigned char i,j,k;
         for(i=15;i>0;i--)
         for(j=202;j>0;j--)
         for(k=81;k>0;k--);
       }
计算分析:
     程序共有三层循环
     一层循环n:R5*2 = 81*2 = 162us                   DJNZ   2us
     二层循环m:R6*(n+3) = 202*165 = 33330us           DJNZ   2us + R5赋值 1us = 3us
     三层循环: R7*(m+3) = 15*33333 = 499995us         DJNZ   2us + R6赋值 1us = 3us
     循环外:   5us             子程序调用 2us + 子程序返回 2us + R7赋值 1us   = 5us
     延时总时间 = 三层循环 + 循环外 = 499995+5 = 500000us =500ms
计算公式:延时时间=[(2*R5+3)*R6+3]*R7+5
     二. 200ms延时子程序
程序:
void delay200ms(void)
{
       unsigned char i,j,k;
         for(i=5;i>0;i--)
         for(j=132;j>0;j--)
         for(k=150;k>0;k--);
}
     三. 10ms延时子程序
程序:
void delay10ms(void)
{
       unsigned char i,j,k;
         for(i=5;i>0;i--)
         for(j=4;j>0;j--)
         for(k=248;k>0;k--);
}
     四. 1s延时子程序
程序:
void delay1s(void)
{
       unsigned char h,i,j,k;
         for(h=5;h>0;h--)
         for(i=4;i>0;i--)
         for(j=116;j>0;j--)
         for(k=214;k>0;k--);
}
 应用单片机的时候,经常会遇到需要短时间延时的情况。需要的延时时间很短,一般都是几十到几百微妙(us)。有时候还需要很高的精度,比如用单片机驱动DS18B20的时候,误差容许的范围在十几us以内,不然很容易出错。这种情况下,用计时器往往有点小题大做。而在极端的情况下,计时器甚至已经全部派上了别的用途。这时就需要我们另想别的办法了。
    以前用汇编语言写单片机程序的时候,这个问题还是相对容易解决的。比如用的是12MHz晶振的51,打算延时20us,只要用下面的代码,就可以满足一般的需要:
        mov     r0, #09h
loop:   djnz    r0, loop
51单片机的指令周期是晶振频率的1/12,也就是1us一个周期。mov r0, #09h需要2个极其周期,djnz也需要2个极其周期。那么存在r0里的数就是(20-2)/2。用这种方法,可以非常方便的实现256us以下时间的延时。如果需要更长时间,可以使用两层嵌套。而且精度可以达到2us,一般来说,这已经足够了。
    现在,应用更广泛的毫无疑问是Keil的C编译器。相对汇编来说,C固然有很多优点,比如程序易维护,便于理解,适合大的项目。但缺点(我觉得这是C的唯一一个缺点了)就是实时性没有保证,无法预测代码执