打印

C51从us到s的精确延时

[复制链接]
3078|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
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


可能换编译器版本都要出问题哦。

使用特权

评论回复
5
李富贵| | 2011-9-4 14:17 | 只看该作者
这个要加禁止优化的#pragma吧。

使用特权

评论回复
6
hyghyghyg| | 2011-9-4 14:55 | 只看该作者
问题

使用特权

评论回复
7
受不了了| | 2011-9-4 16:14 | 只看该作者
二姨每个月总有那么几天身体不舒服:$

使用特权

评论回复
8
ayb_ice| | 2011-9-5 08:28 | 只看该作者
再精确也意义不大,受中断影响
这样的程序就是在浪费宝贵CPU时间
起码我用定时器来做,我还可以休息一下,减少功耗

使用特权

评论回复
9
coody| | 2011-9-5 11:17 | 只看该作者
受教科书毒害了

使用特权

评论回复
10
liang7143| | 2011-9-5 12:11 | 只看该作者
很听话的孩纸,你们伤不起啊

使用特权

评论回复
11
nino_1| | 2011-9-5 15:57 | 只看该作者
只当lz是Ctrl+C,Ctrl+V

使用特权

评论回复
12
liu_3091| | 2011-9-5 19:16 | 只看该作者
还是用中断好吧。

使用特权

评论回复
13
huiyirushi| | 2011-9-5 21:44 | 只看该作者
受教了

使用特权

评论回复
14
Ryanhsiung| | 2011-9-9 09:24 | 只看该作者
你还没有考虑到中断

使用特权

评论回复
15
baigame| | 2014-4-13 22:33 | 只看该作者
很不错  好好加油

使用特权

评论回复
16
woshizhengjie89| | 2014-4-14 09:23 | 只看该作者
LZ,这是想干啥。。。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

1

帖子

0

粉丝