历史上的今天
返回首页

历史上的今天

今天是:2025年05月29日(星期四)

正在发生

2018年05月29日 | 51中断优先级及中断嵌套

2018-05-29 来源:eefocus

基本型80C51系列单片机有5个中断源,2个优先级,每个中断源可通过软件设置为高优先级或低优先级中断,可以实现二级中断服务嵌套。

中断的优先级

在说到中断之前,我先来定义一下优先级,明白了什么是优先级,后面的阐述就容易明白了。中断的优先级有:查询优先级和执行优先级。

查询优先级

datasheet上默认的查询优先级(IP寄存器不做设置,上电复位后为00H):

外部中断0 > 定时/计数器0 > 外部中断1 > 定时/计数器1 > 串行中断

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

执行优先级。

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

中断的优先原则

1、CPU同时接收到几个中断时,首先响应优先级最高的中断请求; 
2、当同一优先级的几个中断源同时向CPU请求中断时,CPU通过内部硬件查询逻辑电路,按查询优先级判定优先响应哪一个中断请求。 
3、正在进行的中断过程不能被新的同级或低执行优优先级的中断请求所中断; 
4、正在进行的低执行优先级中断服务,能被高执行优优先级中断请求中断,除非正在执行的低优先级中断服务程序设置了禁止CPU中断某些高优先级的中断。

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

例:同一执行优先级中的中断申请不止一个时,则有一个中断优先权排队问题。同一执行优先级的中断优先权排队,由中断系统硬件确定的查询优先级决定的。

例:设置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替换的原因)…

中断优先级寄存器 IP

×:无效位。 
PS:串行I/O中断优先级控制位。PS=1,高优先级;PS=0,低优先级。 
PTl:定时器/计数器1中断优先级控制位。PTl=1,高优先级;PTl=0,低优先级。 
PXl:外部中断1中断优先级控制位。Pxl=1,高优先级;PXl=O,低优先级。 
PT0:定时器/计数器o中断优先级控制位。PT0=1,高优先级;PTO=0,低优先级。 
Px0:外部中断0中断优先级控制位。Px0=1,高优先级;Px0=0,低优先级。


推荐阅读

史海拾趣

Anderson Power公司的发展小趣事

Anderson Power是一家专注于电源连接器和配件制造的公司,以下是该公司发展的相关故事:

  1. 公司成立与初期阶段:Anderson Power成立于1953年,总部位于美国马萨诸塞州斯特林。最初,公司主要从事电源连接器的制造和销售。公司的创始人是William E. Anderson,他在创立公司之初便致力于提供高质量、可靠的连接器产品,满足不断增长的市场需求。

  2. 技术创新与产品发展:随着市场的需求不断增长,Anderson Power不断进行技术创新和产品开发,推出了一系列新型的电源连接器和配件产品。公司在连接器设计和制造方面拥有丰富的经验和专业知识,能够根据客户的需求定制各种类型的连接器产品。

  3. 客户合作与市场拓展:Anderson Power与全球各个行业的客户建立了长期稳定的合作关系。公司的客户群涵盖了汽车、航空航天、工业、能源等多个领域。通过与客户的紧密合作,Anderson Power不断拓展市场份额,提升品牌知名度,成为电源连接器领域的领先供应商之一。

  4. 全球布局与生产基地:为了更好地服务全球客户,Anderson Power在全球建立了多个生产基地和销售办事处。除了在美国的总部外,公司还在欧洲、亚洲等地区设立了生产工厂和销售办事处,以满足不同地区客户的需求。这些生产基地拥有先进的设备和技术,能够为客户提供高质量的连接器产品。

  5. 持续发展与未来展望:作为一家专注于电源连接器的公司,Anderson Power将继续致力于技术创新和产品发展。公司将不断推出适应市场需求的新产品,提升生产效率和产品质量,以满足客户不断变化的需求。同时,Anderson Power也将继续关注行业的发展趋势和技术变革,不断调整战略,保持在行业内的竞争优势。

Eby Company公司的发展小趣事

为了提供更好的物流服务,eBay推出了国际运送计划(eBay International Shipping)。该计划允许卖家将来自同一订单的多件物品合并在一个包裹中运送,从而减少了买家支付的运费。这一举措不仅提高了物流效率,也增加了买家的购买意愿。eBay还与其他物流公司合作,提供更快捷、更可靠的配送服务。

Freeport Resources Enterprises Corp公司的发展小趣事

