51单片机的外部中断的学习(一)

/*********************************************************************************
*     			 外部中断实验
* 实验现象: 下载程序后,按K3按键可以对LED进行取反,按一下K4按键可以对LED1进行取反。				
* 注意事项: 无	
* 
* 注意事项:
* interrupt0:外部中断0
* interrupt1:定时器中断0
* interrupt2:外部中断1
* interrupt3:定时器中断1
* interrupt4:串口			 
*********************************************************************************/
#include<reg52.h>

typedef  unsigned int uint16;
typedef  unsigned char uchar8;

sbit  k3 = P3^2;    // 定义按键 K3 
sbit  k4 = P3^3;	    // 定义按键 K4 

sbit  led = P2^0;	// 定义P2口为LED
sbit  led1= P2^1;    

/********************************************************************************
* 函数名:   delay 
*  功能 :	延时函数,i=1时,大约延时10us
*********************************************************************************/
void delay(uint16 i)
{

   while(i--);
}

/*********************************************************************************
*  函数名:   Int0Init()
*  函数功能: 设置外部中断0
*   输入:	 无
*   输出:	 无
**********************************************************************************/
void  Int0Int()
{
    // 设置INT0
	IT0 = 1;   // 跳变沿触发方式(下降沿触发)
	EX0 = 1;   // 打开INT0的中断允许
	EA  = 1;   // 开总中断

}

/*********************************************************************************
*  函数名:   Int0Init()
*  函数功能: 设置外部中断1
*   输入:	 无
*   输出:	 无
**********************************************************************************/
void  Int1Int()
{
    // 设置INT1
	IT1 = 1;   // 跳变沿触发方式(下降沿触发)
	EX1 = 1;   // 打开INT0的中断允许
	EA  = 1;   // 开总中断

}


/*********************************************************************************
*  函数名:   main()
*  函数功能: 主函数
*   输入:	 无
*   输出:	 无
**********************************************************************************/
void main()
{

	
   	 Int0Int();
	 Int1Int();
	 while(1);

}

/*********************************************************************************
*  函数名:   Int0()    interrupt 0
*  函数功能: 外部中断0的服务函数
*   输入:	 无
*   输出:	 无
**********************************************************************************/
void waibu0()  interrupt 0 
{
    delay(1000);
	if(k3==0)			  // 延时去抖
	{
	   delay(1000);
	   if(k3==0)
	   {
          led=~led;   

	   }
	
	}

}

/*********************************************************************************
*  函数名:   waibu1()    interrupt 2
*  函数功能: 外部中断1的服务函数
*   输入:	 无
*   输出:	 无
**********************************************************************************/

void waibu1()  interrupt 2
{
    delay(1000);
	if(k4==0)	        	// 延时去抖
	{
	   delay(1000);
	   if(k4==0)
	   {
          led1=~led1;   

	   }
	
	}

}

编程中要注意的事项:
1、外部中断0 编好以后 Int0()  interrupt 0 编写外部中断1的时候要用 interrupt 2 用 interrupt 1 ,会出现问题的。
2、外部中断1的编写也要打开,进行初始化操作
3、中断服务函数,不要进行声明,它是可以直接调用的
4、编写代码的时候要注意规范,养成良好的习惯


            

没有更多推荐了,返回首页