‘基于51单片机的定时器编程’

         基于STC89C52RC单片机实现LED灯的定时闪烁

实现定时步骤:

1.确定晶振频率、分频倍数

2.确定使用的定时器、模式

3.计数脉冲源,设置C/T

4.设置TL、TH初始值

我们这里使用的是定时器0,16位定时器

 

1.使能定时器中断

2.使能总中断

3.编写中断处理函数

4.重新装填TL、TH初始值(可选)       

 

程序代码:

#include <REGX52.H>

unsigned int delay_flag = 0;

//延时n ms函数
void Delaynms(unsigned int n)
{
    while(1)
    {
        if(delay_flag >= n)
        {
            delay_flag = 0;
            break;
        }    
    }
}

void main()
{    
    //1.外部晶振为11.0592MHz,12分频
    //2.使用定时器0,模式1
    TMOD|=1<<0;    //M0=1 置位操作:TMOD=TMOD|(1<<0) => TMOD=TMOD|1      (0000 0001)
    TMOD&=~(1<<1); //M1=0 清位操作:TMOD=TMOD&~(1<<1) => TMOD=TMOD&0xFD  (1111 1101)
    //3.设置计数脉冲源:C/T
    TMOD&=~(1<<2); //C/T=0
    //4.设置TL0、TH0初始值
    TL0=0x66;
    TH0=0xFC;
    //5.启动定时器:设置GATE、TR0
    TMOD&=~(1<<3); //GATE=0
    TCON|=1<<4;    //TR0=1
    
    //1.使能定时器0中断
    ET0=1;
    //2.使能总中断
    EA=1;

    while(1) 
    {            
        P2_0=0;       //1111 1110
        Delaynms(1000); 
        
        P2_0=1;       //1111 1111
        Delaynms(1000);                        
    }        
}

void time0() interrupt 1 //3.定时器0中断函数
{
    TH0=0xFC;                 //4.给定时器赋初值,定时1ms
    TL0=0x66;
    
    delay_flag++;
}

 

关于置位操作与清位操作

置位操作:

TMOD |= 1

或运算:双方有1则为1

即假设TMOD为1010 0100 | (1)

1010 0100

0000 0001 //1

则为1010 0101

称此为置位操作,使得指定位的值为1,而不影响其它位。而如果将TMOD直接为1,则会影响其它位的值。

清位操作:

TMOD &=~(1

与运算:双方有0则为0

假设TMOD 1010 0111 则

1010 0111

1111 1101 //1

1010 0101

使得1位始终为0

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值