MCS-51单片机如何进入中断中断优先顺序同顺序能设置为Uart,T1,INT1,T0,INT0吗?

专业文档是百度文库认证用户/机構上传的专业性文档文库VIP用户或购买专业文档下载特权礼包的其他会员用户可用专业文档下载特权免费下载专业文档。只要带有以下“專业文档”标识的文档便是该类文档

VIP免费文档是特定的一类共享文档,会员用户可以免费随意获取非会员用户需要消耗下载券/积分获取。只要带有以下“VIP免费文档”标识的文档便是该类文档

VIP专享8折文档是特定的一类付费文档,会员用户可以通过设定价的8折获取非会員用户需要原价获取。只要带有以下“VIP专享8折优惠”标识的文档便是该类文档

付费文档是百度文库认证用户/机构上传的专业性文档,需偠文库用户支付人民币获取具体价格由上传人自由设定。只要带有以下“付费文档”标识的文档便是该类文档

共享文档是百度文库用戶免费上传的可与其他用户免费共享的文档,具体共享方式由上传人自由设定只要带有以下“共享文档”标识的文档便是该类文档。

}

MCS-优先级中由优先级寄存器IP来高置的IP中某位设为1,相应的中断就是高优先级否则就是低优先级。

IP优先级别寄存器各位介绍如下: 

PS串行口中断优先级控制位PS=1设定串行口为高优先级中断;PS=0为低优先级中断。 

PT1T1中断优先级控制位PT1=1设定定时器T1为高优先级中断;PT1=0为低优先级中断。

PX1外部中断1优先级控制位PX1=1设定定时器外部中断1为高优先级中断;PX1=0为低优先级中断。

PT0T0中断优先级控制位PT0=1设定定时器T0为高优先级中断;PT0=0为低优先级中断。

PX0外蔀中断0优先级控制位PX0=1设定定时器外部中断0为高优先级中断;PX0=0为低优先级中断。

例:设有如下要求将T0、外中断1设为高优先级,其它为低優先级求IP的值。 

IP的首3位没用可任意取值,设为000后面根据要求写就可以了

因此,最终IP的值就是06H。

例:在上例中如果5个中断请求同時发生,求中断响应的次序 

响应次序为:定时器0->外中断1->外中断0->实时器1->串行中断。 

说最基本的老的51单片机如何进入中斷(80C51系列)有5个中断源,2个优先级可以实现二级中断服务嵌套。现在很多扩展的51单片机如何进入中断已经有4个优先级(或更多)和更多嘚中断源了

在说到中断之前,我先来定义一下优先级明白了什么是优先级,后面的阐述就容易明白了实际上很多人都是混淆了优先級的含义,所以才觉得糊里糊涂

中断的优先级有两个:查询优先级和执行优先级。

什么是查询优级呢我们从datasheet或书上看到的默认(IP寄存器不做设置,上电复位后为00H)的优先级:

其实都是查询优级首先查询优先级是不可以更改和设置的。这是一个中断优先权排队的问题昰指多个中断源同时产生中断信号时,中断仲裁器选择对哪个中断源优先处理的顺序而这与是否发生中断服务程序的嵌套毫不相干。当CPU查询各个中断标志位的时候会依照上述5个查询优先级顺序依次查询,当数个中断同时请求的时候会优先查询到高优查询先级的中断标誌位,但并不代表高查询优先级的中断可以打断已经并且正在执行的低查询优先级的中断服务

例如:当计数器0中断和外部中断1(按查询優先级,计数器0中断>外部中断1)同时到达时会进入计时器0的中断服务函数;但是在外部中断1的中断服务函数正在服务的情况下,这时候任何中断都是打断不了它的包括逻辑优先级比它高的外部中断0计数器0中断。

而中断的执行优先级就是你对IP寄存器的设置了在2个优先级嘚情况下,某位为1则相应的中断源为高优先级;为0,则为低优先级 

关于中断的优先级有三条原则:


1、CPU同时接收到几个中断时,首先响應优先级最高的中断请求;
2、正在进行的中断过程不能被新的同级或低行优优先级的中断请求所中断;
3、正在进行的低行优优先级中断服務能被高行优优先级中断请求中断;

若:同一执行优先级中的中断申请不止一个时,则有一个中断优先权排队问题同一执行优先级的Φ断优先权排队,由中断系统硬件确定的自然优先级形成优先权自高到低的顺序即:

例如:设置IP = 0x10,即设置串口中断为最高优先级则串ロ中断可以打断任何其他的中断服务函数实现嵌套,且只有串口中断能打断其他中断的服务函数若串口中断没有触发,则其他几个中断の间还是保持逻辑优先级相互之间无法嵌套。

关于中断嵌套可以这样说,当一个中断正在执行的时候如果事先设置了中断优先级寄存器IP,那么当一个更高优先级的中断到来的时候会发生中断嵌套如果没有设置则不会发生任何嵌套;如果有同一个优先级的中断触发,咜并不是在“不断的申请”而是将它相应的中断标志位置即IE寄存器的某位置位,当CPU执行完当前中断之后按照查询优先级重新去查询各個中断标志位,进入相应中断

要记住,没有设置IP时单片机如何进入中断会按照查询优先级(或都说逻辑优先级)来排队进入服务。如果要想让某个中断优先响应 则要设置IP,更改执行优先级(或者说物理优先级)要注意的是,当设置了IP后当低执行优先级中断在运行時,如果有高执行优先级的中断产生则会嵌套调用进入高执行优先级的中断。如果你是用C语言写的程序并在中断服务时 using 了寄存组,要紸意两个不同执行优先级的中断服务程序不要 using 同一组寄存器。


1 在各个中断都是低优先级的时候如果定时器0的溢出进入中断。在这个中斷处理的过程中外部中断0也被触发了,那么是不是要发生中断嵌套
2 如果定时器0发生中断的时候,进入中断处理程序这个时候外部中斷1条件触发条件满足了。因为定时器0自然优先级比外部中断1高那么定时器0的中断处理程序继续执行。假设定时器中断处理程序执行的过程中外部中断1的触发。条件消失了那么等定时器0的中断处理完后,程序还是会进入外部中断1处理程序吗

答案1:在IP事先设置了外部中斷0的优先级的情况下,CUP会中止定时器0的中断服务进入外部中断0服务程序,执行完以后再回到定时器0中断服务程序否则不会。


答案2:肯萣会进入中断的;外部中断1的触发条件满足后会置位外部1的中断标志即使后来外部中断1的触发条件消失了,也不会清除已置位的中断标誌所以等定时器0的中断处理完后,程序判断外部中断的中断标志为1后依然会进入外部中断1处理程序的只有在外部中断1处理程序中执行reti指令才会硬件清除外部中断1的中断标志(这也正是为什么中断返回使用reti指令而不可以用ret替换的原因)...
}

我要回帖

更多关于 单片机中断 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信