示意
    image.png
    51单片机最多二级中断嵌套。
    image.png
    外部中断,触发器
    image.png
    IT0(TCON.0),外部中断0触发方式控制位。
    当IT0=0时,为电平触发方式。
    当IT0=1时,为边沿触发方式(下降沿有效),可由软件置1或清0。
    IE0(TCON.1),外部中断0中断请求标志位。
    IT1(TCON.2),外部中断1触发方式控制位。
    IE1(TCON.3),外部中断1中断请求标志位。
    TF0(TCON.5),定时/计数器T0溢出中断请求标志位。
    TF1(TCON.7),定时/计数器T1溢出中断请求标志位。

    1. IT0=1; //对寄存器中某一位进行操作
    2. TCON=0X01//直接对寄存器操作

    中断允许,由5个中断源组成
    image.png
    EX0(IE.0),外部中断0允许位;
    ET0(IE.1),定时/计数器T0中断允许位;
    EX1(IE.2),外部中断0允许位;
    ET1(IE.3),定时/计数器T1中断允许位;
    ES(IE.4),串行口中断允许位;
    EA (IE.7), CPU中断允许(总允许)位,没开时为普通IO口,开时为总中断控制位。

    优先级
    中断不止一个时,存在优先权排队问题,此时优先权高的中断先发生,高级中断处理完成后返回低级中断继续处理。最多允许两级嵌套。
    image.png

    中断号
    表示中断优先级
    image.png
    image.png
    中断响应条件**
    中断源有中断请求;
    此中断源的中断允许位为1;
    CPU开中断(即EA=1)。

    1. EA=1//打开总中断开关
    2. EX0=1//开外部中断0
    3. IT0=0/1//设置外部中断的触发方式

    以上三条同时满足时,CPU才有可能响应中断

    使用中断之前,应先对自己提问:
    你想使用的中断是哪个?选择相应的中断号;
    你所希望的触发条件是什么?
    你希望在中断之后干什么?
    C51的中断函数格式如下:
    void 函数名()interrupt 中断号 using 工作组
    {
    中断服务程序内容

    中断函数不能返回任何值,所以最前面用void;后面紧跟函数名,名字可以随便起,但不要与C语言中的关键字相同;中断函数不带任何参数,所以函数名后面的小括号内为空;中断号是指单片机中几个中断源的序号,可查询上表。最后面的”using工作组”是指这个中断函数使用单片机内存中4组工作寄存器中的哪一组,C51编译器在编译程序时会自动分配工作组,因此最后这句话我们通常省略不写。
    代码实现

    1. void Int1Init() //触发函数
    2. {
    3. IT1=1;
    4. EX0=1; //打开允许位
    5. EA=1; //打开总中断
    6. }
    7. void main()
    8. {
    9. Int1Init(); //外部中断1
    10. while(1);
    11. }
    12. void Int0() interrupt 2//中断号
    13. {你想干什么}