注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

易拉罐的博客

心静自然凉

 
 
 

日志

 
 

转 51单片机精确延时程序(晶振12MHz,一个机器周期1us.) .  

2013-04-26 11:23:36|  分类: 单片机开发 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

51单片机精确延时程序(晶振12MHz,一个机器周期1us.)
几个精确延时程序:在精确延时的计算当中,最容易让人忽略的是计算循环外的那部分延时,
在对时间要求不高的场合,这部分对程序不会造成影响.

一. 500ms延时子程序程序:.(晶振12MHz,一个机器周期1us.)
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--);
}

 

void delay1s(void)  //12M晶振,延时999999.00us
{
 unsigned char i,j,k;
  for(i=46;i>0;i--)
      for(j=152;j>0;j--)
          for(k=70;k>0;k--);
}


http://blog.csdn.net/hbuxiaofei/article/details/7760062
  评论这张
 
阅读(481)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017