单片机 中断

单片机 中断

一、简述

    中断,即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服务时调用此函数)

六、完整例子

文件打包:链接: https://pan.baidu.com/s/1Zuo1-bGvJV5YJU1Kq1Xh9w 密码: 195s

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

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

2、Keil文件结构


3、仿真电路


4、alarm.c文件

#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;//关蜂鸣器
}

猜你喜欢

转载自blog.csdn.net/nanfeibuyi/article/details/80513054