当前位置: 首页 > news >正文

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

文章目录

  • 前言
  • 一、中断嵌套是什么?
  • 二、两个同级别中断
    • 2.1 中断运行关系
    • 2.2 测试程序
  • 三、两个不同级别中断实现中断嵌套
    • 3.1 中断运行关系
    • 3.2 测试程序
  • 总结


前言

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

课程需要:


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

一、中断嵌套是什么?

在这里插入图片描述

二、两个同级别中断

2.1 中断运行关系

主函数->中断0->主函数
主函数->中断1->主函数
主函数->中断0->中断1->主函数
主函数->中断1->中断0->主函数
在这里插入图片描述

2.2 测试程序

关键:

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

代码如下(示例):


#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为高优先级

代码如下(示例):


#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 不同级

总结

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

http://www.lryc.cn/news/341825.html

相关文章:

  • VUE 监视数据原理
  • Thinkphp使用dd()函数
  • Git使用指北
  • STM32G030F6P6TR 芯片TSSOP20 MCU单片机微控制器芯片
  • 零基础入门学习Python第二阶01生成式(推导式),数据结构
  • Java面试题:多线程3
  • 【QEMU系统分析之实例篇(十八)】
  • pyside6的调色板QPalette的简单应用
  • 苍穹外卖项目
  • error: Execution was interrupted, reason: signal SIGABRT
  • HarmaonyOS鸿蒙应用科普课
  • 数码管的显示
  • 关于海康相机和镜头参数的记录
  • 【JavaScript】运算符
  • LabVIEW航空发动机主轴承试验器数据采集与监测
  • CVE-2022-2602:unix_gc 错误释放 io_uring 注册的文件从而导致的 file UAF
  • LSTM实战笔记(部署到C++上)——更新中
  • 鸿蒙内核源码分析(消息队列篇) | 进程间如何异步传递大数据
  • Sentinel流量防卫兵
  • 微信小程序:14.什么是wxs,wxs的使用
  • Django运行不提示网址问题
  • web安全---xss漏洞/beef-xss基本使用
  • 第一天学习(GPT)
  • 【C++之AVL树旋转操作的详细图解】
  • 制作Android分区镜像
  • 如何代码激活service——packageKit 系统更新番外
  • 音视频常用工具
  • 周刊是聪明人筛选优质知识的聪明手段!
  • 设计模式Java实现-建造者模式
  • 微博视频怎么下载无水印