中断

中断系统
主程序遇中断请求后,执行中断请求处理程序,完成后继续执行主程序。
51里有5个中断源。2个优先级,可以实现二级中断的嵌套。51中断系统结构图。

这里写图片描述


从上图可以看出中断优先级顺序:外部中断0、定时器中断0、外部中断1、定时器中断1、串口中断。
1. INT0外部中断0由P3.2引入,低电平或者下降沿触发。中断号0
2. INT1外部中断1由P3.3引入,低电平或者下降沿触发。中断号2
3. T0定时器/计数器0中断,由T0计数器计满回零触发。中断号1
4. T1定时器/计数器1中断,由T1计数器计满回零触发。中断号3
5. T1/R1串行口完成一帧字符发送或接收后引发此中断。中断号4

51单片机的IT0位是控制外部中断0的触发方式的,如果IT0设置为0,则外部中断0引脚被拉至低电平即可引发外部中断;如果IT0设置为1,则外部中断0引脚需要检测到下降沿才能引发外部中断。(外部中断1同理IT1)。

下降沿触发指中断允许后,只要中断引脚的信号出现下降沿,就触发中断,使用时注意,如果信号出现抖动,会导致多次触发中断。

低电平出发是指中断允许后,只要中断引脚的信号是低电平,就触发中断,使用时注意,如果低电平一直保持,会导致多次触发中断。

EX0是外部中断0的使能控制位,如果EX0设置为0,则外部中断0失效,无论外部中断引脚如何变化,都不会发生外部中断。


TMOD

这里写图片描述
这里写图片描述

开中断
void init()//开外部中断0,中断号0
{
    EA=1;//开全局中断
    EX0=1;//允许外部中断0
    IT0=1;//下降沿引发外部中断
}
void init()//开外部中断1,中断号2
{
    EA=1;   
    EX1=1;//允许外部中断1
    IT1=1;//下降沿引发外部中断
}
void init()//开定时器T0
{
    TMOD=0X01;
    //TH0=0;TL0=1;
    EA=1;
    ET0=1;  //允许定时器中断T0中断
    TR0=1;  //开T0中断
}
void init()//开定时器T1
{
    TMOD=0X10;
    //TH1=0;TL1=1;
    EA=1;
    ET1=1;  //允许定时器中断T0中断
    TR1=1;  //开T0中断
}
开中断实例
void init()
{
    EA = 1;   //开全局中断
    EX0 = 1;//INT0中断允许
    IT0 = 1;//触发方式为下降沿触发
    EX1 = 1;//INT0中断允许
    IT1 = 1;//触发方式为下降沿触发

    TMOD = 0x19;      //选工作方式

//  TH0 = 0x4C;       //给定初值,循环20次为一秒
//  TL0 = 0x00;

    TH1 = 0xff;       //给定初值
    TL1 = 0x00;

//  ET0 = 1;           //定时器中断打开(优先级0低)
    ET1 = 1;
//  TR0 = 1;           //T0开关打开
    TR1 = 1;           //T1定时器开关关闭
}
例子(按键通过中断0控制灯亮灭)

按键口连接P3.2/INT0口,IT0=1改为IT0=0后,改为低电平触发,按下按钮后一直保持低电平,则小灯一直亮着。直到再按一次按钮。参照中断图。

include <reg51.h>
sbit LED=P0^0;
void main()
{   
    LED=0;/*初始灯不亮*/
    EA=1;/*开全局中断*/
    EX0=1;/*允许INT0中断*/
    IT0=1;/*设置外部中断触发方式:下降沿触发
              思考:如果修改为:低电平触发呢?*/
    while(1); /*等待中断*/ 
}
void EX_INT0() interrupt 0       /*INT0中断服务程序*/
{
    LED=~LED;  //控制LED亮灭
}

中断寄存器
  1. 中断允许控制寄存器IE
  2. 定时器控制寄存器TCON
  3. 串口控制寄存器SCON
  4. 中断优先控制寄存器IP
  5. 定时器工作方式控制寄存器TMOD
  6. 定时器初值赋予寄存器(TH0/TH1,TL0/TL1)
IE

这里写图片描述
EX0:外部中断0允许位;
ET0:定时/计数器T0中断允许位;
EX1:外部中断1允许位;
ET1:定时/计数器T1中断允许位;
ES :串行口中断允许位;
EA :CPU中断允许(总允许)位。

TCON

这里写图片描述
IT0:外部中断0触发方式控制位
当IT0=0时,为电平触发方式(低电平有效)
当IT0=1时,为边沿触发方式(下降沿有效)
IE0:外部中断0中断请求标志位
IT1:外部中断1触发方式控制位
IE1:外部中断1中断请求标志位
TF0:定时/计数器T0溢出中断请求标志位
TF1:定时/计数器T1溢出中断请求标志位

SCON

这里写图片描述
RI:串行口接收中断标志位。当允许串行口接收数据时,每接收完一个串行帧,由硬件置位RI。注意,RI必须由软件清除。
TI:串行口发送中断标志位。当CPU将一个发送数据写入串行口发送缓冲器时,就启动了发送过程。每发送完一个串行帧,由硬件置位TI。CPU响应中断时,不能自动清除TI,TI必须由软件清除。

IP

这里写图片描述
PX0:外部中断0优先级设定位
PT0:定时/计数器T0优先级设定位
PX1:外部中断0优先级设定位
PT1:定时/计数器T1优先级设定位
PS :串行口优先级设定位
PT2:定时/计数器T2优先级设定位

中断响应的条件
  1. 中断源有中断请求
  2. 此中断源的中断允许位为1
  3. 开中断(即EA=1)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值