一、中断的概念
中断响应过程
中断系统:实现中断的硬件逻辑和实现中断功能的指令统称为中断系统。
中断源:引起中断的事件称为中断源,实现中断功能的处理程序称为中断服务程序。51单片机有5各中断源。如表所示:
符号 | 名称 | 中断引原因 | 中断信号 |
INT0 | 外部中断0 | P3.2引脚低电平或下降沿信号 | 0 |
T0 | 定时器/计数器0中断 | 定时/计数器0计数回0溢出 | 1 |
INT1 | 外部中断1 | P3.3引脚低电平或下降沿信号 | 2 |
T1 | 定时器/计数器1中断 | 定时/计数器1计数回0溢出 | 3 |
TI/RI | 串口中断 | 串行端口完成一帧字符的发送/接受引起 | 4 |
二、中断优先级和中断嵌套
当单片机正在执行主程序时,如果同时发生了几个中断请求,单片机会响应哪一个中断请求呢?如果单片机正在执行某个中断请求服务程序的过程中,又发生了另一个中断请求,单片机是立即响应还是不响应呢?这取决于单片机内部的一个特殊功能寄存器——中断优先级寄存器的设置情况。51单片机默认中断优先级如下图表所示:
中断源 | 中断标志 | 中断服务程序入口 | 优先级顺序 |
外部中断0(INT0) | IE0 | 0003H | 高 |
定时/计数器0(T0) | TF0 | 000BH | |
外部中断1(INT1) | IE1 | 0013H | |
定时/计数器1(T1) | TF1 | 001BH | |
串行口 | RI或TI | 0023H | 低 |
所谓中断嵌套,就是如果单片机正在处理一个中断程序,又有另外一个级别高的中断请求发生,则单片机会停止当前的中断请求转而去执行级别较高的中断程序,执行完毕后再返回到刚才已经停止的中断点处继续执行,执行完毕后在返回到主程序的断点处继续执行。中断嵌套的流程图如下图所示:
中断嵌套流程图
三、应用中断需要设置的4个寄存器
1.中断允许寄存器IE
CPU对中断源是开放或屏蔽,由片内的中断允许寄存器IE控制。IE在特殊功能寄存器中,字节地址为A8H,位从低到高分别为A8H~AFH,该寄存器可以进行位寻址。单片机复位时IE的各个位全部被清0。
位序号 | 位符号 | 位地址 | 位符号的意义 |
D7 | EA=1 | AFH | EA=0时,屏蔽所有的中断请求,EA=1时,CPU开放中断,但5个中断源还要由IE的第5位对各个控制位的状态进行中断允许控制。 |
D6 | - | - | |
D5 | - | - | |
D4 | ES | ACH | 串口中断允许位。当ES=1时,开启中断,当ES=0时,关闭中断 |
D3 | ET1 | ABH | 定时/计数器1中断允许位。ET1=1时,开启中断,ET1=0时,关闭中断。 |
D2 | EX1 | AAH | 外部中断1的中断允许位。当EX1=1时,开启外部中断1;EX1=0时关闭外部中断1 |
D1 | ET0 | A9H | 定时/计数器0中断允许位。ET1=1时,开启中断,ET1=0时,关闭中断。 |
D0 | EX0 | A8H | 外部中断0的中断允许位。当EX1=1时,开启外部中断0;EX1=0时关闭外部中断0 |
2.中断控制寄存器TCON
TCON在特殊寄存器中,字节地址为88H,位地址从低到高为88H~8FH,可以进行位寻址。该寄存器用于控制定时器/计数器的开始、停止、标志定时器/计数器的溢出和中断情况,还可以对外部中断进行设置。单片机复位时TCON全部清0。
位序号 | 位符号 | 位地址 | 位符号的意义 |
D7 | TF1 | 8FH | 定时器T1中断请求标志位。当定时器1计满溢出时,由硬件自动将此位置1,进入中断服务程序后由硬件自动清0。 |
D6 | TR1 | 8EH | 定时器1的运行控制位。当TMOD高4位中的GATE=1时,编程时将此位置1,且INT1=1时,才能启动T1。当TMOD高4位中的GATE=0时,编程时将该位置1,启动T1,置0时关闭T1 |
D5 | TF0 | 8DH | 定时器T0的中断请求标志位。操作方法同TF1 |
D4 | TR0 | 8CH | 定时器0的运行控制位。操作方法同TR1 |
D3 | IE1 | 8BH | 外部中断1的请求位。有中断请求置1,没有或中断程序执行完毕硬件自动清0 |
D2 | IT1 | 8AH | 外部中断1触发方式选择位。当IT1=0时,为电平触发方式,即每个机器周期的S5P2采样INT1脚(即P3.3脚),若为低电平,则产生中断请求,IE1由硬件置1,否则IE1置0; 当IT1=1时,为下降沿触发方式,即在单片机采样INT1脚(即P3.3脚)的电平由高变低时,产生中断请求,IE1=1,否则IE1清0 |
D1 | IE0 | 89H | 外部中断0请求标志位,操作方法同IE1 |
D0 | IT0 | 88H | 外部中断0的触发方式选择位,操作方法同IT1 |
3.定时器/计数器工作方式寄存器TMOD
TMOD在单片机内部的特殊功能寄存器中,字节地址为89H,不能位寻址(即编程时不能单独操作各个位,只能采取字节操作)。该寄存器用来设定定时器的工作方式及功能选择。
位序号 | 位符号 | 位符号的意义 | |
高4位用于设置T1 | D7 | GATE | 门控制位。若GATE=0,则只要在编程时将TCON中的TR0或TR1的值置1,就可以启动T0/T1;若GATE=1,则需要将TR0或TR1置为1,同时还需要将外部中断引脚(INT0或INT1)也置为高电平,才能启动定时器/计数器T0/T1 |
D6 | C/〒 | 定时器/计数器模式选择位。当C位1时,为计数模式,为0时,为定时模式 | |
D5 | M1 | 工作方式选择位。T0和T1都有三种工作方式: M1=0且M0=0,为方式0,即13定时器/计数器 M1=0且M0=1,为方式1,即16定时器/计数器 M1=1且M0=0,为方式2,即8位初始值自动重装的8定时器/计数器 | |
D4 | M0 | ||
低4位用于设置T0 | D3 | GATE | 同高四位 |
D2 | C/〒 | 同高四位 | |
D1 | M1 | 工作方式选择位。T0和T1都有4种工作方式: M1=0且M0=0,为方式0,即13定时器/计数器 M1=0且M0=1,为方式1,即16定时器/计数器 M1=1且M0=0,为方式2,即8位初始值自动重装的8定时器/计数器 M1=1且M0=1,为方式3,仅适用于T0,分成俩个8位计数器,T1停止 | |
D0 | M0 |
4.中断优先级寄存器IP
中断优先级寄存器IP在特殊功能寄存器中,字节地址为B8H,位地址从低位到高位分别为B8H~BFH,该寄存器可以进行位寻址。IP用于设定各个中断源属于两级中断中的哪一级。一般情况下采用默认设置。
位序号 | 位符号 | 位地址 | 位符号意义 |
D7 | - | AFH | |
D6 | - | - | |
D5 | - | - | |
D4 | PS | BCH | 串口的中断优先级控制位。PS=1时,串口定义为高级中断;PS=0时,为低级中断 |
D3 | PT1 | BBH | 定时器/计数器1中断优先级控制位。1高,0低 |
D2 | PX1 | BAH | 外部中断1优先级控制位。1高,0低 |
D1 | PT0 | B9H | 定时器/计数器0中断优先级控制位。1高,0低 |
D0 | PX0 | B8H | 外部中断0优先级控制位。1高,0低 |
四、定时器T0和T1的工作方式1
1.时钟周期
时钟周期就是时钟频率的倒数。
2.机器周期
机器周期为单片机的基本操作周期,在一个基本操作周期内单片机可完成一个基本的操作(如存储器的读写、取指令等)。机器周期为时钟周期的12倍。
3.指令周期
指令周期指CPU执行一条指令所需的时间,一般一个指令周期为1~4个机器周期。
4.定时器的工作方式1工作详解
工作方式1的计数位是16位。以T0为例进行说明(T0和T1的工作方式1是一样的)。T0由两个寄存器TL0和TH0构成,TL0为低8位,TH0为高8位。
启动T0后,TL便在机器周期的作用下从0000 0000开始计数(计数依次为:0000 0001-0000 0010-0000 0011-....)当TL0记满也就到1111 1111(即十进制255)时,再计1个数计到256,此时TL0清0,同时向TH0进一位;当TH0也计满(此时TH0、TL0内数到1111 1111,即65535),再计1个数就溢出,产生中断请求,进入中断服务处理程序,同时TF0(中断标志位)由硬件自动置1。
可以看出,TH0中每增加一“1”,就相当于计了256个数。这是再方式1给定时器装初始值时,TH0中装入的初始值对256取模、TL0中装入的初值对256取余的原因。
中断系统的使用https://mp.csdn.net/mp_blog/creation/editor/136484016