一旦形成中断,程序会直接跳转到中断程序,执行中断程序中的程序。中断程序执行后,如果中断信号还在,plc将继续执行中断,直到中断信号不在或部分可以强制取消。在很多中断程序中,没有程序可以写,比如通信和非关键硬件检测丢失。这可以减少plc的中断恢复时间。或者避免不必要的长期终止正常程序。当中断程序启动时,其他用户程序将不会被执行。根据用户程序的情况,如果中断程序不涉及复位,可能会保持一些输出。
中断是有优先级的,每个plc的分类方法都不一样,但大多数都是大量中断先于少量数据。
1.为以下目的设置优先级::。
每个线程都有优先级。一般来说,优先级高的线程在运行时会有优先级,但这取决于线程调度的实现,这是os依赖的。
您可以定义线程的优先级,但这并不保证高优先级线程会在低优先级线程之前执行。
线程优先级是一个int变量(从1到10),其中1代表最低优先级,10代表最高优先级。
打开中断后,应设置中断优先级。这使用ip寄存器-中断优先级、中断优先级控制寄存器。
(ip.7:保留)
(ip.6:保留)
pt2(ip.5):如果为1,定时器2中断应设置为版本高优先级(仅适用于8052及其增强版本)。
ps(ip.4):如果为1,串行中断被设置为高优先级。
pt1(ip.3):如果为1,定时器1中断设置为高优先级。
px1(ip.2):如果为1,外部中断1被设置为高优先级。
pt0(ip.1):如果为1,定时器0中断设置为高优先级。
px0(ip.0):如果为1,外部中断0被设置为高优先级。
单片机只有两个优先级,这里我们设置外部中断0为高优先级。
中断子程序运行后,应该有消除中断标志的操作,汇编语言是reti指令。中断程序完成后,必须执行reti指令。执行完这条指令后,cpu会取出存储在堆栈中的地址,并发送给pc,这样程序就会从主程序的中断点继续执行。中断指令"reti",作为一个中断跳转指令,不仅取出堆栈中存储的地址并发送回pc机,使程序从主程序的中断点继续执行,还具有清除"优先有效"扳机。
因为是边沿跳变触发模式,所以不需要消除抖动。