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

2019-07-16 05:24发布

请教两个问题:
书上说51单片机响应中断的最短时间为3个机器周期,内部执行一个长调指令2个机器周期,加一个检测周期共3个机器周期。
如果中断检测时正在执行REti或访问IE或IP指令的第一个机器周期,这样包括检测在内需要2个机器周期;紧接着若要执行的指令恰好是乘除指令,又需要4个机器周期;最后再用2个机器周期执行长调指令转入中断服务程序。这样,共需8个机器周期。所以单片机中断响应时间一般为3~8个机器周期。
       1、为啥最短是3个周期?中断响应过程是,检测到中断后,单片机自动进行保护断点(压PC入栈),清内部中断标志,把响应的中断服务程序入口地址送入PC。我不清楚这些操作都是不需要花费额外的机器周期吗,虽然是自动执行?
       2、说最长花费8个机器周期的地方,既然已经响应中断了,怎么还会去执行乘除指令呢?不是应该立刻去做问题1中提到的那些事情了吗?
       这两个问题我百思不得其解,请大家指教,是不是我有什么地方理解错了。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
5条回答
路、人、甲
2019-07-16 20:59
最近考试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机器周期了。

以上是个人见解、如有错漏、望楼主更正。

一周热门 更多>