51单片机中断学习总结一


51单片机中断学习总结

51单片机包含:
2个外部中断(外部中断0,外部中断1)
2个内部定时/计数器(T0,T1)
1个串行口中断
52比51多一个内部定时/计数器(T2)

单片机中断级别

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

在这里插入图片描述

中断:单片机正常执行程序时,接受到中断,停止当前的正常工作去处理突发情况,处理完成之后,在回到原来的地方执行程序。

可能有一点抽象,我们来举个生活中的列子:
例如你在房间玩电脑游戏,突然你的家人来喊你出来吃饭,吃完饭后你有回去继续完电脑游戏了,这种就是中断,然且还是外部中断(中断信号源来自与外界)。
那么什么是内部中断
例如你最近总感觉完游戏时间长了眼睛难受,你给自己定了一个时间,玩一个小时休息一下。这种就是内部中断,或者叫做内部定时/计数

外部中断

外部中断是由外部信号触发,外部中断0和外部中断1是由单片机P3.2和P3.3引脚输入有效的中断请求信号。

外部中断的触发

触发方式分为两种:电平触发(低电平)和边沿触发(下降沿),触发方式的寄存位在单片机的寄存器TCON的低四位中:

D7D6D5D4D3D2D1D0TCON
TF1TR1TF0TR0IE1IT1IE0IT0

IT0 :外部中断0触发方式控制位:
IT0 = 0 低电平触发 IT0 = 1 下降沿触发
IE0 :外部中断0请求标示位

IT1 :外部中断0触发方式控制位:
IT1 = 0 低电平触发 IT1 = 1 下降沿触发
IE1 :外部中断1请求标示位

外部中断的控制

外部中断的使能,简单理解就是允许外部中断接受到外部信号源。
51单片机通过一个IE寄存器控制:

D7D6D5D4D3D2D1D0IE
EAET2ESET1EX1ET0EX0

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:

D7D6D5D4D3D2D1D0IP
PT2PSPT1PX1PT0PX0

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)

D7D6D5D4D3D2D1D0TMOD
GATEC/TM1M0GATEC/TM1M0

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)

D7D6D5D4D3D2D1D0TCON
TF1TR1TF0TR0IE1IT1IE0IT0

高四位为定时/计数器的计数启动和溢出标志位。
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;


版权声明:本文为hcy17858508117原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。