今天我们来了解一下中断系统,在学习之前,我们首先要了解一下什么是中断:
中断,顾名思义,就是终止停止的意思,在程序中,我们可以在主函数中设置中断,当主函数运行时候达到某种特定的条件的时候,就会跳出主函数执行框,进入中断并执行中断,例如我们可以设计,当某个按键被按下的时候,led灯亮起之类。
我们理解了中断的目的之后,接下来了解一下中断的结构:
这里我们只讲51单片机所共有的端口,有外部中断0,1,定时器0,1和串口(必不可少,其他看外设是否有增加,使用方法也一致),我们在使用的时候,需要设定程序,打开对应的中断源放行,最终使电信号得以传导,实现目的。中断优先级可以由程序设置,高优先级可以打断低优先级,而低优先级不可打断高优先级(如图)。如果没有程序设置,则遵循自然排序,即以INT0,T0,INT1,T1,RX,TX依次向下递减(INT0最高,TX最低),可以通过寄存器修改例如将INT0与T0改为同一优先级,假如同时发生,则会按照原本的顺序(INT0优先级高于T0)
接着我们观察一下内部结构
TCNO部分:
INT0中断可以由IT0寄存器进行选择是低电频有效还是下降沿有效(1是下降沿,对应图中方框内下降标识;0是低电频,对应图中方框内的1)设置好了之后来了对应标志可以使IE0置1,说明来了一个中断事件。
IE部分:
用于控制各类外部中断可以理解为一个有很多开关并联串联而成的电路区域,EX0到ES这块区域是每一条支路对应的开关,若要使用要打开(输入1),而EA则相当于一个总开关,不打开则所有中断都无法使用,是很重要的一换,在程序中绝对不能漏掉。
IP部分:
用于设置中断优先级,这里我们不用设置,默认连在0上,则中断按照默认顺序表触发。
了解了整个中断的大题结构之后,我们就能很容易得出中断运行的三个必要条件:
1.中断源有中断请求,即外部条件的改变,引发了中断,并成功发送请求。
2.中断源的中断允许位为1,就是要把对应的中断允许位打开(如IT0口等),才可以将信号传递至cpu内。
3.cpu开中断(EA=1),这个相当于一个总阀门,如果不打开,则所有中断无法进入CPU,设置程序时一定要注意。
接着我们来了解一下程序设计部分,知晓该如何用程序实现上述功能:
刚开始,先定义u8与u16字符大小,方便后续引用。本程序可实现按下按键,使得led灯亮,再次按下灭灯,所以定义led灯和按键,在四个按键中,P3^2(从左往右数第三个按键对应IT0),P3^3(对应IT1)不但有独立按键功能,还有中断功能(51单片机的设定),因此我们利用按键按下的信号,模拟中断申请的信号,按下按键,触发中断,进而接下来的程序。
定义延时函数,因为独立按键按下之后电型号开始不稳定,需要消抖。然后进入中断函数:先输入函数名称(自拟),然后设置下降沿触发,即IT0=1,按键按下一瞬间,就可传入电信号,比低电频更快,更方便,接着将外部中断允许位EX0设置为1(对应IT0,在一条路上,看图设置),最后打开总中断EA0即可完成整个中断函数。
21~26为按下P3^3按键的程序,如出一辙,本程序无用,但可练习作为参考。
接着就是写主函数,只需调用一下函数即可。
最后设定中断,为什么要写最后一个函数,目的是告诉单片机,进入服务函数说明来了一个下降沿,要不然单片机无法识别,这个函数也是51固有格式(开头)先void(一般返回均为空)函数名(),后面一定要加上interrupt 0,代表中断,才可调用中断函数。
里面的设计同独立按键一致,这里不多阐述,不理解的可以看https://blog.csdn.net/id212204999/article/details/137735245
现在之后运行即可,以上就是单片机中断系统的内容。