51单片机之中断系统,外部中断

什么是中断系统

中断分为4个步骤:中断请求→中断相应→中断处理→中断返回(先做更重要的事)
1、数据的输入/输出传送方式

P3第二功能各引脚功能定义:

51单片机五个中断源

外部中断源(2个)

外部中断要看对应引脚外部的电平状态。
例如:外部中断0(INT0)对应的引脚是P32,
当出现低电平,即P32引脚连接的地方是低电平,进入相应的中断函数;
当出现下降沿,即P32引脚连接的地方由高电平变为低电平,进入相应的中断函数

内部中断源(3个)

内部中断源要看单片机内部的定时器/计数器

51单片机中断系统内部结构图
一、允许中断

中断允许寄存器IE

二、配置中断方式

定时器/计数器0/1控制寄存器TCON

三、编写中断处理函数

对同时发生多个中断申请时:
不同优先级的中断同时申请:先高后低
相同优先级的中断同时申请:按序执行
正处理低优先级中断又接到高级别中断:高打断低
正处理高优先级中断又接到低级别中断:高不理低

//中断处理函数
void int1() interrupt 2  //interrupt后加中断入口号,如interrupt 2就是外部中断1的处理函数
{
//中断处理语句
}
//外部中断1初始化:
EA = 1;  //开总中断
EX1 = 1;  //开外部中断1
IT1 = 1;  //跳变沿触发

初始化的意思如图所示

写一个使用 外部中断1 的程序

实现思路
查看上方 P3第二功能各引脚功能定义,P3.3是外部中断1 (INT1)的外部输入引脚

编写一个程序,使得S2按键按下时,某个IO口(下面程序选择了P3.7这个IO口)产生跳变沿(由1变0)。P3.3与P3.7用跳线连接,使P3.3口与P3.7口同时产生跳变沿。

#include 
#include 

#define uint unsigned int
#define uchar unsigned char

sbit DU = P2^6;  //数码管段选
sbit WE = P2^7;  //数码管位选
sbit key_s2 = P3^0;  //独立按键s2
sbit flag = P3^7;  //外部中断信号产生脚

void delay(unsigned int z)
{
    unsigned int x, y;
    for(x = z; x > 0; x--)
        for(y = 114; y >0; y--);
}

//外部中断1初始化
void int1Init()
{
    EA = 1;  //开总中断
    EX1 = 1;  //开外部中断1
    IT1 = 1;  //外部中断1下降沿触发
}

//外部中断1服务程序
void int1() interrupt 2
{
    P1 = ~P1;  //控制LED灯亮与灭
}

void main() 
{
    int1Init();  //外部中断1初始化
    while(1)
    {
        if(key_s2 == 0)  //判断s2是否被按下
        {
            delay(20);  //按键消抖
            if(key_s2 == 0)  //确认按键确实是被按下的
            {
                flag = 1;
                flag = 0;  //P37口由1变0,产生跳变沿
                while(!key_s2);  //松手检测
            }
        }   
    }
}

你可能感兴趣的:(51单片机之中断系统,外部中断)