中断上交8051
如我们所见,8051中有五个不同的中断。这些中断是INT0,INT1,TO,T1,TI/RI。
每个机器周期中有六个状态。这些状态是S1到S6。在每个机器周期的状态S5结束时对所有中断进行采样。当指令占用多个机器周期时,则在下一个机器周期中对样本进行轮询。在第一个机器周期的S5处设置中断标志时,轮询周期将找到它。中断系统生成LCALL指令以调用适当的ISS。
有一些条件。当这些条件都不满足时,则只能执行该操作。这些条件如下-
当具有相同或更高优先级的中断已在进行中时。
当轮询周期不是当前指令执行中的最终机器周期时。
如果当前指令不正确
RETI
写入IP寄存器
写入IE寄存器
这些条件之一为真时,将不会生成对中断服务子例程(ISS)的LCALL。第二个条件表明当前执行已转移到ISS之前完成。最后一个条件表明,在执行REISS指令或对IE或IP寄存器的任何写指令之后,至少要再执行一条指令,然后再执行ISS。
当执行一个ISS时,微控制器可以被更高优先级的中断所中断。如果优先级已经是1,则微控制器不能被中断。当它完成ISS执行后,便会发生唯一的新中断。
调用一个ISS时,程序计数器(PC)值将被压入堆栈。在执行ISS之后,将执行RETI指令。因此,在执行RETI之后,PC值将从堆栈中弹出,以返回到下一条切换控制的指令。如果ISS以RET结尾,而不是以RETI结尾,则微控制器认为该中断仍在进行中。
8051单片机的单步操作
该8051支持程序的单步执行。我们可以使用外部中断引脚作为按键输入。让我们考虑将引脚INT0与钥匙连接。首先,中断引脚的值为0,按下该键时,该值为1,释放键后,它将再次变为0。
该键可以是单步键。INT0被编程为电平触发的中断。对于单步操作,中断服务子例程(ISS)使用以下代码终止。
P3.2位用作INT0引脚。
L1:JNBP3.2, L1 L2:JBP3.2, L2 RETI
第一行表明它将在L1中直到INT0变为1,第二行表明它将在L2中直到INT0变为0。RETI指示从ISS返回到主程序。