第四讲——定时器实现延时

对于AT89S52单片机,共有3个定时器,T0,T1,T2。其中T0,T1可以作为16位计数器,16位定时器和8位自动装载定时器使用,而T2则可以作为16为自动装载 定时器。这里以T0为例,讲述16位定时器实现延时的代码。

定时器的相关寄存器不在这里叙述,大家可以根据程序查阅手册看看各个寄存器的使用。鼓励大家自己也进行思考,查阅资料。

代码如下,这里采用定时器实现1ms延时,延后以循环的方式延时1秒实现LED闪烁。

#include<reg52.h>

#define LED P1

typedef unsigned int uint;
typedef unsigned char uchar;

void Delay_Nms(uint N);  //延时N毫秒子函数
void Hardware_Delay_1ms();    //定时器延时,12MHz晶振,延时1ms    

void main()
{
    LED = 0xFF;      //熄灭所有的灯
    while(1)
    {
        LED ^= 0xFF;//取反,使灯闪烁
        Delay_Nms(1000); //延时1秒
    }
}

void Delay_Nms(uint N)
{
    uint j;
    for(j=N;j>0;j--)
     Hardware_Delay_1ms();    
}

void Hardware_Delay_1ms(void)
{
   TMOD &=0xF0;
   TMOD |=0x01;  //T0——16位定时器器模

   TH0 = 0xFC;
   TL0 =0x18;    //64536
  
   TF0=0;        //清除定时器溢出标志
   TR0=1;         //启动定时器    
   while(TF0==0);//等待计数完成
   TR0=0;         //停止定时器
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

岛上码农

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值