51单片机中断的相关理解
概念
所谓中断就是:
做事:
在做A事情的时候,被打断去做B事情,做完B事情之后回来继续做A事情。
程序:
在执行A程序的时候,打断转而执行B程序,完成后返回继续执行A程序。
简而言之,就是这样:
中断源
52单片机一共有6个中断源,它们分别是:
符号 | 名称 | 产生条件 |
---|---|---|
INT0 | 外部中断0 | 由P3.2 端口线引入,低电平或下降沿引起 |
INT1 | 外部中断1 | 由P3.3 端口线引入,低电平或下降沿引起 |
T0 | 定时器/计数器0 中断 | 由T0 计数器计满回零引起 |
T1 | 定时器/计数器1 中断 | 由T1 计数器计满回零引起 |
T2 | 定时器/计数器2 中断 | 由T2 计数器计满回零引起 |
TI/RI | 串行口中断 | 串行端口完成一帧字符发送/接收后引起 |
6个中断源中,其默认的中断级别如下:
中断源 | 默认中断级别 | 序号(C语言用) |
---|---|---|
INT0 -外部中断0 | 最高 | 0 |
T0 -定时器/计数器0 中断 | 第2 | 1 |
INT1 -外部中断1 | 第3 | 2 |
T1 -定时器/计数器1 中断 | 第4 | 3 |
TI/RI -串行口中断 | 第5 | 4 |
T2 -定时器/计数器2 中断 | 最低 | 5 |
51单片机中断相关寄存器
中断允许寄存器_IE
位序号 | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
---|---|---|---|---|---|---|---|---|
位符号 | EA | -- | ET2 | ES | ET1 | EX1 | ET0 | EX0 |
位地址 | AFH | -- | ADH | ACH | ABH | AAH | A9H | A8H |
EA = 1
开全局中断
ET2 = 1
打开T2
中断(注:仅52有T2
中断)
ES = 1
打开串行口中断
ET1 = 1
打开外部中断1
EX0 = 1
打开外部中断0
中断优先级寄存器_IP
位序号 | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
---|---|---|---|---|---|---|---|---|
位符号 | -- | -- | -- | PS | PT1 | PX1 | PT0 | PX0 |
位地址 | -- | -- | -- | BCH | BBH | BAH | B9H | B8H |
PS = 1
串行口中断定义为最高优先级
PT1 = 1
定时器/计数器1
中断定义为最高优先级
PX1 = 1
外部中断1
中断定义为最高优先级
PT0 = 1
定时器/计数器0
中断定义为最高优先级
PX0 = 1
外部中断0
中断定义为最高优先级
定时器/计数器工作方式寄存器_TMOD
位序号 | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
---|---|---|---|---|---|---|---|---|
位符号 | GATE | C/T | M1 | M0 | GATE | C/T | M1 | M0 |
其中D7
-D4
控制定时器/计数器1,D3
-D0
控制定时器/计数器0
GATE
门控位
C/T
模式选择;计数器方式:C/T = 1
;定时器模式:C/T = 0
M0M1
工作方式选择
定时器/计数器工作方式
M1 | M0 | 工作方式 |
---|---|---|
0 | 0 | 方式0 ,为13 位定时器/计数器 |
0 | 1 | 方式1 ,为16 位定时器/计数器 |
1 | 0 | 方式2 ,8 位初值自动重装的8 为定时器/计数器 |
1 | 1 | 方式3 ,仅使用于T0 ,分成两个8 位计数器,T1 停止计数 |
定时器/计数器控制寄存器_TCON
位序号 | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
---|---|---|---|---|---|---|---|---|
位符号 | TF1 | TR1 | TF0 | TR0 | IE1 | IT1 | IE0 | IT0 |
位地址 | 8FH | 8EH | 8DH | 8CH | 8BH | 8AH | 89H | 88H |
TF1
定时器1
溢出标志位:当定时器1
计数满时,有硬件置位,并申请中断,进入中断后,由硬件自动清零。
TR1 = 1
启动定时器1
TF0
定时器0溢出标志,同TF1
TR0 = 1
启动定时器0
IE1
IT1 = 0
时,电平触发,INT1
脚为低时置1
.IT1 = 1
时,跳边沿触发,第一个机器周期采样INT1
为低时IE
置1
IT1=0
电平触发方式,引脚INTI1
上低电平有效
IT1=1
跳变沿触发方式,引脚INTI1
上的电平从高到低的负跳变沿有效
IE0
外部中断0请求标志,同IE1
IT0
外部中断0触发方式选择位同IT1
定时器初始化过程
通常定时器初始化过程如下:
- 对
TMOD
赋值,以确定T0
和T1
的工作方式 - 计算初值,并将初值写入
TH0
、TL0
和TH1
、TL1
- 中断方式时,则对
IE
赋值,开放中断 - 使
TR0
或者TR1
置位,启动定时器/计数器定时或者计数
程序:
1 | //定时器0工作方式1 |
定时器T2的介绍
定时器T2为16
位的定时器/计数器
通过设置特殊功能寄存器_T2CON
的C/T2
位,可以将其设定为定时器或者计数器
通过T2CON
中的工作模式选择位,可以将定时器2
设置为三种工作模式:捕获、自动重装载、波特率发生器。
注:捕获:捕捉某一瞬间的值,通常用他来测量外部某个脉冲的宽度或周期,使用捕获功能可以非常准确地测试脉冲宽度和周期
定时器2控制寄存器_T2CON
位序号 | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
---|---|---|---|---|---|---|---|---|
位符号 | TF2 | EXF2 | RCLK | TCLK | EXEN2 | TR2 | C/T2 | CP/RL2 |
TF2
-定时器2溢出标志位
定时器2溢出时置位,必须由软件清零,当RCLK=1
或TCLK=1
时,TF2
将不会置位。
EXF2
-定时器2外部标志位
当EXEN2=1
且T2EX
(单片机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=1
且EXEN2=1
,T2EX
的负跳变产生捕获
CP/RL2=0
且EXEN2=0
,定时器2溢出或T2EX
的负跳变都可是定时器自动重装
当RCLK=1
或TCLK=1
时,该位无效且定时器强制为溢出时自动重装。
这个寄存器对定时器/计数器2的模式设置如下表所示:
定时器/计数器2的三种工作模式:
RCLK+TCLK | CP/RL2 | TR2 | 模式 |
---|---|---|---|
0 | 0 | 1 | 16 位自动重装 |
0 | 1 | 1 | 16 位捕获` |
1 | x | 1 | 波特率发生器 |
x | x | 0 | 关闭 |
定时器2模式控制寄存器_T2MOD
这个寄存器用来设定定时器2自动重装模式的递增或递减模式,字节地址为C9H
,该寄存器不可位寻址。单片机复位时T2MOD
全部被清0,这个寄存器的定义如下表所示:
位序号 | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
---|---|---|---|---|---|---|---|---|
位符号 | -- | -- | -- | -- | -- | -- | T2OE | DCEN |
T2OE
定时器2输出使能位
DCEN
向下计数使能位