51单片机第五弹---外部中断

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_16255321/article/details/42774001

写了半天掉线了。。。

不写了上定义。。。

什么叫中断
中断是指CPU在执行当前程序的过程中,由于某种随机出现的外设请求或CPU内部的异常事件,使CPU暂停正在执行的程序而转去 执行相应的服务处理程序;当服务处理程序运行完毕后,CPU再返回到暂停处继续执行原来的程序。
51单片机的中断
80c51提供有5个中断源,分别为:2个外部中断,2个定时/计数器中断,1个串口发送/接收中断。并且具有2个中断优先级,可以实现2级中断服务程序嵌套。

首先要弄中断设置 ,中断原理图如下:

             

以 设置INT0为例:IT0=1;EX0=1; 

最后打开总中断 EA=1;

 如图 : 

          

2个外部中断分别接 p3.2 p3.3 即开关K3 K4  ,也就是说按开关K3转到外部中断0程序,按开关K4转到外部中断1程序

/*******************************************************************************
* 实 验 名		 : 外部中断实验
* 使用的IO	     : 外部中断0使用P3.2 外部中断1使用P3.3	 LED使用P2
* 实验效果       : 按K3 LED左移 按K4 LED右移
* 注    意		 :
*******************************************************************************/
#include <reg52.h>
#include <intrins.h>
#define GPIO_LED P2
#define GPIO_DIG P0
#define GPIO_KEY P1
#define uint unsigned int
#define uchar unsigned char
void Delay10ms();
void IntConfiguration();
sbit K3=P3^2;
sbit K4=P3^3;
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;
uchar code DIG_CODE[17]={
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
uchar Value=0;
void main()
{
	uint n=10;
	IntConfiguration();
	GPIO_LED=0xfe;
	while(1)
	{
		if(Value)
			GPIO_LED=_crol_(GPIO_LED,1);
		else
			GPIO_LED=_cror_(GPIO_LED,1);
		while(n--)Delay10ms();
		n=10;
	}
}
void Delay10ms()
{
    uchar i=38,j=130;
    while(i--)
        while(j--);
}
void IntConfiguration()
{
	//设置INT0
	IT0=1;
	EX0=1;
	//设置INT1
	IT1=1;
	EX1=1;
	//打开总中断
	EA=1;
}
void Int0() interrupt 0
{
	Delay10ms();
	if(K3==0)
		Value=1;
}
void Int1() interrupt 2
{
	Delay10ms();
	if(K4==0)
		Value=0;
}


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