您的位置:首页 > 其它

51单片机的中断系统

2017-04-01 21:01 316 查看
一、单片机中断系统

1、基本特点

有5个固定的中断源,其中3个在片内,2个在片外,它们在程序存储器ROM中都分别有各自固定的中断入口地址,由此进入中断服务程序(ISR);这5个固定的中断源都分别有两级中断优先级:高优先级和低优先级;可形成中断嵌套;有2个特殊功能寄存器用于中断控制的编程(IE和IP);对于8052单片机来说,增加了第三个中断源:定时器/计数器T2的中断;

外部中断源:

(1)、外部中断0:INT0,由P3.2(12号引脚)口引入,低电平或下降沿触发;

(2)、外部中断1:INT1,由P3.3(13号引脚)口引入,低电平或下降沿触发;

这两个外部中断的控制位锁存在定时器/计数器的工作状态控制寄存器TCON的低4位;

内部中断源:

(1)、定时器/计数器T0中断:由T0的计数寄存器TH0/TL0的值在溢出回0时触发;

(2)、定时器/计数器T1中断:由T1的计数寄存器TH1/TL1的值在溢出回0时触发;

(3)、串口中断RI/TI:串行口中断,由串行口在完成1帧字符的接收(RI)/发送(TI)时触发;

这三个内部中断源的控制位分别锁存在特殊功能寄存器TCON和SCON中;

2、中断系统的结构

如图:



二、中断控制寄存器

1、中断允许控制寄存器IE(A8H)

中断允许控制寄存器IE存储在特殊功能寄存器区,字节地址是A8H,位地址从低到高依次是A8H,A9H,AAH,ABH,ACH,ADH,AFH;

寄存器IE控制着CPU对中断源总的开放或禁止,以及对每个中断源的开放或禁止;

IE的格式如图:



2、中断优先级控制寄存器IP(B8H)

中断优先级控制寄存器IP存储在特殊功能寄存器区,字节地址是B8H,位地址从低到高依次是B8H,B9H,BAH,BBH,BCH,BDH,BEH,BFH;

IP用来锁存优先级的控制位,即:设定中断源属于两级中断中的哪一级;

(1)、中断优先级的响应:系统复位之后,IP的低5位全部被清0,并将所有中断源设置为低优先级中断;如果几个具有相同优先级的中断源同时向CPU申请中断,那么,哪一个中断源优先得到中断服务,这一点取决于这些中断源在CPU内部登记的排队序号(就是中断序号);CPU通过内部硬件查询登记的中断序号,按自然优先级逐个响应各个中断请求;中断源在CPU内部登记的中断序号是由硬件自动形成的,无需人工手动生成,其顺序如下:INT0-->T0-->INT1-->T1-->RI/TI;

IP的格式如图:



三、中断响应

1、响应过程:

下列任何一种情况存在时,中断申请将被封锁;

(1)、CPU当前正在执行一个同级或高一级的中断服务程序;

(2)、CPU当前正在执行的那条指令还没有执行完;

(3)、CPU当前正在执行的指令是RETI指令或这是对IE/IP寄存器进行读写操作的指令,执行这些指令之后,至少还要再执行一条指令才会响应中断;

2、中断入口地址:

中断得到响应后,自动清除中断请求标志(对于串口中断请求标志,要用软件来清0),由硬件自动将程序计数器PC的内容(断点地址)压入堆栈保护,然后将对应的中断矢量(中断入口地址)装入程序计数器PC, 使程序转到中断服务程序中执行并完成响应的中断服务;

各个中断源在程序存储器ROM中的中断入口地址和中断序号如下表所示:



四、C51中断程序

1、中断服务程序的格式:

返回值类型 中断函数名([参数表]) [模式] [重入] interrupt <中断序号n> [using m] //n∈[0,31],m∈[0,3],m和n不允许是表达式;

{

//中断处理函数的实现代码

}

对于中断服务程序来说,函数不能有返回值和参数,所以,返回值类型和参数类型均写成void;

Keil C51使用特定的编译器指令分配寄存器组;当前工作寄存器组由PSW中的RS1和RS0两位设置,两个位共有4个值[0,3],用using指定,;using关键字只能用于声明终端服务函数,它在中断服务函数入口处将当前寄存器组的值保存下来,并在中断服务函数中使用指定的寄存器组,在中断服务函数推出之前,恢复原寄存器组;

例如:

void isr_service(void) interrupt 4 using 2

{

//.....;

}

2、 编写中断服务函数时注意的事项:

A、若要在执行当前中断处理函数时禁止更高优先级的中断,可用软件方式先关闭CPU对中断的响应,在中断处理函数返回之前,再开放中断;

B、外部电平触发的中断信号不会被锁存.若在外部电平出现时被中断屏蔽,而在中断识别之前,电平消失,则它被完全忽略---中断处理本身不能锁存外部电平请求;

C、INT0、T0、INT1、T1的中断标志在CPU响应中断之后被自动清0,但是串口中断标志RI/TI和T2的中断标志TF2不会自动被清0,必须在软件中手工地清0,否则会立即产生重复中断,程序陷入死循环;对于串口中断,通常还要判断是RI还是TI中断;

D、为了提高中断响应的实时性,中断服务程序应尽量简短,并避免使用复杂的变量类型及算术运算;通常在中断服务程序中使用一些标志,由主程序或相应背景程序根据标志做响应的处理;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: