首页 > 代码库 > 51单片机中断机制(定时器/计数器)

51单片机中断机制(定时器/计数器)

单片机中断简介

52单片机一共有6个中断源,它们的符号,名称以及各产生的条件分别如下:

  1. INT0 - 外部中断0,由P3.2端口线引入,低电平或下降沿引起
  2. INT1 - 外部中断1,由P3.3端口线引入,低电平或下降沿引起
  3. T0    - 定时器/计数器0中断, 由T0计数器计满回零引起
  4. T1    - 定时器/计数器1中断, 由T1计数器计满回零引起
  5. T2    - 定时器/计数器2中断, 由T2计数器计满回零引起
  6. TI/RI - 串行口中断,串行端口完成一帧字符发送/接收后引起

其中T2是52单片机特有的。

技术分享

中断允许寄存器IE

技术分享

技术分享

 

中断优先级寄存器IP

 技术分享

 

定时器中断

51单片机内部共有两个16位可编程的定时器/计数器,即定时器T0和定时器T1

52单片机内部多一个T2定时器/计数器

 

它们既有定时功能,也有计数功能。可通过设置与它们相关的特殊功能寄存器选择启用定时功能还是计数功能。

这个定时器系统是单片机内部一个独立的硬件部分,它与CPU和晶振通过内部某些控制线连接并相互作用,CPU一旦设置开启定时功能后,定时器便在晶振的作用下自动开始计时,但定时器的计数器计满后,会产生中断。

 

定时器/计数器的实质是加1计数器(16位), 由高8位和低8位两个寄存器组成,

TMOD:定时器/计数器的工作方式寄存器,确定工作方式和功能。

TCON:控制寄存器,控制T0,T1的启动和停止及设置溢出标志。

技术分享

 

TMOD:定时器/计数器工作方式寄存器

技术分享

技术分享

 

 TCON:定时器/计数器控制寄存器

       技术分享

技术分享

技术分享

 

 每个定时器有4种工作方式,可通过设置TMOD寄存器中的M1和M0来进行工作方式选择。

方式1的技术位数是16bit,对T0来说, TL0寄存器作为低8bit,TH0寄存器作为高8bit,组成了16bit加1计数器,逻辑结构框图如下

技术分享

 

技术分享

 

如何计算定时器的初值

技术分享

技术分享

 

 中断服务程序的写法

技术分享

技术分享

 

示例

#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int

sbit led1 = P0^0;
uchar num = 0;

//主程序
void main()
{
    TMOD = 0x01;
    TH0 = (65536 - 45872) / 256;    // 设置定时器0为工作方式1(M1M0为01)
    TL0 = (65536 - 45872) % 256;    // 装初值11.0592M晶振定时50ms数位45872
    EA = 1;                            // 开总中断
    ET0 = 1;                        // 开定时器0中断
    TR0 = 1;                        // 启动定时器0
    while(1)
    {
        if (num == 20)
        {
            num = 0;
            led1 = ~led1;
        }
    }
}


void T0_time() interrupt 1
{
    TH0 = (65536 - 45872) / 256;
    TL0 = (65536 - 45872) % 256;
    num++;
}

 

51单片机中断机制(定时器/计数器)