C51从us到s的精确延时

[复制链接]
 楼主| 787458283 发表于 2011-9-4 00:59 | 显示全部楼层 |阅读模式
#include<reg51.h>  
#include<intrins.h>    //函数 _nop_(),一个机器周期
#define uchar unsigned char
#define uint unsigned int
void delay_s(uchar i)    //12MHz时,延时 0.1*i s
{      
  uchar j,k;   
  do{j=198;
     do{j--;k=250;while(--k);}while(j);
     i--;
    }while(i);
}
void delay_ms(uchar i)     //延时(j*2+1+2)*i+5 个机器周期   
{ uchar j;     //12MHz时,延时 0.5*i ms
  do{j=248;
     do{j--;}while(j);
     i--;
    }while(i);
}
void delay_us(uchar i)    //延时 2*i+1+2 个机器周期
{      //12MHz时,延时 2*i us
  while(--i);
}
void main()
{
  delay_s(10);           // 1s
  delay_ms(10);       //5ms
  delay_us(10);           //20+3us
}
NE5532 发表于 2011-9-4 08:01 | 显示全部楼层
精度_____PPM???
virtualtryon 发表于 2011-9-4 08:34 | 显示全部楼层
LZ换一款单片机,换一个编译器,或者开中断试一下。
这种延时只能用于粗略的延时,精确的延时还得靠定时器
NE5532 发表于 2011-9-4 08:58 | 显示全部楼层
LZ换一款单片机,换一个编译器,或者开中断试一下。
这种延时只能用于粗略的延时,精确的延时还得靠定时器
virtualtryon 发表于 2011-9-4 08:34


可能换编译器版本都要出问题哦。
李富贵 发表于 2011-9-4 14:17 | 显示全部楼层
这个要加禁止优化的#pragma吧。
hyghyghyg 发表于 2011-9-4 14:55 | 显示全部楼层
问题
受不了了 发表于 2011-9-4 16:14 | 显示全部楼层
二姨每个月总有那么几天身体不舒服:$
ayb_ice 发表于 2011-9-5 08:28 | 显示全部楼层
再精确也意义不大,受中断影响
这样的程序就是在浪费宝贵CPU时间
起码我用定时器来做,我还可以休息一下,减少功耗
coody 发表于 2011-9-5 11:17 | 显示全部楼层
受教科书毒害了
liang7143 发表于 2011-9-5 12:11 | 显示全部楼层
很听话的孩纸,你们伤不起啊
nino_1 发表于 2011-9-5 15:57 | 显示全部楼层
只当lz是Ctrl+C,Ctrl+V
liu_3091 发表于 2011-9-5 19:16 | 显示全部楼层
还是用中断好吧。
huiyirushi 发表于 2011-9-5 21:44 | 显示全部楼层
受教了
Ryanhsiung 发表于 2011-9-9 09:24 | 显示全部楼层
你还没有考虑到中断
baigame 发表于 2014-4-13 22:33 | 显示全部楼层
很不错  好好加油
woshizhengjie89 发表于 2014-4-14 09:23 | 显示全部楼层
LZ,这是想干啥。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

1

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部