为了提升在电子材料领域的竞争力,Freeport Resources积极寻求国际合作,与多家国际知名电子材料生产商和研究机构建立了战略伙伴关系。通过技术引进和联合研发,公司成功掌握了先进的电子材料提纯和加工技术,大幅提高了产品的质量和性能。同时,国际合作也帮助Freeport Resources打开了国际市场,其产品远销全球多个国家和地区,进一步巩固了其在电子材料市场的地位。

东通电子公司的发展小趣事

深圳市东通电子有限公司(以下简称“东通电子”)成立于1998年5月,最初主要涉足电子元器件的生产和销售。随着市场的不断变化和技术的飞速发展,公司意识到仅仅依靠传统业务已无法满足市场需求。于是,在2002年,东通电子决定将重心转向有机薄膜电容器的研发和生产。这一转型为公司的后续发展奠定了坚实的基础。

Hirect公司的发展小趣事
确认输入电源是否正常,包括电压、电流和频率等参数是否符合要求。
启攀微(CHIPHOM)公司的发展小趣事

启攀微电子(CHIPHOM)的创始人们是一群从英美归国的留学精英和国内资深的技术人员。他们在2003年的一个深秋,聚集在上海漕河泾开发区的一间办公室里,怀揣着对集成电路技术的共同热爱和追求,决定创立自己的公司。初始阶段,公司面临着资金紧张、技术难度大等种种挑战,但他们凭借着对技术的执着追求和对市场的敏锐洞察,成功开发出了第一款LED背光驱动芯片,为公司的发展奠定了坚实的基础。

问答坊 | AI 解惑

电阻基出知识(上)

如标题,不多说了.…

查看全部问答>

设置dsp的wdkey=0x55和0xaa起什么作用?

书中说这是看门狗控制 是怎么控制看门狗的? 谢谢!!! 本人超级菜鸟,,,才开始看dsp,,, 谢谢!…

查看全部问答>

有人用TMS320VC5509A的么?请教:ioport的问题.

5509A的IO空间0x0000~0xffff. MOV #1, port(#01h) 此语句会改写中断标志寄存器IFR0么? 如果我想使用  IO空间 0000~0007的地址去 扩展地址线ADDR14,ADDR15,ADDR16.可行么? …

查看全部问答>

关于ARM方面的一个程序编写

有没有人可以告诉我这个程序怎么用ARM语言编写?        有一个地址区间,将指定数据如1-50放在地址开始区间内,再将1-50内被2整除的数放在另一个区间内.…

查看全部问答>

请问:要想构建一个祼机环境,要什么部件啊, 只有一块开发板行不行啊?

要想构建一个祼机环境,要什么部件啊, 只有一块开发板行不行啊?…

查看全部问答>

按摩器,按摩棒,震动器,震动棒方案

提供按摩器,按摩棒,震动器,震动棒方案开发及IC徐工:13713904933  QQ:104018792(技术交流)     我司是享誉电子产业界的义隆电子<EMC>的直接代理商,并专业从事电子产品研发,单片机开发,单片机解密。公司拥有数十名资 ...…

查看全部问答>

准备发礼品了,大家看看有没有在名单上

谢谢大家对我的支持,2011我会继续努力的。 现在我在做统计的工作,在回我贴的朋友里并明确告诉我投我的,我做了下统计,把名单列出来,大家看看还有没有遗漏?有出路的话请抓紧时间跟帖告诉我,你应该排在的顺序,那个压缩包的密码我先不公布,等 ...…

查看全部问答>

如何在ccs2.2里面实时打出一些程序运行的信息?或将信息保存?

如何在ccs2.2里面实时打出一些程序运行的信息?比如某个变量的值。或者如何将一个变量的一系列值保存到文件中阅读?谢谢! …

查看全部问答>

梦之旅同学松鼠1.0学习笔记(五)之1602

  最近比较忙,过段时间就要考期末了,所以半夜出来发代码,后面可能没时间了,发完代码睡觉,呵呵。   相信用过1602的人都知道,1602的相应操作,本文只想讲下4位数据的1602的驱动模式。    其实,4位的1602和8位的区别主要 ...…

查看全部问答>

求助 关于一个按键几个功能,程序出现问题

#include typedef unsigned char uchar  ; typedef unsigned int uint; uchar table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; uchar tt,dat; sbit button = P3^7; void delay_50us(uint t) {     &nbs ...…

查看全部问答>