大家好,这节课我们学习中断指令。我们先来了解一下中断的概念。
1、什么是中断?
所谓中断,是指CPU在正常运行程序时,由于内部/外部事件或由程序预先安排的事件,引起CPU中断正在运行的程序,而转到为内部/外部事件或为预先安排的时间服务的程序中去,服务完毕,再返回去执行被中断暂停的程序。
2、中断的作用
中断跟扫描周期无关,响应快,只要中断事件发生才去执行程序,可以节省时间,避免等待和浪费时间。那么中断可以做出来一些比较特殊的,比较紧急的事情,例如急停。
3、中断的分类
中断主要分为3类
(1)输入输出中断简称I/O中断,又包括输入中断(8个);输出中断:高速计数器中断14个,高速脉冲输出中断2个。
(2)时基中断,又包括:定时循环中断2个(SMB34/SMB35),定时器中断2个(T32/T96)
(3)通讯中断6个。
4、CPU响应中断的原则
(1)当不同优先级别的中断事件同时发出申请中断时,CPU先响应优先级别高的中断事件。
(2)在相同优先级别的中断事件中,CPU按“先来后到”的原则处理中断事件。
(3)CPU在任何时刻只执行一个中断程序,当CPU正在处理某中断时,不会被别的中断程序甚至是优先级别更高的中断程序所打断,一直执行到结束,新出现的中断时间需要排队,等待处理。
(4)中断事件被触发,立刻执行中断程序,中断程序不存在嵌套。
这里我们先在程序当中,来梳理一下中断指令。
按下F1之后,在帮助文件里,寻找“中断事件优先级别表”。
重点来了解事件号码中的0-7这几项:
这里说明一下,中断事件的号码,是从0-33,共计34类中断事件。这里的中断说明,是介绍了事件号码对应的启动条件。举例说明,如实践号码为5,则意味着这个中断指令,在收到外部信号触发影响时,一定是I0.2的下降沿,作为启动条件的。而事件优先级,指的是当两个中断指令被同时触发时,按照优先级高的先执行,优先级低的后执行的规则来处理。
我们来软件中,编辑一条中断指令:
我们要注意,触发中断指令的外部条件,要与事件号(EVNT)条件相一致;INT数与中断程序名称相一致。打比方说,“I0.0 下降沿”,好比一把钥匙,而EVNT中的1好比是1号房间,那只有当1号房间的钥匙,插入1号房间的锁里,才能打开1号房间。打开之后做什么呢?通过指令连接INT_0中断程序里面的内容。
这里说明一下,由于中断程序的执行,不受扫描周期的影响,而是立即响应的。所以激活它的条件一定是用到(上升/下降)沿指令,而且只需触发一次即可。
在新建(插入)中断程序的时候,方法与新建子程序的方式是一致的,不做赘述。
那可能会问,指令激活已完成,中断程序连接也接上了,那是不是就可以监控到输出的结果了呢?
答案是否定的,因为还需要开放中断(ENI),简单说就是中断程序执行后的结果,你要通过ENI指令,让全局都可以调用和监控。
归纳起来,中断程序的执行,总共分三步:
- 激活中断(1次即可)
- 中断事件连接中断程序
- 开放中断程序(结果)
未完待续。