1. 中断分类
本章我们来写有关于单片机的中断的内容,首先关于什么是中断,其实就是我的程序在正常执行的时候,我们接收到了一个信号,之后我们就去执行我们写的中断函数里面的内容,而这个信号主要是分为了三类,第一类就是我们的单片机不是在运行的时候外部不是接了一个晶振么,有了晶振我们就可以记时,所以第一类就是定时器中断,第二类是我们不是有gpio口么,而51单片机有两个特别特殊的gpio口P3.4和P3.5,他们可以通过接收外来的脉冲,我们可以通过设置接收多少个脉冲之后就发一个信号,其实就是一个计数器,所以第二类就是计数器中断,而第三类就是我们的单片机上有两个口RXD和TXD,我们在这两个口发送或者接收到数据的时候,会引起中断,这就是第三类中断串口中断。
2.关于中断的优先级
首先要说的是什么是中断优先级,就是说其实中断是分级别的,如果我在执行我的中断函数的时候,刚好另一个中断来了,我应该怎么办,这个时候其实就是中断优先级的作用了,我的中断优先级高的执行的时候,那就只有等着我的高优先级中断执行完了之后,再执行低优先级的中断函数,而低优先级的中断函数在执行的时候高优先级的中断来了,就立刻执行高优先级中断,然后再执行低优先级中断。而我们关于优先级单片机一共有6个中断源.他们的优先级分别是INT0-外部中断0,由P3.2端口线引入,低电平或下降沿引起。INT1-外部中断1,由P3.3端口线口线引入,低电平或下降沿引起。T0-定时器/定时器0中断,由T0计数器记满回零引起。T1-定时器/计数器1中断,有T1计数器记满回满引起,T2-计时器/计数器2中断,由T2计数器记满回零引起。TI/RI-串口中断,串口端口完成一帧字符发送,接收后引起。
3. 中断寄存器
我们的51单片机为了控制我们的中断,于是就有许多寄存器需要我们去控制,其中CPU对所有中断的开放和屏蔽都是由中断允许控制寄存器(IE)来控制的
该寄存器可以进行位寻址,可以位寻址的意思就是说我们既可以直接给IE这个寄存器赋值,也可以给其中的某一位进行赋值,这个不需要记忆,每次需要使用的时候直接查就可以了。
EA-全局中断控制位
ETX-定时器/计数器X的中断允许位
EX-外部中断X中断允许位
而关于前面的中断优先级,我们一般都是使用默认的优先级,但是优先级我们是可以进行修改的,那就是中断优先级寄存器IP,这个也是可以进行位寻址的,关于这个寄存器一般使用不多,其实可以直接在网上搜一下就可以了。
4.中断服务程序
前面已经写了有关于中断的一些内容,我们这儿主要是说关于中断的函数的格式,格式如下
void my_interrupt() interrupt 0 using 0{
}
其中关于中断函数的返回值就是void,而interrupt是关键字,说明是中断函数,0是说明是0号中断,就是如下图所示的中断号,我们要写中断就需要写对应的中断号。
而关于后面的using 0或者什么的,我们一般忽略不写。至此我已经把51单片机的中断部分的内容简单介绍了一遍,关于更多的内容可以等下一篇的时候继续阐述。