文章目录
51单片机中断学习总结
51单片机包含:
2个外部中断(外部中断0,外部中断1)
2个内部定时/计数器(T0,T1)
1个串行口中断
52比51多一个内部定时/计数器(T2)
单片机中断级别
| 中断源 | 默认中断级别 | 序号(C语言用) |
|---|---|---|
| INT0—外部中断0 | 最高 | 0 |
| T0—定时器/计数器0中断 | 第2 | 1 |
| INT1—外部中断1 | 第3 | 2 |
| T1----定时器/计数器1中断 | 第4 | 3 |
| TX/RX—串行口中断 | 第5 | 4 |
| T2—定时器/计数器2中断 | 最低 | 5} |

中断:单片机正常执行程序时,接受到中断,停止当前的正常工作去处理突发情况,处理完成之后,在回到原来的地方执行程序。
可能有一点抽象,我们来举个生活中的列子:
例如你在房间玩电脑游戏,突然你的家人来喊你出来吃饭,吃完饭后你有回去继续完电脑游戏了,这种就是中断,然且还是外部中断(中断信号源来自与外界)。
那么什么是内部中断?
例如你最近总感觉完游戏时间长了眼睛难受,你给自己定了一个时间,玩一个小时休息一下。这种就是内部中断,或者叫做内部定时/计数。
外部中断
外部中断是由外部信号触发,外部中断0和外部中断1是由单片机P3.2和P3.3引脚输入有效的中断请求信号。
外部中断的触发
触发方式分为两种:电平触发(低电平)和边沿触发(下降沿),触发方式的寄存位在单片机的寄存器TCON的低四位中:
| D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | TCON |
|---|---|---|---|---|---|---|---|---|
| TF1 | TR1 | TF0 | TR0 | IE1 | IT1 | IE0 | IT0 |
IT0 :外部中断0触发方式控制位:
IT0 = 0 低电平触发 IT0 = 1 下降沿触发
IE0 :外部中断0请求标示位
IT1 :外部中断0触发方式控制位:
IT1 = 0 低电平触发 IT1 = 1 下降沿触发
IE1 :外部中断1请求标示位
外部中断的控制
外部中断的使能,简单理解就是允许外部中断接受到外部信号源。
51单片机通过一个IE寄存器控制:
| D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | IE |
|---|---|---|---|---|---|---|---|---|
| EA | — | ET2 | ES | ET1 | EX1 | ET0 | EX0 |
EA:单片机cpu中断允许位,当EA = 1时,cpu中断允许。当EA =0时,cpu屏蔽所以中断。
这个有点像我们家里的电源总开关,总开关打开,其他开关才能正常使用。
EX0:外部中断0的中断控制位,EX0 = 1,外部中断0允许,EX0 = 0,屏蔽外部中断0。
EX1:外部中断1的中断控制位,EX1 = 1,外部中断1允许,EX1 = 0,屏蔽外部中断1。
中断优先级控制:设置每一个中断的优先级为高优先级或者低优先级,从而实现中断嵌套。
寄存器IP:
| D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | IP |
|---|---|---|---|---|---|---|---|---|
| — | — | PT2 | PS | PT1 | PX1 | PT0 | PX0 |
PX0:外部中断0的优先级控制位,PX0 = 1,高优先级,EX0 = 0,低优先级。
PX1:外部中断1的优先级控制位,PX1 = 1,高优先级,EX1 = 0,低优先级。
外部中断的处理过程
1、初始化,确定使用的外部中断,触发方式,允许中断
例如:使用外部中断0,采用电平触发的方式
IT0 = 0; //采用电平触发的方式
EA = 1; //cpu中断允许
EX0 = 1; //外部中断0允许
2、等待外部信号源的产生(p3.2,p3.3接口连接外部设备)
3、中断响应,执行中断函数,执行完返回原来的位置
定时/计数器
定时/计数器的工作原理
每一个定时/计数器有一个计数时钟信号,计数控制开关,N位计数器,计数溢出标志位组成。
当计数时钟信号(脉冲)产生的时间确定,那么对信号计数,即可实现定时,为了更好说明,这里也举个例子:我想大家知道中国国代的一种记录时间的方法:使用水滴,因为发现每一滴水滴滴下的时间时差不多,最后总计滴下的水的多少从而知道过了多长时间,当然这种方法用于记录时间存在误差。
但单片机内置晶振,例如12MHZ的晶振,它的周期等于1/12000000。如果是12分频,单片机的时钟周期T 等于12*(1/1200000) = 1us
所以假设是16位计数器,初始a = 100,那么定时t
t = T *(2^N-a) = T *(2^16-100) us
定时/计数器的工作方式设置(TMOD)
| D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | TMOD |
|---|---|---|---|---|---|---|---|---|
| GATE | C/T | M1 | M0 | GATE | C/T | M1 | M0 |
M1 M0:工作方式设置位,定时/计数器四种工作方式:
| M1M0 | 工作方式 说明 |
|---|---|
| 0 0 | 方式0 13位定时/计数器 |
| 0 1 | 方式1 16位定时/计数器 |
| 1 0 | 方式2 8位自动装载定时/计数器 |
| 1 1 | 方式3 T0分成两个独立的定时/计数器,T1停止计数 |
0 0 方式0 13位定时/计数器
0 1 方式1 16位定时/计数器
1 0 方式2 8位自动装载定时/计数器
1 1 方式3 T0分成两个独立的定时/计数器,T1停止计数
C/T :定时/计数模式选择位
C/T = 0为定时模式
C/T = 1为计数模式
GATE:门控位
GATE = 1 启动定时/计数器受外部中断引脚(P3.2,P3.3)上电平影响。必须为高电平
GATE = 0 启动定时/计数器不受外部引脚影响
定时/计数器的启动和中断申请控制(TCON)
| D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | TCON |
|---|---|---|---|---|---|---|---|---|
| TF1 | TR1 | TF0 | TR0 | IE1 | IT1 | IE0 | IT0 |
高四位为定时/计数器的计数启动和溢出标志位。
TR0:定时/计数器0的运行控制位,当GATE= 0时,TR0 = 1 启动T0;TR0 = 0 停止T0。
TF0:定时/计数器0的溢出标志位,溢出时TF0 = 1,同时计数器清零。
TR1:定时/计数器1的运行控制位,当GATE= 0时,TR1 = 1 启动T1;TR1 = 0 停止T1。
TF1:定时/计数器1的溢出标志位,溢出时TF1 = 1,同时计数器清零。
四种工作方式
方式0:M1M0 = 00
13位定时/计数器,由TL0的低5位和TH0的8位组成。TL0,TH0用于设置处置a
TL0溢出向TH0进位,TH0溢出,置位TCON中的TF0标志,向CPU发出中断请求。计数初值计算的公式为:
t = T *(2^13-a) T:单片机的时钟周期,a为初值。
方式1:M1M0 = 01
16位定时/计数器,由TL0的8位和TH0的8位组成。TL0,TH0用于设置处置a
TL0溢出向TH0进位,TH0溢出,置位TCON中的TF0标志,向CPU发出中断请求。计数初值计算的公式为:
t = T *(2^16-a) T:单片机的时钟周期,a为初值。
方式2:M1M0 = 10
8位自动装载定时/计数器。
t = T *(2^8-a) T:单片机的时钟周期,a为初值。

方式3:M1M0 = 11
T0分成两个独立的定时/计数器,T1停止计数

定时/计数器的初始化
1、确定TMOD(M0,M1),确定T0/T1的工作方式
2、计算初值,设置TH0,TL0或者TH1,TL1
3、打开定时器允许。例如定时器0:ET0=1
4、打开总中断:EA=1
5、打开定时器: TR0=1;