80C51定时器中断

 来源 《霖锋带你征服嵌入式》

0、CPU时序知识

 一个机器周期是12个振荡周期,换算成频率的话,是晶振频率的1/12;

使用汇编语言编写程序的时候,一条指令一般是1~4个机器周期。

1) 51单片机有两组定时器/计时器,既可以用来定时,也可以用来计数,故称为定时器/计数器

2)定时器/计数器和单片机的CPU是相互独立的,定时器/计数器的工作过程是自动完成的,不需要CPU参与。(计时器仍然是内嵌在CPU板中的)

3)定时器/计数器是根据机器内部的时钟或者脉冲信号(P3^4/P3^5引脚接入)寄存器中的数据加1(每个定时器都有2个寄存器TH0、TL0(TH1、TL1))

4)有了定时器/计数器之后,可以增加单片机的效率,一些简单的重复加1的工作可以交给定时器/计数器去做,CPU转而处理一些复杂的事情。同时可以实现精确定时的功能。(因为定时器与CPU相互独立)

1、定时器结构

 

1) 51单片机有2个计数器(16位加1计数器),每个计数器又有高8位和低8位两个寄存器TH0、TL0(TH1、TL1.)组成。

2)工作方式寄存器:TMOD

3)控制寄存器:TCON

使用定时器/计数器,就是要对上述4个寄存器进行操作。

1.1TMOD寄存器

对于TMOD寄存器,高4位是控制T1定时器的运行模式;低4位是控制T0定时器的运行模式;

每个定时器都有4种方式,我们常用的是方式1;

 GATE是门控位,用于控制定时器的启动是否受外部中断源信号的影响。GATE=0,不受影响;GATE=1,受影响。

一般情况下,我们用于定时,GATE=0;只要用软件使TCON中断的TR0或TR1为1,就可以启动定时器工作。

注意:当GATE =1时,使TCON中断的TR0或TR1为1外,还需要额外加上外部中断引脚INT0/1为高电平,才能启动定时器工作。

C/T:0,定时器模式,1计数模式;

M1M0:工作方式设置位。

 方式1常用,我们以方式1来分析;只有方式2才可以自动装载初值。

 用作定时器的时候,采用的是内部的机器周期,12MHz的晶振,机器周期是1us;

T0引脚(P3^4)接外部方波的时候,一般作为计数器使用。

 方式2在串口通信的时候会用到,在高8位TH0中写入初值,低8位TL0来计数,计数完成溢出后变为0后,TH0将初值自动装载到TL0中,继续计数。方式2适合用作较精确的脉冲信号发生器,波特率。

 1.2控制寄存器TCON

 对于TCON寄存器,高4位是定时器位TF1,TR1是定时器1;TF0,TR0是定时器0;控制定时器启动和中断申请。

低4位,在上文中使用过,用来控制外部中断0和外部中断1的触发方式。

TF1、TF0的操作,都是硬件自动操作的,不用我们操作什么。

2使用定时器步骤:

1)对TMOD赋值,确定T0和T1的工作方式。

2)计算初值,并将其写入TH0、TL0或TH1、TL1.

3)中断方式时,则对EA赋值,开放定时器中断。

4)使TR0或TR1置位,启动定时/计数器定时或计数。

5)写中断服务程序

中断使能位ET0 = 1及中断号1参见本文

//功能:数码管每隔1s,数字加1
unsigned char kk,num;
unsigned char code smg_du[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//0-9
void main()
{
    TMOD = 0x01;//定时器0 工作方式1
    TH0 = (65536-5000)/256; //计算初值//50ms
    TL0 = (65536-5000)%256;
    EA = 1;//打开总中断开关
    ET0 = 1;//打开定时器0中断
    TR0 = 1;//启动定时器
    while(1)
    {
        if(kk == 20)//1s
        {
            kk =0;
            P1 = smg_du[num];
            num++;
            if(num==10)
            num = 0;
        }
        
    }
}
void timer0() interrupt 1    //每次50ms,共20次,总计1s
{
    //50ms后,高8位,低8位全都进位了,都为0,所以需要重新设定初值
    TH0 = (65536-5000)/256; //存放整数个256//方式1需要先装载初值//8位即逢256进1
    TL0 = (65536-5000)%256;//存放不够256的值
    kk++;
}

总结:

方式1情形下,写入初值后,启动定时器,1us加一个数,加到65536,THx、TLx溢出,使TFx置1,触发CPU中断,执行中断函数,TFx置0;

不受外部中断影响--->GATE=0;定时模式---->C/T = 0;   方式1----->01;------------>TMOD = 0x01;//0000 0001

在此过程中,我们并没有在P3^4引脚上接外界电路(即保持计时模式)

 

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值