Chinaunix首页 | 论坛 | 博客
  • 博客访问: 288945
  • 博文数量: 23
  • 博客积分: 3011
  • 博客等级: 中校
  • 技术积分: 662
  • 用 户 组: 普通用户
  • 注册时间: 2005-11-26 13:43
文章分类

全部博文(23)

文章存档

2009年(19)

2008年(4)

我的朋友

分类: 嵌入式

2009-07-25 20:31:27

51单片机基于定时器0的硬件延时代码:

//晶振的频率
#define OSC_FREQ (11059200UL)

//每个指令的振荡周期数(4,6,12),注意,这里一定要仔细查看芯片手册
//*12 - 早期的8051、8052及当前的绝大部分51单片机
//*6 - Philips 的芯片
//*4 - Dallas
#define OSC_PER_INST (12)

//TIME 为定时时间 单位MS
#define PRELOAD1MS (65536 - 1*(UINT16)(OSC_FREQ/(OSC_PER_INST*1000)))
#define PRELOAD5MS (65536 - 5*(UINT16)(OSC_FREQ/(OSC_PER_INST*1000)))

void start_Timeout1ms(){
    TH0 = PRELOAD1MS / 256;
    TL0 = PRELOAD1MS % 256;
    TF0 = 0 ;//清溢出标志位

    ET0 = 0;    //关定时器0的中断

    TR0 = 1;    //启动定时器

}

void start_Timeout5ms(){
    //TMOD = ;

    TH0 = PRELOAD5MS / 256;
    TL0 = PRELOAD5MS % 256;
    TF0 = 0 ;//清溢出标志位

    ET0 = 0;    //关定时器0的中断

    TR0 = 1;    //启动定时器

}

void stop_Timeout(){
    TR0 = 0;
}

void Delay5ms(){
    start_Timeout5ms();
    while(!_testbit_(TF0));
    stop_Timeout();
}

/* 用法
start_Timeout1ms();
while(!TF0);    //等待T0超时
stop_Timeout();
*/

阅读(3492) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~