0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

中断流程分析与示例

田丰 来源:jf_35235301 作者:jf_35235301 2023-11-25 12:30 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

中断的概念:
CPU在处理某一事件A时,发生了另一事件B的请求(中断请求);CPU暂时中断当前的工作,转去处理事件B(中断响应和中断服务);待CPU将事件B处理完毕后,再回到原来事件A被中断的地方继续处理事件A(中断返),这一过程称为中断。

wKgaomVhd2qAfwCeAAczh1MgDBc191.png中断执行过程图

如何执行如上图所示:先执行主程序,到达断点的地方出现中断请求,此时执行中断响应,执行中断处理程序,执行完中断返回断点,再继续执行主程序。

中断源:
引起CPU中断的根源,称为中断源。中断源向CPU提出的中断请求。CPU暂时中断原来的事务A,转去处理事件B。对事件B处理完毕后,再回到原来被中断的地方(即断点),称为中断返回。实现上述中断功能的部件称为中断系统(中断机构)。
中断的优点:
分时操作:CPU可以分时为多个外设服务,提高了计算机的利用率;
实时响应:CPU能够及时处理应用系统的随机事件,系统的实时性大大增强;
可靠性高:CPU具有处理设备故障及掉电等突发性事件能力,从而使系统可靠性提高。

定义中断函数的一般形式:
viod 函数名() interrupt n
(1) interrupt必须要加,表示定义成中断服务函数。
(2)后面n是中断号,中断号是编译器识别不同中断的唯一编号.
中断服务函数和普通函数的异同:
同:函数的形式非常类似,中断响应过程和普通函数调用过程也非常相似。
异:①中断服务函数不需要声明,普通函数一般需要声明。②普通函数的执行是可预测的;而中断服务函数的执行是不可预测的。③普通函数的跳转是软件(函数调用语句)完成的;中断的跳转(中断响应)是由硬件完成的,只要发生了中断事件,并且中断被允许,硬件自动会帮我们完成中断的跳转(中断响应)。④普通函数:通过函数名找到被调用函数;中断服务函数:通过中断号找到中断服务函数。所以我们可以知道,中断服务函数中的函数名其实并没有什么作用。
使用中断函数时应遵循以下规则:
(1)中断函数不能进行参数转递;
(2)在任何情况下,都不能直接调用中断函数。

那么我们如何通过keil使用51单片机外部中断0触发数码管显示三位数字呢?

下面给予chatGPT示例

#include

sbit LED = P1^0; //定义LED连接的IO口
sbit KEY = P3^2; //定义KEY连接的IO口

unsigned int num = 0; //定义计数器

