仿真2
中断服务子程序内的代码全部运行后的效果如图所示,首先LED小灯的端口输出取反,把LED小灯给点亮后(下次再进中断会输出取反熄灭,依次往复)。LCD段码液晶显示01,这说明发生了1次中断。
仿真结果
通过单步仿真我们清楚了中断发生后的处理流程,接下来就可以把之前打的两个断点取消掉,然后在83行的位置打上一个断点,随后F5全速运行程序,等待程序停到断点处。在等待的过程中,LED小灯保持闪烁,LCD段码液晶上的数字一直在自加。当程序停到断点处后,LCD段码液晶显示为20。继续单步运行后,端口PA_0的中断功能就被关闭了。
仿真3
关闭中断后,再次全速运行程序。我们发现小灯不再闪烁了,段码液晶显示的数字也不再自加。这是因为我们已经把端口中断关闭掉了,虽然uiCnt还在自加。但是已经进不了中断子程序去更新显示。因此依旧停留显示在20。我们不妨把uiCnt添加到Watch窗口中来看一下,添加方法如图所示。双击ucCnt变量名,选中后右键选择“Add uiCnt to”,“Watch 1”,这样就添加到Watch1窗口中了。
仿真4
通过Watch1窗口看到端口已经反转37次了,但LCD液晶已经停留在20。这也说明中断确实被关闭了,因此液晶一直没能更新显示。