【51单片机外部中断应用】哪些I/O口可以用外部中断?

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;
	}
}
发布了76 篇原创文章 · 获赞 38 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_42605300/article/details/105460771