51单片机具有5个中断源,其中有两个外部中断INT0、INT1。
1、外部中断0:INT0,其对应的引脚为P3^2。
#include "reg52.h"
typedef unsigned int u16;
typedef unsigned char u8;
sbit k3=P3^2; //定义按键K3,外部中断0触发I/O口
sbit led=P2^0; //定义P20口是led
/*******************************************************************************
* 函 数 名 : delay
* 函数功能 : 延时函数,i=1时,大约延时10us
*******************************************************************************/
void delay(u16 i)
{
while(i--);
}
/*******************************************************************************
* 函 数 名 : Int0Init()
* 函数功能 : 设置外部中断0
*******************************************************************************/
void Int0Init()
{
//设置INT0
IT0=1; //跳变沿出发方式(下降沿). PS:INT0=0,即为低电平触发
EX0=1; //打开INT0的中断允许。
EA=1; //打开总中断
}
/*******************************************************************************
* 函 数 名 : main
* 函数功能 : 主函数
*******************************************************************************/
void main()
{
Int0Init(); // 设置外部中断0
while(1);
}
/*******************************************************************************
* 函 数 名 : Int0() interrupt 0
* 函数功能 : 外部中断0的中断函数
*******************************************************************************/
void Int0() interrupt 0 //外部中断0的中断函数
{
delay(1000); //延时消抖
if(k3==0)
{
led=~led;
}
}
2、外部中断1:INT1,其对应的引脚为P3^3。
#include "reg52.h"
typedef unsigned int u16;
typedef unsigned char u8;
sbit k4=P3^3; //定义按键K4,外部中断1的触发I/O口
sbit led=P2^0; //定义P20口是led
/*******************************************************************************
* 函 数 名 : delay
* 函数功能 : 延时函数,i=1时,大约延时10us
*******************************************************************************/
void delay(u16 i)
{
while(i--);
}
/*******************************************************************************
* 函 数 名 : Int1Init()
* 函数功能 : 设置外部中断1
*******************************************************************************/
void Int1Init()
{
//设置INT1
IT1=1; //跳变沿出发方式(下降沿). PS:INT1=0,即为低电平触发
EX1=1; //打开INT1的中断允许。
EA=1; //打开总中断
}
/*******************************************************************************
* 函 数 名 : main
* 函数功能 : 主函数
*******************************************************************************/
void main()
{
Int1Init(); // 设置外部中断0
while(1);
}
/*******************************************************************************
* 函 数 名 : Int1() interrupt 2
* 函数功能 : 外部中断1的中断函数
*******************************************************************************/
void Int1() interrupt 2 //外部中断1的中断函数
{
delay(1000); //延时消抖
if(k4==0)
{
led=~led;
}
}