新闻中心

EEPW首页>嵌入式系统>设计应用> 51单片机在片设备与中断(3)

51单片机在片设备与中断(3)

作者: 时间:2016-11-26 来源:网络 收藏
中断控制要点

1、当CPU正在处理某项事务的时候,如果外界或内部发生了更紧急的事件,要求CPU暂停正在处理的工作转而去处理这个紧急事件,待处理完以后再回到原来被中断的地方,继续执行原来被中断了的程序,这样的过程称为中断。

本文引用地址://m.amcfsurvey.com/article/201611/321805.htm

(1)能够实现中断处理功能的部件称为中断系统

(2)向CPU提出中断请求的源称为中断源,51系列单片机共有5个中断源。

(3)中断源向CPU提出的处理请求,称为中断请求或中断申请。

(4)CPU同意处理中断请求称为中断响应,处理中断请求的程序称为中断服务子程序。

(5)当CPU暂时终止正在执行的程序,转去执行中断服务子程序时,除了硬件自动把断点地址(16位程序计数器PC的值)压入堆栈之外,用户应注意保护有关的工作寄存器、累加器、标志位等信息,这称为保护现场;在完成中断服务子程序后,恢复有关的工作寄存器、累加器、标志位的内容,称为恢复现场;最后执行中断返回指令RETI,从堆栈中自动弹出断点地址到PC,继续执行被中断的程序,称为中断返回。

2、基本51单片机的中断系统有5个中断源,可任意分为2个中断优先级(高优先级和低优先级),可实现2级中断服务程序嵌套。

(1)中断优先级寄存器IP的字节地址为B8H,可以位寻址。IP相应的位为0则其对应中断的优先级为低,否则优先级为高。51单片机复位以后IP为0,各个中断源均为低优先级中断。可用位操作指令或字节操作指令更改IP的内容,以改变各中断源的中断优先级。

(2)中断允许寄存器IE的字节地址为A8H,可以位寻址。51单片机的CPU对中断源的开放或屏蔽,是由片内的中断允许寄存器IE控制的,51单片机复位以后,IE被清0,由用户程序置“1”或清“0”IE相应的位,实现允许或禁止相应中断源的中断申请。若允许某一个中断源中断,除了开放中断总的允许位EA外,必须同时使CPU开放该中断源的中断允许位。

(3)51单片机有两个中断优先级,对于每一个中断请求源可编程为高优先级中断或低优先级中断。一个正在执行的低优先级中断程序能被高优先级的中断源所中断,但不能被另一个低优先级的中断源所中断。若CPU正在执行高优先级的中断,则不能被任何中断源所中断,一直执行到中断服务结束,遇到返回指令RETI。每次从中断服务程序返回主程序后都必须再执行一条指令后才能响应新的中断请求。中断嵌套的两条基本规则是:①低优先级可被高优先级中断,而高优先级中断源不能被任何中断源所中断;②任何一种中断(不管是高级还是低级),一旦得到响应,不会再被它的同级中断所中断。

(4)当几个同优先级的中断同时申请中断时,响应哪一个中断源将取决于由辅助优先级决定的一个内部查询顺序,具体就是中断服务程序的入口地址越靠前(地址值越小)则辅助优先级越高。

3、如果总的中断允许开放(即EA=1)则CPU在每个机器周期的S5P2时刻采样中断标志,并在下一个机器周期对采样到的中断进行查询。如果前一个机器周期的S5P2有中断标志,则在查询周期内便会查询到,并按优先级高低进行中断处理,如果响应中断,中断系统将控制程序转入相应的中断服务子程序。CPU中断响应是有条件的,并不是查询到的所有中断请求都能被立即响应,当遇到下列三种情况之一时,中断响应被封锁:

(1)CPU正在处理相同的或更高优先级的中断;

(2)现行的机器周期不是所执行指令的最后一个机器周期;

(3)正在执行的指令是RETI或是访问IE或IP的指令(CPU在执行RETI或访问IE、IP的指令后,至少需要再执行一条指令才会响应新的中断请求)。

4、TF0和TF1分别为定时/计数器0和定时/计数器1的中断请求标志位,在已经开放T0/T1中断允许且已被启动的前提下,T0/T1加1计满溢出时 TF0/TF1标志位自动置“1”;CPU 检测到TCON中TF0/TF1变“1”后,将自动保存当前PC值到堆栈,并将相应中断服务程序入口地址000BH/001BH赋值给PC,从而在下一条指令开始执行中断服务;TF0/TF1标志位由硬件自动清“0”,以便进行下次中断申请。

5、IE0和IE1分别为外部中断0和外部中断1中断申请标志位。以外部中断0为例,当IT0为0即选择电平触发方式时,每个机器周期的S5P2采样-INT0,若-INT0为低电平,则IE0置“ 1”,否则IE0清“0”;当IT0为1即选择边沿触发方式时,当前一个机器周期采样到-INT0输入为高,而本机器周期采样到该引脚为低电平时,则置“1”IE0;IE0/IE1为1表示外部中断0/1正在向CPU申请中断。当CPU响应中断,转向中断服务子程序(入口地址0003H/0013H)时,由硬件自动清“0”IE0/IE1。

6、TI和RI分别是串行口的发送中断和接收中断的中断请求标志。

(1)在串行口以方式0发送时,每当发送完8位数据,由硬件置“1”TI;若以方式1、方式2或方式3发送时,在发送停止位的开始时置“1”TI。TI为1表示串行口发送器正在向CPU申请中断,而CPU响应串口发送器中断请求,转向执行中断服务程序时并不清“0”TI,TI必须由用户的中断服务子程序清0(即中断服务子程序中必须用CLR TI或ANL SCON,#0FDH等清“0”TI的指令)。

(2)若串行口接收器允许接收,并以方式0工作,每当接收到第8位数据时置“1”RI;若以方式1、2、3工作,且(SM2)=0时,每当接收器接收到停止位的中间时置“1”RI,当串行口以方式2或方式3进行工作,且(SM2)=1时仅当接收到的第9位数据RB8为1后,同时还要在接收到停止位的中间位置“1”RI。RI为1表示串行口接收器正在向CPU申请中断,而CPU响应串口接收器中断请求,转向执行中断服务程序时并不清“0”RI,RI必须由用户的中断服务子程序清0(即中断服务子程序中必须用CLR RI或ANL SCON,#0FEH等清“0”RI的指令)。

(3)实际上串口发送器中断请求和串口接收器中断请求对应着同一个中断服务程序入口地址0023H。在用户的串口中断服务子程序的开始应首先判断TI和RI标志以决定本次中断是由发送结束引起还是由接收完成引起以便进一步转入相应的处理(也可能恰好即是发送结束又是接收完成)。



评论


技术专区

关闭