51 中断系统 外部中断0 外部中断1

51单片机的中断系统结构

中断允许控制

CPU对中断系统所有中断以及某个中断源的开放和屏蔽是由中断允许寄存器IE控制的。

EX0(IE.0),外部中断0允许位;

ET0(IE.1),定时/计数器T0中断允许位;

EX1(IE.2),外部中断0允许位;

ET1(IE.3),定时/计数器T1中断允许位;

ES(IE.4),串行口中断允许位;

EA (IE.7), CPU中断允许(总允许)位。

中断请求标志

1、TCON的中断标志

IT0(TCON.0),外部中断0触发方式控制位。

        当IT0=0时,为电平触发方式。

        当IT0=1时,为边沿触发方式(下降沿有效)。

IE0(TCON.1),外部中断0中断请求标志位。

IT1(TCON.2),外部中断1触发方式控制位。

IE1(TCON.3),外部中断1中断请求标志位。

TF0(TCON.5),定时/计数器T0溢出中断请求标志位。

TF1(TCON.7),定时/计数器T1溢出中断请求标志位。      

中断源

中断响应条件

 中断源有中断请求;

n此中断源的中断允许位为1;

 CPU开中断(即EA=1)。

以上三条同时满足时,CPU才有可能响应中断


#include "reg51.h"   
#include "intrins.h"
typedef unsigned char u8;
typedef unsigned int u16;


sbit k1=P3^3;	 
sbit led=P2^0;	
void delay(u16 i)
{
	while (i--);
} 

//外部中断0条件
void Int0Init()
{
	IT0 = 1;	//设置外部中断的触发方式为下降沿触发。
	EX0 = 1;	//开启外部中断0
	EA = 1;		//中断总开关
}

//外部中断1条件
void Int1Init()
{
	IT1 = 1;	//设置外部中断1的触发方式为下降沿触发。
	EX1 = 1;	//开启外部中断1
	EA = 1;		//中断总开关
}

void main()
{
	Int1Init();
	while(1);
}
void Int0()	   interrupt 0
{
	  delay(1000);
	  if(k1 == 0)
	  {
	  	led= ~led;
	  }
}

void Int1()	   interrupt 2
{
	  delay(1000);
	  if(k1 == 0)
	  {
	  	led= ~led;
	  }
}

proteus 8 电路原理图,k3接p32,k4接p33。p32默认高电平,按下k3后,电平拉低,产生下降沿,触发中断0。同样k4按下,触发为中断1。

#include "reg51.h"   
#include "intrins.h"
typedef unsigned char u8;
typedef unsigned int u16;

sbit k3=P3^2;
sbit k4=P3^3;	 
sbit led=P2^0;	
void delay(u16 i)
{
	while (i--);
} 

//外部中断0条件
void Int0Init()
{
	IT0 = 1;	//设置外部中断的触发方式为下降沿触发。
	EX0 = 1;	//开启外部中断0
	EA = 1;		//中断总开关
}

//外部中断1条件
void Int1Init()
{
	IT1 = 1;	//设置外部中断1的触发方式为下降沿触发。
	EX1 = 1;	//开启外部中断1
	EA = 1;		//中断总开关
}

void main()
{
	Int0Init();
	while(1);
}
void Int0()	   interrupt 0
{
	  delay(1000);
	  if(k3 == 0)
	  {
	  	led= ~led;
	  }
}

void Int1()	   interrupt 2
{
	  delay(1000);
	  if(k4 == 0)
	  {
	  	led= ~led;
	  }
}
发布了139 篇原创文章 · 获赞 38 · 访问量 18万+

猜你喜欢

转载自blog.csdn.net/tjjingpan/article/details/92013577