最近在学习中断指令,偶然发现一个现象,怎么都想不通了。
我在主程序中,使用sm0.1初始化了一个子程序,在子程序中调用了两个中断子程序。主程序中,有之前编程残留下来的一个加计时器T33。结果在运行的时候,T33也在正常运行,监视过程中很明显能够看见。
这个程序是一个自由口通讯程序,我通过模拟串口可以实现收发,如图如图所示。
我理解不了这个程序的运行过程,主程序中,只对子程序进行了一次初始化。也就是说子程序应该只运行了一次。在这一次运行中,子程序遇到中断条件,发生中断。则此时,子程序和主程序都不再进行扫描,只进行中断程序。中断程序执行完之后,应该返回子程序,子程序继续运行,运行完成后,回到主程序,主程序运行。按照这么说,中断子程序应该只会触发一次,不应该反复运行。但是实际上,这个自由口通讯是可以正常使用的。这到底是怎么回事???
问题补充:
中断程序执行过程中,中断事件若是没有发生,中断程序不是像子程序一样扫描下一周期,而是等在那里,直到中断事件发生,然后执行中断程序???
中断程序执行完成后,还回到主程序吗?还是说因为我发的那个程序,中断执行完成后,又触发了下一个中断,所以不停的处理中断,主程序就一直停在那里了?
图片说明:
最佳答案
这个过程是当定义中断(一次调用SM0.1)后,当程序段出现发送完成会自动产生中断的(中断事件9),这个中断的触发条件就是发送完成或者接收完成时产生的。另外,你还定义了一个定时中断(中断事件号23#),这个是定时中断,当时间计时到定时中断时间时,定时中断会中断触发,调用事先写在定时中断里面的程序,重复循环进行。
补充问题回复:
1)是的。当中断事件没有触发,相连的中断不执行程序的运行。
2)中断程序执行完成后会自动返回到主程序,等待下一个中断的调用。
如果多个中断被触发,中断程序按优先顺序执行的。
提问者对于答案的评价:
还有一些疑问,想请教一下。
既然中断程序执行完成后回到之前的主程序,那我主程序和子程序中只对所有模块进行了一次初始化,中断程序块只要一次初始化,就不需要再使能了吗?
最佳答案作者回复:
是的。
中断仅仅只需要一次初始化调用。
其中的内容,调用中断的事件号并开中断,系统会自动调用所选择的中断事件,任何中断默认值均是关闭的。
原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc142774.html