请教一个单片机中断的问题

比如来了一个脉冲,开始中断,但中断里的程序执行到一半时,又来了一个脉冲,请问这时中断里的程序是从头开始呢还是继续呢?我的意思是程序就一个中断A,来了一个脉冲,A执行,A执... 比如来了一个脉冲,开始中断,但中断里的程序执行到一半时,又来了一个脉冲,请问这时中断里的程序是从头开始呢还是继续呢?
我的意思是程序就一个中断A,来了一个脉冲,A执行,A执行到一半时,又来了一个脉冲,通知A执行。这时A是从头执行还是先不理会呢?
展开
 我来答
haolizhong4924
2011-11-06 · TA获得超过5217个赞
知道小有建树答主
回答量:600
采纳率:50%
帮助的人:265万
展开全部
需要具体情况具体分析,因为不同的单片机在中断机制上有细微的差别,需要查他的资料。

一般来说,一个中断源请求中断,对CPU来说,是一次性的做了一个“中断挂号”。假如当时因条件不满足(例如CPU正在“关中断”,即没有打开“中断允许”),而没有响应中断,则挂号信息还在,这样,将来一旦打开了中断允许,仍然会响应,只是晚了一点而已。
而中断响应以后,必须有办法把这个“中断挂号”消除掉。有的CPU的功能是:只要响应了这个中断,挂号就自动消除了。也有的CPU不能自动清除挂号,必须在中断服务程序中编入“清除中断挂号”的操作,否则,一旦打开了中断允许,它又会重复发生中断。

现在的大多数单片机里,中断控制器和CPU是在同一个芯片中,它可以做到自动消除中断挂号。而过去许多种CPU,所配用的中断控制器是另外一个芯片,自然就无法自动消除了。

也有的CPU中有另外一种“不挂号”的中断请求。它必须由外界(发出中断请求的那个设备)来保持一直不停申请,等到响应中断的时候,再设法(例如,在中断服务程序中发出一个输出信号)通知那个设备撤销申请。

大多数的CPU中,一旦响应中断进入了服务程序,就把“中断允许”关掉了。故此时如果又有下一个中断请求来了,不能立即响应,只能挂一个号,等以后“开中断”时才能再响应。如果程序员希望能够“嵌套中断”(即在一次中断服务程序的执行中途又进入了另一个中断服务程序),就需要在服务程序内编入“开中断”的操作。

“嵌套中断”原则上允许“自己嵌套自己”,也就是说,一次中断服务程序的执行中途又被打断并进入了和自己一样的中断服务程序,并从头到尾执行一遍,结束后返回到先前打断的那一点,并继续执行后半截服务程序。这种情况会产生什么效果,是需要程序员自己考虑的。

也有的CPU具有“优先次序”机制,可以在某一级的中断服务程序里禁止优先级不比自己高的其他中断来打断自己。同时,也提供给程序员有“放弃优先权”以及“修改优先级”的灵活性。
而被优先机制暂时“屏蔽”的那些较低优先级的中断申请,同样挂号仍在,以后高优先级的中断结束以后,还能响应。

不过需要注意,大多数的CPU中,“中断挂号”是只能挂一个的。也就是说,在前一次的中断申请所挂的号还没有被清除以前,又来了下一个中断申请,那么,第二个挂号是挂不上的。

不过某些处理器中,中断挂号可能分成几个层次:CPU里面是一层,外围针对各个具体的设备,还有另外一级“预备挂号”,那就比较复杂了。

【针对您的“问题补充”再说两句】
上面已经说,程序员可以自己决定你的中断服务程序允许还是不允许“嵌套”。

如果不允许,您可以采用关中断的办法,或者利用优先机制,来屏蔽同一中断源的第二个中断请求。
这样,第二个中断就不会被响应。但它仍可以挂上一个号(只要它发生在上一个中断挂号已经被清除掉以后的时间)。然后,中断服务程序结束时,一般都会开中断并释放优先级屏蔽。然后,第二个中断请求就会被响应,于是再一次执行中断服务程序。

如果允许“嵌套”,那就会如我上面所说:
一次中断服务程序的执行中途又被打断并进入了和自己一样的中断服务程序,并从头到尾执行一遍,结束后返回到先前打断的那一点,并继续执行后半截服务程序。
smile20088
2011-11-06 · TA获得超过1576个赞
知道小有建树答主
回答量:577
采纳率:100%
帮助的人:231万
展开全部
1. 如果是高优先级的中断来了,会打断低优先级的正在执行的中断而执行高优先级的中断。
51单片机的中断可嵌套,但至多支持二级嵌套。
51单片机的默认(此时的IP寄存器不做设置)中断优先级为:
外部中断0 > 定时/计数器0 > 外部中断1 > 定时/计数器1 > 串行中断;
但这种优先级只是逻辑上的优先级,当同时有几种中断到达时,高优先级中断会先得到服务。这种优先级实际上是中断同时到达的情况下,谁先得到服务的优先级,而不是可提供中断嵌套能力的优先级。这种优先级被称为逻辑优先级。
例如:当计数器0中断和外部中断1(优先级 计数器0中断>外部中断1)同时到达时,会进入计时器0的中断服务函数;但是在外部中断1的中断服务函数正在服务的情况下,这时候任何中断都是打断不了它的,包括逻辑优先级比它高的外部中断0计数器0中断。
2.
51单片机的中断优先级控制寄存器IP可以把默认的中断优先级设置为高或低级,
例如默认是外部中断0 > 定时/计数器0 > 外部中断1 > 定时/计数器1 > 串行中断;
现在设为定时1 和串行中断为高优先级 其它为低 ,那么中断0执行时会被定时器1 或串行中断打断,如果设定的两个高优先级定时/计数器1 和串行中断同时响应,会再自然排队,先执行定时1中断再执行串行中断。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
做而论道
高能答主

2011-11-06 · 把复杂的事情简单说给你听
知道大有可为答主
回答量:3万
采纳率:80%
帮助的人:1.2亿
展开全部
正在中断期间,不会理会 同级别 和 低级别 的中断申请。
如果有高级的申请,就会出现“嵌套”。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
47okey
2011-11-06 · TA获得超过1.2万个赞
知道大有可为答主
回答量:5900
采纳率:75%
帮助的人:2383万
展开全部
所以中断程序写的越短越好,尽量写到主程序去。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式