天天看点

单片机中断 - 技术总结

博主福利:100G+电子设计学习资源包!

​​http://mp.weixin.qq.com/mp/homepage?__biz=MzU3OTczMzk5Mg==&hid=7&sn=ad5d5d0f15df84f4a92ebf72f88d4ee8&scene=18#wechat_redirect​​ --------------------------------------------------------------------------------------------------------------------------

一、简述

    中断,即CPU在正常执行程序的过程中,遇到外部/内部的紧急事件需要处理,暂时中断(中止)当前程序的执行,而转去为事件服务,待服务完毕,再返回到暂停处(断点)继续执行原来的程序。

单片机中断 - 技术总结

二、中断请求标志控制寄存器TCON

单片机中断 - 技术总结

三、中断请求标志控制寄存器SCON

单片机中断 - 技术总结

四、中断允许寄存器IE

单片机中断 - 技术总结

五、中断函数

中断函数定义的格式为:

函数类型 函数名 interrupt   n  using  m

其中:

    interrupt 后面的n 是中断号。

    关键字using 后的m 是所选择的寄存器组,取值范围是0~3。

using m这部分通常可以省略,由编译器自动选择一个寄存组。

举例:

void int0rupt() interrupt 0    

{        

    beep=0;//开蜂鸣器    

    while(P3_2!=1);//当P3^2口一直是低电平时,就一直告警

    beep=1;//关蜂鸣器

}

void 是函数类型表示空类型

int0rupt是函数名

interrupt 0中的0表示该函数是为外部中断0服务的处理函数(当外部申请中断0服务时调用此函数)

六、完整例子

1、效果:当按键按下时,蜂鸣器就会响,不松开就一直响,松开关闭。

    (主程序死循环,通过CPU中断可以暂时中断,先执行其他任务,然后再回来继续执行被中断的任务。例子中开启外部中断0,中断方式为下降沿触发,比如控制端口原来是高电平的,按下按钮使控制端口变为低电平,高电平到低电平有个下降过程,下降沿触发中断0,调用中断服务处理函数,蜂鸣器响。中断服务处理函数有个循环检测直到按钮释放才关闭蜂鸣器,退出中断服务处理函数,控制端口恢复为高电平。)

2、Keil文件结构

单片机中断 - 技术总结

3、仿真电路

单片机中断 - 技术总结
#include<reg51.h>
#define uint unsigned int
#define uchar unsigned char
sbit P3_2=P3^2;//将P3^2定义为中断0控制口
sbit beep=P3^3;//将P3^3定义为蜂鸣器控制口
void main()
{
    EA=1;//开许总中断
      EX0=1;//开外部中断0
     IT0=0;//中断触发方式为低电平触发
    while(1)  //主程序一直在死循环,外部中断可以暂时执行中断处理函数
    {}
}
/**********************************************************/
//函数名:int0rupt() interrupt 0
//功能:外部中断0中断响应程序 
//调用函数:
//输入参数:
//输出参数:
//说明:当P3^2口为低电平时进入响应程序 
/**********************************************************/
void int0rupt() interrupt 0//当P3^2键口为低电平时
{
    beep=0;//开蜂鸣器
    while(P3_2!=1);//当P3^2口置高检测,就是按钮不释放蜂鸣器就一直响
    beep=1;//关蜂鸣器
}