单片机的中断系统
5.1中断的概念
计算机在运行当前程序的过程中,若遇到紧急或突发事件,可以暂停当前程序的运行,转向处理该突发事件,处理完成后再从当前程序的间断处接着运行。
中断的嵌套: 中断服务过程中执行更高级别的中断服务称为中断函数的嵌套。
采用中断技术能够实现的功能:
1 . 分时操作:计算机的中断系统可使 CPU 与外设同时工作,分时为各外设提供服务。
2 . 实时处理 3. 故障处理。
5.2 中断控制系统
中断控制系统的结构:
中断源: 中断管理系统能够处理的突发事件。
/INT0 和 /INT1 都是以单片机特定引脚上的电平或脉冲事件作为中断状态的。统称外部中断。对于C语言来说 调用中断函数时不用中断向量,而要用到中断源相应的中断号。汇编语言用ROM中规定了5个特殊的ROM单元(中断向量)用于引导中断函数调用。
中断请求标志
当中断源的突发事件出现时,单片机中某些特殊功能寄存器的特殊标志位会被硬件方式自动修改,这些特殊标志位称为中断请求标志。程序运行过程中,CPU只需要定期查看中断标志是否为1,就可知道有无中断发生。0~3号中断各有一个中断标志位, 4号中断(串行口中断)有两个中断请求标志位(但公用一个中断号)。
中断源出现某种特定的信号时,相应的中断请求标志位就自动置1。
外部中断
[
/INT0 中断请求原理
IT0 = 0(低电平触发):若/INT0 为高电平,IE0硬件清零,/INT0 低电平 IE0硬件置 1;
IT0 = 1(下降沿触发):若/INT0 为正跳变脉冲,IE0硬件清零,/INT0 负跳变脉冲 IE0硬件置 1;
内部中断源(T0和T1)
当 T0 被充满溢出后,可向位寄存器 TF0 “ 进位 “,产生硬件置 1 的效果。TF0 在系统相应中断请求后才会被硬件请0,否则会一直保持溢出时的高电平状态。
内部中断源(TX/RX)
来自串口的 RXD 的一帧数据经过移位寄存器被送入 ” 接收SBUF ” 单元后,接受控制器 将使 位寄存器 RI 硬件置1.
同理,来自串口的 “发送 SBUF ” 单元的一帧数据经过输出门发送出去后,发送控制器 将使 位寄存器 TI 硬件置1。
与前四种中断不同的是响应中断后,TI、RI 都不会硬件清 0 ,而是需要软件方式清 0 ,
中断控制
用户对单片机中断系统的操作是通过控制寄存器实现的。80C51设置了4个控制寄存器,定时器控制寄存器TCON,串口控制寄存器SCON、中断允许控制寄存器 IE 、中断优先级控制寄存器 IP。
中断系统的组成
TCON寄存器 (88H)可位寻址
SCON寄存器(89H)可位寻址
TI 串行口发送中断标志位、RI串行口接收中断标志位。响应中断后,TI、RI 都不会硬件清 0 ,而是需要软件方式清 0 。
IE寄存器 (中断允许寄存器)0A8H 可位寻址
每一位的功能说明如下:
EA:允许/禁止全部中断。当EA=0,则禁止所有中断的响应;当EA=1,则打开全局中断控制。
EC:未讲
ET2:未讲
ES:串行口中|断允许/禁止位。当ES=1时允许,当ES=0时禁止。
ET1:定时器/计数器1中断允许/禁止位,当ET1=1时允许,当ET1=0时禁止。
EX1:外部中断1允许/禁止位,当EX1=1时允许,当EX1=0时禁止。
ETO:定时器/计数器0中断允许/禁止位,当ET0=1时允许,当ET0=0时禁止。
EXO:外部中断0中断允许/禁止位,当EX0=1时允许,当EX0=0时禁止。
对中断允许的软件控制可分为两级;由EA位的置位/复位实现对所有中断源请求的控制,当置EA=1 时,通过各允许位的置位/复位控制各中断的允许。
IP寄存器 中断优先级寄存器 B8H 可位寻址
PS:串行口中断优先级定义位,当PS=1时为优先级1,当PS=0时为优先级0。
PT1:定时器/计数器1中断优先级定义位,当PT1=1时为优先级1,当PT1=0时为优先级0。
PX1:/INT1中断优先级定义位,当PX1=1时为优先级1,当PX1=0时为优先级0。
PT0:定时器/计数器0中断优先级定义位,当PT0=1时为优先级1,当PT0=0时为优先级0。
PX0: /INT0中断优先级定义位,当PX0=1时为优先级1,当PX0=0时为优先级0
单片机中每个中断原都可以被设置为高优先级中断(=1)或 低优先级中断(=0)其中运行的低优先级中断函数可以被高优先级的中断申请所打断。(实现中断的嵌套),而运行的高优先级中断不能被低优先级中断请求打断。此外同优先级的中断申请不能打断正在执行的同优先级中断函数。
多个同级中断源同时发出中断申请时,按自然优先级响应中断(排队)。
5.3 中断处理过程
包括 中断请求、中断响应、中断服务、中断返回。
中断响应 :从CPU 发现中断 到开始执行中断的过程
响应的条件为:
1.有中断源发出中断申请。
2.中断允许为 EA = 1,开总中断。
3.申请中断的中断源的中断允许位 为 1 .
满足以上条件一般都会响应中断,除CPU正在执行更高优先级的中断,或其它特殊代码。中断相应会被阻止。
CPU响应中断后硬件会自动做如下工作:
1.中断优先级查询,对后来同级或低级的中断不理会。
2.保护断点,把程序计数器PC的内容压入堆栈保存。
3.清除 可清除 的中断标志位。
响应时间 所谓中断响应时间是指从查询请求标志位到转向区入口地址需的机器周期数。一般情况下外部中断响应时间都是大于 3个机器周期而小于 8个机器周期,在这两种极情况之间。当然,如果出现有同级或高中断正在响应服务需等待的时候那么间就无法计算了。一般应用情况下,中断响应的时间的长短通常无需考虑。
中断请求的撤除
CPU响应中断请求,转向中断服务程序执行,在其执行中断返回指令之前中断请求倍号必须 撤除,否则将可能再次引起中断而出错。
中断请求撤除的方式有三种:
(1) 单片机内部硬件自动复位:对于定时器/计数器T0、T1及采用边沿触发方式的外部中断请求, CPU在响应中断后,由内部硬件自动撤除中断请求:
(2) 应用软件淸除响应标志:对于串行口接收/发送中断请求, CPU响应中断后,内部无硬件自动复位RI、TI、必须在中断服务程序中淸除这些标志, 才能撤除中断;
(3) 既无软件淸除也无硬件撤除:对于采用电平触发方式的外部中断请求,CPU对引脚上的中断请求 信号既无控制能力,也无应答信号。为保证在CPU响应中断后,执行返回指令前撤除中断请求,
中断函数 interupt
viod 函数名 (void) interrupt n // n 为中断号
{
函数体语句
}