概念

所谓中断就是:
做事:
在做A事情的时候,被打断去做B事情,做完B事情之后回来继续做A事情。
程序:
在执行A程序的时候,打断转而执行B程序,完成后返回继续执行A程序。

简而言之,就是这样:


中断源

52单片机一共有6个中断源,它们分别是:

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

6个中断源中,其默认的中断级别如下:

中断源默认中断级别序号(C语言用)
INT0-外部中断0最高0
T0-定时器/计数器0中断21
INT1-外部中断132
T1-定时器/计数器1中断43
TI/RI-串行口中断54
T2-定时器/计数器2中断最低5

51单片机中断相关寄存器

中断允许寄存器_IE

位序号D7D6D5D4D3D2D1D0
位符号EA--ET2ESET1EX1ET0EX0
位地址AFH--ADHACHABHAAHA9HA8H

EA = 1 开全局中断
ET2 = 1 打开T2中断(注:仅52有T2中断)
ES = 1 打开串行口中断
ET1 = 1 打开外部中断1
EX0 = 1 打开外部中断0

中断优先级寄存器_IP

位序号D7D6D5D4D3D2D1D0
位符号------PSPT1PX1PT0PX0
位地址------BCHBBHBAHB9HB8H

PS = 1 串行口中断定义为最高优先级
PT1 = 1 定时器/计数器1中断定义为最高优先级
PX1 = 1 外部中断1中断定义为最高优先级
PT0 = 1 定时器/计数器0中断定义为最高优先级
PX0 = 1 外部中断0中断定义为最高优先级

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

位序号D7D6D5D4D3D2D1D0
位符号GATEC/TM1M0GATEC/TM1M0

其中D7-D4控制定时器/计数器1,D3-D0控制定时器/计数器0

GATE 门控位

C/T 模式选择;计数器方式:C/T = 1;定时器模式:C/T = 0

M0M1 工作方式选择

定时器/计数器工作方式

M1M0工作方式
00方式0,为13位定时器/计数器
01方式1,为16位定时器/计数器
10方式28位初值自动重装的8为定时器/计数器
11方式3,仅使用于T0,分成两个8位计数器,T1停止计数

定时器/计数器控制寄存器_TCON

位序号D7D6D5D4D3D2D1D0
位符号TF1TR1TF0TR0IE1IT1IE0IT0
位地址8FH8EH8DH8CH8BH8AH89H88H

TF1 定时器1溢出标志位:当定时器1计数满时,有硬件置位,并申请中断,进入中断后,由硬件自动清零。
TR1 = 1 启动定时器1
TF0 定时器0溢出标志,同TF1
TR0 = 1 启动定时器0
IE1 IT1 = 0时,电平触发,INT1脚为低时置1.IT1 = 1时,跳边沿触发,第一个机器周期采样INT1为低时IE1
IT1=0 电平触发方式,引脚INTI1上低电平有效
IT1=1 跳变沿触发方式,引脚INTI1上的电平从高到低的负跳变沿有效
IE0 外部中断0请求标志,同IE1
IT0 外部中断0触发方式选择位同IT1

定时器初始化过程

通常定时器初始化过程如下:

  • TMOD赋值,以确定T0T1的工作方式
  • 计算初值,并将初值写入TH0TL0TH1TL1
  • 中断方式时,则对IE赋值,开放中断
  • 使TR0或者TR1置位,启动定时器/计数器定时或者计数

程序:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
//定时器0工作方式1
TMOD=0X01;            //定时器0工作方式1(M1M0为01)
TH0=(65536-45872)/256;   //装初值,11.0592MHz晶振定时50ms,数为45872
TL0=(65536-45872)%6;
EA=1;                //开总中断
ET0=1;               //开定时器0中断
TR0=1;               //启动定时器0
while(1){

};            //程序停止在此处等待中断发生

//定时器0工作方式0
TMOD=0X00;            //定时器0工作方式0(M1M0为00)
TH0=(8192-4607)/32;   //装初值
TL0=(8192-4607)2;
EA=1;                //开总中断
ET0=1;               //开定时器0中断
TR0=1;               //启动定时器0
while(1){

};            //程序停止在此处等待中断发生

/*备注:(8192-4607)/32  对32求模是因为定时器方式0为13位计数器,
*计数时只用了TL0的低五位。
*五位最多装在32个数,再加1便会进位。与16为计数器装在256个数不同。因此此处对32求模。
*/

//定时器0工作方式2
TMOD=0X02;            //定时器0工作方式0(M1M0为02)
TH0=6;   //装初值
TL0=6;
EA=1;                //开总中断
ET0=1;               //开定时器0中断
TR0=1;               //启动定时器0
while(1){

};            //程序停止在此处等待中断发生

//定时器0工作方式3
TMOD=0X03;            //定时器0工作方式0(M1M0为03)
TH0=6;   //装初值
TL0=6;
EA=1;                //开总中断
ET0=1;               //开定时器0中断
ET1=1;               //开定时器1中断
TR0=1;               //启动定时器0
TR1=1;               //启动定时器1
while(1){

};            //程序停止在此处等待中断发生

/*注:TL0占用定时器T1的中断请求标志,因此为了避免冲突,设计程序时,T0的方式3不可用在 *有中断的场合。
*/

/*中断服务函数的写法:*/
void T0_time() interrupt 1  //定时器0中断
{

}

void T1_time() interrupt 3 //定时器1中断
{

}

定时器T2的介绍

定时器T2为16位的定时器/计数器
通过设置特殊功能寄存器_T2CONC/T2位,可以将其设定为定时器或者计数器
通过T2CON中的工作模式选择位,可以将定时器2设置为三种工作模式:捕获、自动重装载、波特率发生器。
注:捕获:捕捉某一瞬间的值,通常用他来测量外部某个脉冲的宽度或周期,使用捕获功能可以非常准确地测试脉冲宽度和周期

定时器2控制寄存器_T2CON

位序号D7D6D5D4D3D2D1D0
位符号TF2EXF2RCLKTCLKEXEN2TR2C/T2CP/RL2

TF2-定时器2溢出标志位

定时器2溢出时置位,必须由软件清零,当RCLK=1TCLK=1时,TF2将不会置位。

EXF2-定时器2外部标志位

EXEN2=1T2EX(单片机P1.1口)的负跳变产生捕获或重装时,EXF2置位。定时器2中断使能时,EXF2=1将使CPU进入定时器2的中断服务程序。EXF2必须用软件清零。在递增(递减)计数模式(DCEN=1),EXF2不会引起中断。

RCLK-接收时钟标志

RCLK=1时,定时器2的溢出脉冲作为串行口模式1或模式3的接收时钟,
RCLK=0时,将定时器1的溢出脉冲作为接收时钟。

TCLK-发送时钟标志

TCLK=1时,定时器2的溢出脉冲作为串行口模式1或模式3的发送时钟,
TCLK=0时,将定时器1的溢出脉冲作为发送时钟。

EXEN2-定时器2外部使能标志

EXEN2=1且定时器2未作为串行口时钟时,允许T2EX的负跳变产生捕获获重装,
EXEN2=0时,T2EX的跳变对定时器2无效

TR2-定时器2启动/停止控制位

置1启动定时器,置零停止定时器2

C/T2-T2的定时器/计数器选择位

C/T2=1,外部事件计数器(下降沿触发)
C/T2=0,内部定时器

CP/RL2-捕获重装标志

CP/RL2=1EXEN2=1T2EX的负跳变产生捕获
CP/RL2=0EXEN2=0,定时器2溢出或T2EX的负跳变都可是定时器自动重装
RCLK=1TCLK=1时,该位无效且定时器强制为溢出时自动重装。

这个寄存器对定时器/计数器2的模式设置如下表所示:

定时器/计数器2的三种工作模式:

RCLK+TCLKCP/RL2TR2模式
00116位自动重装
01116位捕获`
1x1波特率发生器
xx0关闭

定时器2模式控制寄存器_T2MOD

这个寄存器用来设定定时器2自动重装模式的递增或递减模式,字节地址为C9H,该寄存器不可位寻址。单片机复位时T2MOD全部被清0,这个寄存器的定义如下表所示:

位序号D7D6D5D4D3D2D1D0
位符号------------T2OEDCEN

T2OE 定时器2输出使能位
DCEN 向下计数使能位