中断是计算机在执行某一程序的过程中,由计算机系统内部或外部的某种原因而必须终止当前程序的运行,先去执行相应的处理程序,然后再返回继续执行原程序。而实现中断功能的软、硬件系统统称为中断系统。常情况下,一个程序中可能会有多个中断,优先级越高的中断优先执行。如果在一个中断的服务过程中,有一个优先级更高的中断插入,则当前中断暂停,前往执行优先级更高的中断。当优先级高的中断执行完毕后再返回继续执行低优先级的中断。
而能够触发中断的事件称为中断源,89C51单片机中共有5个中断源,两个外部中断(INT0、INT1)、两个定时器/计数器T0、T1的溢出中断(最常用的一种)、串行口的发送和接受中断(只占用一个中断源)。
中断查询次序(中断号)
中断号是系统分配给每个中断源的代号,以便识别和处理。
与中断有关的特殊功能寄存
与中断有关的特殊功能寄存器一共有4个:
1、定时/计数器控制寄存器(TCON)、
2、串行口控制寄存器(SCON)、
3、中断允许控制寄存器(IE)、
4、中断优先级控制寄存器(IP)
中断结构
这些中断寄存器就像开关一样控制着中断的开启以及设置优先级。
外部中断
从单片机外部引脚INT0和INT1输入中断请求信号的中断。
外部中断的触发方式有两种电平触发IT0 =0和跳变触发(边沿)IT0 = 1,可以通过定时/计数器控制寄存器TCON编程选择。
定时/计数器控制寄存器 TCON
控制定时/计数器T0和T1的溢出中断
控制外部中断的触发方式.,由IT0和IT1控制
锁存外部中断请求标志位
串行口控制寄存器 SCON
串行口的接收发送数据中断请求标志位(RI和TI)
TI:串行口发送中断请求标志位。CPU每发送一帧数据,硬件置位1(TI=1),但是中断被响应时,需要在中断服务程序中通过软件对TI清零
RI:串行口接受中断请求标志位。每接收一帧数据,硬件置位1(TI=1),但是中断被响应时,一样需要在中断服务程序中通过软件对TI清零
串行口中断不能由硬件自动清除中断请求标志位,需要用户通过软件进行控制清零。
中断允许控制寄存器 IE
IE是控制中断的开关,通过对IE的清0和置1操作来控制中断的屏蔽和开放。
中断允许控制寄存器IE对中断的开放与屏蔽实现两级控制,存在一个总的中断控制位EA
中断优先级控制寄存器 IP
PS :串行口中断优先级控制位。PS=1,串行口中断为高优先级;PS=0,为低优先级。
PT1 :定时/计数器1中断优先级控制位。当PT1=0时,T1溢出中断为低优先级;当PT1=1时,T1溢出中断为高优先级。
PT0 :定时/计数器0中断优先级控制位。当PT0=0时,T0溢出中断为低优先级;当PT0=1时,T0溢出中断为高优先级。
PX1 :外部中断1的中断优先级控制位。当PX1=0时,外部中断1为低优先级;当PX1=1时,外部中断1为高优先级。
PX0 :外部中断0的中断优先级控制位。当PX0=0时,外部中断0为低优先级;当PX0=1时,外部中断0为高优先级。
同级内第二优先级的次序:
外部中断0 > T0溢出中断 > 外部中断1 > T1溢出中断 > 串行口中断
实例:外部中断控制LED亮灭
#include<reg52.h>
void Delay(int xms) //@12.000MHz
{
unsigned char data i, j;
while(xms--)
{
i = 2;
j = 239;
do
{
while (--j);
} while (--i);
}
}
void init() // 中断的初始化
{
EA = 1; // 打开总中断控制
EX0 = 1; // 允许外部中断0
IT0 = 1; // 外部中断为下降沿触发方式
}
void main()
{
init();
while(1)
{
P2=0;//LED亮
}
}
void int0() interrupt 0 // 中断服务程序
{
P2=0xff;//LED熄灭
Delay(1000);
}
看不懂,好复杂