外部中断分为五个优先级,分别为外部中断0:INT0 定时/计数器0:TF0 外部中断1:INT1 定时/计数器1: TF1 串口中断: R1/T1 分别对应的中断序号为 0 , 1 ,2 ,3 ,4
中断服务函数有三个特殊格式要求:
<1> 中断函数没有返回值,也不能带参数;
<2> 函数名字后面要跟一个关键字interrupt,说明这是一个中断服务函数;
<3> 在关键字interrupt后面要跟上中断号,说明这是一个中断服务函数是为哪个中断服务的;
中断服务函数的格式为:
Void 函数名( ) interrupt
{-函数体- }
下图为中断标准写法:
void Init_INT0()
{
}
void ServiceINT0()interrupt 0
{
}
首先void Init_INT0( ){ }配置中断,然后使用中断服务函数void ServiceINT0( )interrupt { }
执行中断。
配置中断相关的寄存器有4个,其中了2个为控制寄存器:IE寄存器与IP寄存器
另外2个为中断请求标志: TCON 寄存器(常用的寄存器)与SCON寄存器(串口用):
一般使用 按键外部中断 用:
void Init_INT0()
{
EA = 1; // 中断总开关使能
EX0 = 1; // EX0外部中断使能
IT0 = 1; // 设置中断模式为下降沿触发
}
以下代码会使按键S5每按一下,亮一个LED灯
#include "reg52.h"
sbit P32 = P3^2;
sbit P27 = P2^7;
sbit P26 = P2^6;
sbit P25 = P2^5;
unsigned char i = 0;
void delay(unsigned int t)
{
while(t--);
}
void HC573()
{
P27 = 1;
P26 = 0;S
P25 = 0;
}
void Init_INT0()
{
EA = 1; // 中断总开关使能
EX0 = 1; // EX0外部中断使能
IT0 = 1; // 设置中断的模式为下降沿触发
}
void ServiceINT0()interrupt 0
{
i++;
}
void led()
{
HC573();
P0 = 0xff << i;
}
void main()
{
Init_INT0();
while(1)
{
led();
}
}