第6章MCS-51单片机中断系统6.1中断的概念•计算机在执行既定程序时,被其它事件打断而停止原程序的执行,转而去执行相应的处理程序,待处理完成后,再返回去继续执行被暂时中止的原程序,这一过程称为中断。作用:采用中断技术可以提高CPU效率、解决速度矛盾、实现并行工作、分时操作、实时处理、故障处理、应付突发事件,可使多项任务共享一个资源(CPU)。中断与子程序的最主要区别:子程序是预先安排好的,中断是随机发生的。中断涉及的几个环节:中断源、中断申请、开放中断、保护现场、中断服务、恢复现场、中断返回。中断过程示意图中断请求•引起CPU中断正在执行的程序而转向相应的处理程序的根源,称为中断源;•CPU响应中断请求并进行相应处理的过程叫中断服务;•处理完中断事件后,再回到原来被中断的地方(即断点),称为中断返回;•实现从产生中断请求、进行中断服务并返回断点等一系列功能的部件称为中断系统。中断系统功能•对于一个中断源,需要:–响应请求–进行中断服务(保护现场)–实现中断返回•对于有多个中断源的系统,还需要:–对中断请求进行屏蔽或允许–对同时产生的多个中断请求进行排序,按优先级别顺序服务–中断服务再被其它中断请求中断而进行中断嵌套等管理功能•MCS-51单片机系统中,中断系统的功能是通过设置和访问与中断系统有关的特殊功能寄存器完成的。•与中断系统有关的特殊功能寄存器有:IE、IP以及TCON和SCON的有关位。①中断请求:定时和外中断控制寄存器TCON;串行控制寄存器SCON;②中断允许控制寄存器IE;③中断优先级控制寄存器IP。80C51单片机中涉及中断控制的有3个方面4个特殊功能寄存器:中断控制寄存器:6.2MCS-51单片机的中断源MCS-51单片机中断系统有5个中断源(其中2个为外部中断源,3个为内部中断源),2个优先级,可实现二级中断嵌套;51子系列允许5个(52子系列6个)中断源:2个外部中断请求:INT0,INT12个片内定时器/计数器T0和T1中断请求:TF0,TF1,(TF2——52子系列有T2)1个串行口中断请求:TI/RI中断源是指能发出中断请求,引起中断的装置或事件。⑴INT0:外部中断0,中断请求信号由P3.2输入。⑵INT1:外部中断1,中断请求信号由P3.3输入。⑶T0:定时/计数器0溢出中断,对外部脉冲计数由P3.4输入。⑷T1:定时/计数器1溢出中断,对外部脉冲计数由P3.5输入。⑸串行中断:包括串行接收中断RI和串行发送中断TI。具体来说:CPU在每个机器周期的S5P2期间,会自动查询各个中断申请标志位,若查到某标志位被置位,将启动中断机制。CPU识别中断申请的依据:Tc=1/foscTs=6TcTm=12Tc=6TsTcTsTmTmS5S6S4S3S2S5S6S4S3S2S1INT0、INT1、T0、T1中断请求标志放在TCON中。1.中断请求控制寄存器字节地址为88HTCOND7D6D5D4D3D2D1D0位名称TF1—TF0—IE1IT1IE0IT0位地址8FH8EH8DH8CH8BH8AH89H88H功能T1中断标志—T0中断标志—中断标志触发方式中断标志触发方式TCON的结构、位名称、位地址和功能如下:TCON位功能:①TF1——T1溢出中断请求标志T1计数溢出后,TF1=1②TF0——T0溢出中断请求标志T0计数溢出后,TF0=1TF0/TF1:定时器溢出中断申请标志位:=0:定时器未溢出;=1:定时器溢出申请中断,进中断后自动清零。③IE1——外中断中断请求标志当P3.3引脚信号有效时,IE1=1④IE0——外中断中断请求标志当P3.2引脚信号有效时,IE0=1IE0/IE1:外部中断申请标志位:=0:没有外部中断申请;=1:有外部中断申请,CPU响应后自动清零???。⑤IT1——外中断触发方式控制位IT1=1,边沿触发方式,即P3.3出现下跳边脉冲有效;IT1=0,电平触发方式,低电平有效。⑥IT0——外中断触发方式控制位其意义和功能与IT1相似。IT0/IT1:外部中断请求的触发方式选择位:=0:在INT0/INT1端申请中断的信号低电平有效;=1:在INT0/INT1端申请中断的信号负跳变有效.低电平触发引脚上的低电平须持续到中断发生。若中断返回前仍未及时撤除低电平,将再次中断。下降沿触发CPU在前一机器周期采到INT0/INT1引脚为高,后一机器周期采到为低才认为是一次中断请求。CPU可记忆申请、可自动撤除中断申请。注意:2.串行控制寄存器SCON字节地址为98H。串行口的发送中断和接收中断的中断请求标志TI和RI,TCOND7D6D5D4D3D2D1D0位名称——————TIRI位地址——————99H98H功能——————串行发送中断标志串行接收中断标志①TI——串行口发送中断请求标志②RI——串行口接收中断请求标志各标志位的功能:(1)TI—发送中断请求标志位。串口每发送完一帧串行数据后,硬件自动置“1”TI。必须在中断服务程序中用软件对TI标志清“0”。(2)RI—接收中断请求标志位。串口接收完一个数据帧,硬件自动置“1”RI标志。必须在中断服务程序中用软件对RI标志清“0”。MCS-51单片机中断系统结构6.3中断允许和中断优先级1.中断允许控制寄存器IE•中断源是否允许向CPU发出请求,由中断允许寄存器IE控制•IE可位寻址,字节地址A8H,位地址为A8H~AFHIED7D6D5D4D3D2D1D0位名称EA——ESET1EX1ET0EX0位地址AFH——ACHABHAAHA9HA8H中断源CPU——串行口T1T0①EA——CPU中断允许控制位(总开关)EA=1,CPU开中;EA=0,CPU关中,且屏蔽所有5个中断源。②EX0——外中断INT0中断允许控制位EX0=1,INT0开中;EX0=0,INT0关中。③EX1——外中断INT1中断允许控制位EX1=1,INT1开中;EX1=0,INT1关中。④ET0——定时/计数器T0中断允许控制位ET0=1,T0开中;ET0=0,T0关中。⑤ET1——定时/计数器T1中断允许控制位ET1=1,T1开中;ET1=0,T1关中。⑥ES——串行口中断(包括串发、串收)允许控制位ES=1,串行口开中;ES=0,串行口关中。说明:80C51对中断实行两级控制,总控制位是EA,每一中断源还有各自的控制位。首先要EA=1,其次还要自身的控制位置“1”。例如:要使INT0开中(其余关中),可执行下列指令:MOVIE,#1000000lB;或者:SETBEA;SETBEX0;IED7D6D5D4D3D2D1D0位名称EA——ESET1EX1ET0EX0位地址AFH——ACHABHAAHA9HA8H中断源CPU——串行口T1T0中断允许控制寄存器IE注意:改变IE的内容,可由位操作指令来实现,即:SETBbit;对某一位置1CLRbit;对某一位清0例6-1若允许片内2个定时器/计数器中断,禁止其它中断源的中断请求。编写设置IE的相应程序段(1)用位操作指令来编写如下程序段:CLRES;禁止串行口中断CLREX1;禁止外部中断1中断CLREX0;禁止外部中断0中断SETBET0;允许定时器/计数器T0中断SETBET1;允许定时器/计数器T1中断SETBEA;CPU开中断(2)用字节操作指令来编写:MOVIE,#8AH;100010010或者用:MOV0A8H,#8AH;A8H为IE寄存器字节地址IED7D6D5D4D3D2D1D0位名称EA——ESET1EX1ET0EX0位地址AFH——ACHABHAAHA9HA8H中断源CPU——串行口T1T0注意:当MCS-51复位后,IE被清0,则CPU关中断,所有中断请求被禁止。2.中断优先级控制寄存器IPMCS-51单片机有5个中断源,划分为2个中断优先级:高优先级和低优先级。可以进行中断嵌套。当CPU正在执行某个中断服务程序时,如果发生更高一级的中断源请求中断,CPU可以“中断”正在执行的低优先级中断,转而响应更高一级的中断,这就是中断嵌套。中断嵌套只能高优先级“中断”低优先级,低优先级不能“中断”高优先级,同一优先级也不能相互“中断”。中断嵌套结构类似与调用子程序嵌套,不同的是:①子程序嵌套是在程序中事先按排好的;中断嵌套是随机发生的。②子程序嵌套无次序限制,中断嵌套只允许高优先级“中断”低优先级。•5个中断源可通过设置中断优先级控制寄存器IP中的相关位,程控为高或低优先级•中断优先级控制寄存器IP字节地址为B8H,可位寻址,位地址为B8H~BFH,只有低6位有效•系统复位时,IP清零,即所有中断源为低优先级IPD7D6D5D4D3D2D1D0位名称———PSPT1PX1PT0PX0位地址———BCHBBHBAHB9HB8H中断源———串行口T1INT1T0INT0IP的结构、位名称和位地址如下:①PX0:INT0中断优先级控制位。PX0=1,为高优先级;PX0=0,为低优先级;②PX1:INT1中断优先级控制位。控制方法同上。③PT0:T0中断优先级控制位。控制方法同上。④PT1:T1中断优先级控制位。控制方法同上。⑤PS:串行口中断优先级控制位。控制方法同上。IPD7D6D5D4D3D2D1D0位名称———PSPT1PX1PT0PX0位地址———BCHBBHBAHB9HB8H中断源———串行口T1INT1T0INT0例如:若要将INT1、串行口设置为高优先级,其余中断源设置为低优先级,可执行下列指令:MOVIP,#00010100B;需要指出的是,若置5个中断源全部为高优先级,就等于不分优先级。IED7D6D5D4D3D2D1D0位名称———PSPT1PX1PT0PX0位地址———BCHBBHBAHB9HB8H中断源———串行口T1INT1T0INT0中断优先级控制寄存器IP中断系统针对中断优先级的三条原则1.CPU同时接收到几个中断时,首先响应优先级别最高的中断请求。2.正在进行的中断过程不能被新的同级或低优先级的中断请求所中断。3.正在进行的低优先级中断服务,能被高优先级中断请求所中断,反之则不能。•由软件可改变各中断源的中断优先级。•MCS-51的中断系统有两个不可寻址的“优先级状态触发器”:–一个用来指示某高优先级的中断正在执行,所有后来的中断均被阻止。–另一个用来指示某低优先级的中断正在执行,所有同级中断都被阻止,但不阻断高优先级的中断请求。–在同时收到几个同一优先级的中断请求时,优先响应哪一个中断,取决于内部的硬件查询顺序。优先级状态触发器硬件查询顺序•多个同级中断源同时提出请求时,通过“硬件查询顺序”确定先响应哪个请求查询顺序中断源硬件优先级别1外部中断0最高││↓最低2定时/计数器03外部中断14定时/计数器15串行口•优先级状态触发器解决了不同优先级中断请求的响应顺序问题,而且保证高优先级请求可以中断已开始的低优先级服务。对同时发生多个中断申请时:☞不同优先级的中断同时申请(很难遇到)——先高后低☞相同优先级的中断同时申请(很难遇到)——按序执行☞正处理低优先级中断又接到高级别中断——高打断低☞正处理高优先级中断又接到低级别中断——高不理低中断优先级处理原则6.4响应中断请求的条件及过程一个中断请求被响应,需满足以下必要条件:(1)IE寄存器中的中断总允许位EA=1。(2)该中断源发出中断请求,即该中断源对应的中断请求标志为“1”。(3)该中断源的中断允许位=1,即该中断没有被屏蔽。(4)无同级或更高级中断正在被服务。•如果存在以下任一情况,不产生硬件LCALL指令,对中断请求标志的采样结果被取消:–CPU正在处理同级或高优先级中断;–当前机器周期不是所执行指令的最后一个周期,只有在当前指令执行完毕后,才能进行中断响应;–当前指令为RETI或访问IE、IP寄存器的指令。需要再去执行完一条指令,才能响应新的中断请求。将相应的优先级状态触发器置“1”,阻断后来的同级或低级的中断请求;保留断点地址(将PC的内容压入堆栈以保护断点),以备中断服务完成后返回