51单片机两个中断及中断嵌套

文章目录


前言

提示:这里可以添加本文要记录的大概内容:

课程需要:


提示:以下是本篇文章正文内容,下面案例可供参考

一、中断嵌套是什么?

二、两个同级别中断

2.1 中断运行关系

主函数->中断0->主函数

主函数->中断1->主函数

主函数->中断0->中断1->主函数

主函数->中断1->中断0->主函数

2.2 测试程序

关键:

复制代码
   		PX0=0;			//外部中断0为低优先级
   		PX1=0;			//外部中断1为低优先级

代码如下(示例):

c 复制代码
#include <reg51.h>
#define uchar unsigned char
void Delay(unsigned int i)		//延时函数Delay( )
{	
  unsigned int j;
  for(;i > 0;i--)		
   for(j=0;j<125;j++)		
  {;}					//空函数
}
void  main( )		//主函数
{
  	uchar display[9]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
                              //流水灯显示数据组		
	uchar a;


	for(;;)		
	{
	  		EA=1;			//总中断允许
	   		EX0=1;			//允许外部中断0中断
	   		EX1=1;			//允许外部中断1中断
	   		IT0=1;			//选择外部中断0为跳沿触发方式
	   		IT1=1;			//选择外部中断1为跳沿触发方式
	   		PX0=0;			//外部中断0为低优先级
	   		PX1=0;			//外部中断1为高优先级
	for(a=0;a<9;a++)		
	{						
	    Delay(500);		//延时
	   P1=display[a];		//流水灯显示数据送到P1口驱动LED显示
	 } 	

}
}
void int0_isr(void)  interrupt 0  using 0   //外中断0中断函数
{	
  for(;;)
  {
  	P1=0x0f;		//低4位LED灭,高4位LED亮
  	Delay(400);		//延时
  	P1=0xf0;		//高4位LED灭,低4位LED亮
 	Delay(400);		//延时
  } 							
}

void int1_isr (void)  interrupt 2  using 1  //外中断1中断函数
{
  uchar m;
  for(m=0;m<5;m++)			//8位LED全亮全灭5次
  {
  	P1=0;				//8位LED全亮
   	Delay(500);			//延时
   	P1=0xff;			//8位LED全灭
   	Delay(500);			//延时
  }
}

中断 1无法打断中断0 同级


三、两个不同级别中断实现中断嵌套

3.1 中断运行关系

中断0 高级中断

中断1 低级中断

主函数->高级中断->主函数

主函数->低级中断->主函数

主函数->低级中断-->高级中断->主函数

主函数->高级中断->低级中断->主函数

嵌套:

主函数->低级中断(执行到一半)->高级中断->低级中断(执行下一半)->主函数

3.2 测试程序

关键:

复制代码
   		PX0=0;			//外部中断0为低优先级
   		PX1=1;			//外部中断1为高优先级

代码如下(示例):

c 复制代码
#include <reg51.h>
#define uchar unsigned char
void Delay(unsigned int i)		//延时函数Delay( )
{	
  unsigned int j;
  for(;i > 0;i--)		
   for(j=0;j<125;j++)		
  {;}					//空函数
}
void  main( )		//主函数
{
  	uchar display[9]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
                              //流水灯显示数据组		
	uchar a;


	for(;;)		
	{
	  		EA=1;			//总中断允许
	   		EX0=1;			//允许外部中断0中断
	   		EX1=1;			//允许外部中断1中断
	   		IT0=1;			//选择外部中断0为跳沿触发方式
	   		IT1=1;			//选择外部中断1为跳沿触发方式
	   		PX0=0;			//外部中断0为低优先级
	   		PX1=1;			//外部中断1为高优先级
	for(a=0;a<9;a++)		
	{						
	    Delay(500);		//延时
	   P1=display[a];		//流水灯显示数据送到P1口驱动LED显示
	 } 	

}
}
void int0_isr(void)  interrupt 0  using 0   //外中断0中断函数
{	
  for(;;)
  {
  	P1=0x0f;		//低4位LED灭,高4位LED亮
  	Delay(400);		//延时
  	P1=0xf0;		//高4位LED灭,低4位LED亮
 	Delay(400);		//延时
  } 							
}

void int1_isr (void)  interrupt 2  using 1  //外中断1中断函数
{
  uchar m;
  for(m=0;m<5;m++)			//8位LED全亮全灭5次
  {
  	P1=0;				//8位LED全亮
   	Delay(500);			//延时
   	P1=0xff;			//8位LED全灭
   	Delay(500);			//延时
  }
}

中断 1能打断中断0 不同级

总结

同级别不能中断嵌套,不同级别实现中断嵌套

相关推荐
蹊黎9 小时前
Linux 下用 C 语言实现进度条
linux·c语言·单片机
无敌贵点大王12 小时前
从寄存器层面重学STM32(6)——串口USART实战部分
stm32·单片机·嵌入式硬件
庙堂龙吟奈我何12 小时前
二进制和十六进制
stm32·单片机
国科安芯14 小时前
长期在轨的计算底座:商业空间站与在轨服务飞行器健康管理中的抗辐射MCU—— 面向可维护空间平台的分层容错与安全通信综述
人工智能·单片机·嵌入式硬件·安全·低轨卫星·抗辐射
不昀16 小时前
RMII切到10Mbps,50MHz参考时钟也要降到5MHz吗?
单片机·嵌入式硬件·硬件设计·以太网接口
路上有只喵17 小时前
认识元器件 · 单片机(MCU/MPU/SOC) · 实战篇6
单片机·嵌入式硬件
国科安芯17 小时前
核电站蒸汽发生器传热管在役无损检测模拟前端的低噪声供电研究
嵌入式硬件·ldo·低压差线性稳压器·无损检测·核电站·蒸汽发生器·传热管
集芯微电科技有限公司18 小时前
40V/24A高频率增强型GaN HEMT功率开关管/高频DC转换/电动工具/GaN充电器 方案首选
人工智能·科技·单片机·嵌入式硬件·深度学习·神经网络·生成对抗网络
十八岁牛爷爷18 小时前
STM32H7 长时间运行后 HTTP 断连:从“串口还活着”到 TX 描述符错账
stm32·单片机·嵌入式硬件
Lxx_Zw19 小时前
串口命令如何从字符串长成协议:帧头、长度、校验和与状态机
c语言·stm32·单片机·嵌入式硬件