微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 51单片机中断响应时间为啥是3~8个机器周期

51单片机中断响应时间为啥是3~8个机器周期

时间:10-02 整理:3721RD 点击:
请教两个问题:
书上说51单片机响应中断的最短时间为3个机器周期,内部执行一个长调指令2个机器周期,加一个检测周期共3个机器周期。
如果中断检测时正在执行RETI或访问IE或IP指令的第一个机器周期,这样包括检测在内需要2个机器周期;紧接着若要执行的指令恰好是乘除指令,又需要4个机器周期;最后再用2个机器周期执行长调指令转入中断服务程序。这样,共需8个机器周期。所以单片机中断响应时间一般为3~8个机器周期。
       1、为啥最短是3个周期?中断响应过程是,检测到中断后,单片机自动进行保护断点(压PC入栈),清内部中断标志,把响应的中断服务程序入口地址送入PC。我不清楚这些操作都是不需要花费额外的机器周期吗,虽然是自动执行?
       2、说最长花费8个机器周期的地方,既然已经响应中断了,怎么还会去执行乘除指令呢?不是应该立刻去做问题1中提到的那些事情了吗?
       这两个问题我百思不得其解,请大家指教,是不是我有什么地方理解错了。

路过帮顶,我也想知道为什么。

自己顶,有木有知道一点点的也可以说说看,追究这种问题似乎没意义,不过碰到了还是想了解清楚

我学过8086的汇编应该也可以解释。LCALL这条指令其实拆了就是PUSH PC,LJMP PC。(前一个PC是当前指令的下一个指令地址,后一个PC是真正中断程序的入口地址)
RET这条指令拆开就是POP PC,LJMP PC。
响应中断是,当中断响应允许的情况下,查询到中断请求的那个周期的下一个机器周期去响应中断。但是在RET这条指令中中断响应是被禁止的,所以RET结束后的那个机器周期里还是不能进行中断响应,只能再次进行中断请求的查询。
你可以理解为执行RET指令等转移指令执行的时候EA=0;(我想应该执行jmp指令的时候也是不可以响应中断的)。
我今晚看书的时候也是不理解,上网查了半天也没有满意的答案。自己想了一下,看看对不对。

晕,还是没懂。

最近考试51单片机、对于这个问题、我也有点纠结、所以百度了一下、于是看到小编的问题、考到小编的问题、似乎也有所明白、也不知道是否正确。首先,更正一下小编的问题、这里的中断响应的时间、并不是说响应完这个中断所需要的时间。而是说、发生一个中断、这个中断有效到中断被检测到再到中断响应、这个过程所需要的时间。也就是说中断有效到中断响应的时间。这里的时间就是机器周期。
首先、一个中断的发生、必然会导致某些标志位的改变、(即置1、说明这个中断有效)而这个改变标志位的步骤、会在每个机器周期的s5p2相时进行。如果中断标志位被置1了、说明中断有效(我这里把置1这个机器周期称L1)、可是这个有效中断还要被CPU检测到、而检测这个步骤是在每个周期的S6状态按优先级顺序进行检测(这里把检测这个机器周期称L2),如果前两步都有效的话,接下来在L3机器周期就会响应相应的中断。而中断响应的这个L3必须是一条指令的最后一个周期(为确保指令执行的完整性),并且如果遇到当前指令是RETI或改写中断控制器IE和有相机寄存器IP或IPH、这些指令的话、那么、中断必须在执行完以上所说的指令后再执行一条指令才会响应(把再执行的这条指令称X1)、即L3就是X1的最后一个机器周期。
所以、对于小编问题有了以下解释:
1、最短是3机器周期、这个很容易理解,如果中断有效到中断响应这个过程中、都没有“RETI或改写中断控制器IE和有相机寄存器IP或IPH”、这些指令的话、就刚好是L1、L2、L3、这个三个周期。所以是最少要3个机器周期。
2、最长是8个机器周期、这里涉及了3条指令。首先、L1发生在第一条指令的第一个机器周期(这条指令是一条2机器周期的指令,因为2机器周期刚好不能完成中断响应、完成中断响应必须至少是3个机器周期、以上有解释)、所以这里是占了2个机器周期、然后到第二条指令、这第二条指令必须是“RETI或改写中断控制器IE和有相机寄存器IP或IPH”、这些指令(因为这里计算的是最长时间、只有遇到这些指令才会是最长、遇到了这些指令、中断不能在这些指令的最后一个周期响应而是要在执行一条指令后才会响应、)所以这里又占了2个机器周期、而第三条指令也不许是乘除指令、因为乘除只能是占用机器周期最多的指令(4机器周期)、在执行完第二条指令后、执行第三条乘除指令、而这时的L3才确定下来、L3实在第三条指令的最后一个机器周期、这样就是8机器周期了。
以上是个人见解、如有错漏、望小编更正。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top