void delay(unsigned int x) //延时函数
{
unsigned int i, j;
for(i=0; i for(j=0; j<125; j++);
}

void display(unsigned int n) //数码管显示函数
{
unsigned char code table[] = { //数码管显示表
0x3f, //0
0x06, //1
0x5b, //2
0x4f, //3
0x66, //4
0x6d, //5
0x7d, //6
0x07, //7
0x7f, //8
0x6f //9
};
unsigned int i, j;
for(i=0; i<3; i++)
{
P2 = 0xff; //关闭所有数码管
switch(i) //选择要显示的数位
{
case 0:
P0 = 0xfe; //第一位数码管
break;
case 1:
P0 = 0xfd; //第二位数码管
break;
case 2:
P0 = 0xfb; //第三位数码管
break;
}
P2 = table[n%10]; //显示个位数字
delay(1); //延时一段时间
P2 = 0xff; //关闭所有数码管
switch(i) //选择要显示的数位
{
case 0:
P0 = 0xfd; //第二位数码管
break;
case 1:
P0 = 0xfb; //第三位数码管
break;
case 2:
P0 = 0xf7; //第四位数码管
break;
}
P2 = table[n/10%10]; //显示十位数字
delay(1); //延时一段时间
P2 = 0xff; //关闭所有数码管
switch(i) //选择要显示的数位
{
case 0:
P0 = 0xfb; //第三位数码管
break;
case 1:
P0 = 0xf7; //第四位数码管
break;
case 2:
P0 = 0xef; //第五位数码管
break;
}
P2 = table[n/100%10]; //显示百位数字
delay(1); //延时一段时间
P2 = 0xff; //关闭所有数码管
switch(i) //选择要显示的数位
{
case 0:
P0 = 0xf7; //第四位数码管
break;
case 1:
P0 = 0xef; //第五位数码管
break;
case 2:
P0 = 0xdf; //第六位数码管
break;
}
P2 = table[n/1000%10]; //显示千位数字
delay(1); //延时一段时间
}
}

void main()
{
EA = 1; //开启总中断
EX0 = 1; //开启外部中断0
IT0 = 1; //设置外部中断0为下降沿触发
while(1)
{
display(num%1000); //显示后三位数字
}
}

void Interrupt0() interrupt 0 //外部中断0中断服务函数
{
num++; //计数器加1
LED = ~LED; //LED翻转
}
在上面的代码中,我们定义了一个计数器num,并在外部中断0中断服务函数中将其加1。同时,在main函数中,我们使用display函数来显示num的后三位数字。display函数中使用了一个数码管显示表来将数字转换为数码管的显示码,然后通过控制数码管的选择位和段选位来实现数码管的显示。在每次显示完一个数位后,我们都会延时一段时间,以控制数码管的亮度和显示效果。最后,我们在main函数的无限循环中不断调用display函数,以实现数码管的动态显示。

需要注意的是,在使用外部中断0时,我们需要先开启总中断(EA=1),然后再开启外部中断0(EX0=1)。同时,我们还需要设置外部中断0的触发方式,可以选择下降沿触发(IT0=1)或者上升沿触发(IT0=0),具体根据实际情况而定。在外部中断0中断服务函数中,我们可以进行一些需要立即响应的操作,比如计数器加1、LED翻转等。

我觉得还是太复杂了(主要是太多了不想看又看不懂emmm),下面是我通过keil使用51单片机外部中断0触发数码管显示后三位学号的示例代码:

#include
#define duan P0
#define uchar unsigned char
sbit wei1 = P2^4;//定义第一位数码管
sbit wei2 = P2^5;//定义第二位数码管
sbit wei3 = P2^6;//定义第三位数码管
sbit wei4 = P2^7;//定义第四位数码管

uchar code sz[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00};

void delay (unsigned int xms)
{
unsigned int i,j;
for(i=xms;i>0;i--) //i=xms即延时xms
for(j=112;j>0;j--);
}

void main()
{
EX0 = 1;//INT0中断允许
EA = 1;//全局中断打开
IT0 = 0;//触发方式为低电平触发

while(1)
{
duan = sz[8];
wei1 = 0;
wei2 = 0;
wei3 = 0;
wei4 = 1;
delay(0);
duan = sz[2];//0111 1100 "b"
wei1 = 0;
wei2 = 0;
wei3 = 1;
wei4 = 0;
delay(0);
duan = sz[6];
wei1 = 0;
wei2 = 1;
wei3 = 0;
wei4 = 0;
delay(0);
duan = sz[7];
wei1 = 1;
wei2 = 0;
wei3 = 0;
wei4 = 0;
delay(0);
}
}

void low()interrupt 0
{
wei1 = 0;
delay(0);
}

wKgaomVjGM-APz5EAADIZdO7cxQ736.png运行结果

wKgZomVjGWGADNLKAAhz7ubzg1w506.png硬件显示效果

显示效果:显示4位学号7628,通过外部中断0使第一位数码管不亮,从而显示学号后三位。

总结:P3.2由ITO(TCON.0)选择其为低电平有效。当CPU检测到P3.2引脚上出现有效的中断信号时,中断标志 IEO(TCON.1)置1,向CPU申请中断。

审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 单片机
    +关注

    关注

    6074

    文章

    45344

    浏览量

    663808
  • cpu
    cpu
    +关注

    关注

    68

    文章

    11221

    浏览量

    222997
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    超级法拉电容均压板漏电严重怎么办?

    文章总结:超法拉电容均压板漏电问题需通过检测、优化和维护解决,涵盖诊断流程、场景化方案及预防措施。
    的头像 发表于 11-27 09:19 243次阅读
    超级法拉电容均压板漏电严重怎么办?

    视频卡顿分析流程

    视频卡顿分析流程
    发表于 11-10 16:55 0次下载

    电能质量在线监测装置历史波形回放的操作流程是怎样的

    电能质量在线监测装置的历史波形回放操作需结合设备类型、存储方式及访问权限,通常分为本地操作和远程访问两类流程。以下是基于主流设备特性的详细步骤说明,涵盖数据检索、波形查看、分析及导出全流程,并附典型
    的头像 发表于 11-05 11:32 488次阅读

    eVTOL舱内噪声响应分析的仿真流程

    上一节中介绍了eVTOL旋翼噪声的表征以及通过声学BEM模型分析旋翼噪声到eVTOL机体外表面的噪声传播分析流程,本节将在上节内容的基础上继续介绍eVTOL舱内噪声响应分析的仿真
    的头像 发表于 09-23 14:06 439次阅读
    eVTOL舱内噪声响应<b class='flag-5'>分析</b>的仿真<b class='flag-5'>流程</b>

    碳化硅衬底 TTV 厚度测量数据异常的快速诊断与处理流程

    摘要 本文针对碳化硅衬底 TTV 厚度测量中出现的数据异常问题,系统分析异常类型与成因,构建科学高效的快速诊断流程,并提出针对性处理方法,旨在提升数据异常处理效率,保障碳化硅衬底 TTV 测量准确性
    的头像 发表于 08-14 13:29 998次阅读
    碳化硅衬底 TTV 厚度测量数据异常的快速诊断与处理<b class='flag-5'>流程</b>

    第二十七章 W55MH32 Interrupt示例

    介绍了 TOE 中断的概念、特点、应用场景、中断源以及使用中断接收数据的流程,帮助读者理解其在提升系统响应速度和资源利用率方面的实际应用价值。
    的头像 发表于 07-24 16:14 497次阅读
    第二十七章 W55MH32 Interrupt<b class='flag-5'>示例</b>

    协议分析仪支持哪些高级触发选项?

    SYN-ACK包 客户端发送ACK包且数据部分包含\"GET /\" 优势:分析协议流程是否符合预期,定位握手失败或状态机错误。 状态触发 功能:基于协议状态机的状态转移条件触发(如
    发表于 07-23 14:21

    RK3128 Android 7.1 进入深度休眠流程分析

    RK3128 Android 7.1 进入深度休眠流程分析RK3128是瑞芯微电子推出的一款低功耗四核Cortex-A7处理器,运行Android 7.1系统时进入深度休眠(Deep Sleep
    发表于 07-22 10:45

    电源变换器EMC整改:需求分析到整改报告的标准化流程

    南柯电子|电源变换器EMC整改:需求分析到整改报告的标准化流程
    的头像 发表于 06-24 11:12 554次阅读

    突然黑屏不要怕,聚徽分享安卓工控机工业级屏幕无显示的快速诊断流程

    案例,提出一套从黑屏到恢复的标准化诊断流程,涵盖硬件、软件、电源及通信四大维度,助力工程师在30分钟内定位问题根源。 一、故障分级与初步排查 工业级屏幕无显示问题需按紧急程度分级处理: 一级故障:完全黑屏,无任何
    的头像 发表于 06-10 10:20 1289次阅读

    伺服电机测试流程分析

    伺服电机的测试流程是确保电机正常工作的关键步骤。以下是对伺服电机测试流程的详细分析。  一、初步检查与准备 1. 外观检查:首先,对伺服电机进行外观检查,确保电机完好无损,没有明显的物理损伤或变形
    的头像 发表于 04-23 17:56 1121次阅读

    封装失效分析流程、方法及设备

    本文首先介绍了器件失效的定义、分类和失效机理的统计,然后详细介绍了封装失效分析流程、方法及设备。
    的头像 发表于 03-13 14:45 1631次阅读
    封装失效<b class='flag-5'>分析</b>的<b class='flag-5'>流程</b>、方法及设备

    芯片失效分析的方法和流程

      本文介绍了芯片失效分析的方法和流程,举例了典型失效案例流程,总结了芯片失效分析关键技术面临的挑战和对策,并总结了芯片失效分析的注意事项。
    的头像 发表于 02-19 09:44 2556次阅读

    串口中断是内部中断还是外部中断,串口中断是怎么触发的

    串口中断通常被视为外部中断。虽然串口控制器(如USART、UART等)可能集成在微控制器或处理器的内部,但从中断的角度来看,串口中断是由处理器外部的通信事件触发的。这些事件包括数据的接
    的头像 发表于 01-29 15:03 2642次阅读

    利用Minitab应对供应链中断问题

    供应链中断是不可避免的,但积极的措施和数据驱动的战略可以减轻其影响。Minitab全面的数据分析和问题解决工具使组织能够分析、优化和调整其供应链,以应对不可预见的挑战,确保面对中断时的
    的头像 发表于 01-02 17:16 693次阅读