本帖最后由 zhangshiwei 于 2024-6-25 18:56 编辑
2024.06.21
第十五集
学习心得:关于外部中断
本集的内容包含:中断和中断系统;外部中断的概念;外部中断的使用方法。
(1)中断和中断系统,前面的内容学习到了定时器中断,定时一定的时间周期然后进行周期性的产生中断。
[color=var(--cos-color-text)][color=var(--cos-color-text)][color=var(--cos-color-text-link)]单片机外部中断是一种机制,允许单片机响应来自外部设备的紧急事件请求,从而暂停当前正在执行的任务,转而处理这个紧急事件。处理完毕后,[color=var(--cos-color-text-link)]CPU 再回到原来被中断的地方继续执行原来的任务。这种机制提高了CPU处理外部事件的能力,使得单片机能够更好地适应实时控制系统、故障处理系统以及分时操作系统等应用场景。
[color=var(--cos-color-text)][color=var(--cos-color-text)]
[color=var(--cos-color-text)]外部中断与内部中断的主要区别在于中断源的位置和性质。内部中断由单片机内部的事件触发,如定时器溢出等,而外部中断则由单片机外部的设备或信号触发,如按键按下、传感器检测到特定条件等。外部中断0和[color=var(--cos-color-text-link)]外部中断1是两种常见的外部中断源,它们可以通过编程被配置为响应不同的外部信号。 [color=var(--cos-color-text)]在单片机外部中断的工作原理中,当外部中断申请触发器检测到特定的边沿变化(如负跳变)时,即使CPU暂时无法响应,中断申请标志也不会丢失。这种方式适合于以负脉冲形式输入的外部中断请求。外部中断的跳沿触发方式确保了即使短暂的信号丢失也能被CPU采样到,从而保证了中断请求的有效性。 [color=var(--cos-color-text)]单片机外部中断1的中断请求标志是在中断发生时被设置,用于指示有一个待处理的外部中断请求。这个标志需要在CPU响应并处理完中断后被清除,以允许后续的中断请求被正确处理。
中断系统所包含的中断源
单片机在自主运行时一般是在执行一个死循环程序,在没有外界干预(输入信号)时它基本处于一个封闭状态。比如一个电子时钟,它会按时、分、秒的规律自主运行并通过输出设备(如液晶显示屏)把时间显示出来。在不需要对它进行调校时它不需要外部干预,自主封闭地运行。如果这个时钟足够准确而又不掉电的话,它可能一直处于这种封闭运行状态。但事情往往不会如此简单,在时钟刚刚上电或时钟需要重新校准.甚至时钟被带到不同时区的时候,就需要重新对时钟进行调校,这时就要求时钟必须具有调校功能。因此单片机系统往往又不会是一个单纯的封闭系统.它有些时候恰恰需要外部的干预,这也就是外部中断产生的根本原因。
在没有干预的情况下,单片机的程序在封闭状态下自主运行,如果在某一时刻需要响应一个外部事件(比如有按键按下),这时就会用到外部中断。具体来讲,外部中断就是在单片机的一个引脚上,由于外部因素导致了一个电平的变化(比如由高变低),而通过捕获这个变化,单片机内部自主运行的程序就会被暂时打断,转而去执行相应的中断处理程序,执行完后又回到原来中断的地方继续执行原来的程序。这个引脚上的电平变化,就申请了一个外部中断事件,而这个能申请外部中断的引脚就是外部中断的触发引脚。
关于中断次序,以及中断优先级
(2)外部中断的使用方法
外部中断的触发有两种触发方式:电平触发方式和跳沿触发方式。
电平触发方式
若外部中断定义为电平触发方式,外部中断申请触发器的状态随着CPU在每个机器周期采样到的外部中断输入线的电平变化而变化,这能提高CPU对外部中断请求的响应速度。当外部中断源被设定为电平触发方式时,在中断服务程序返回之前,外部中断请求输入必须无效(即变为高电平),否则CPU返回主程序后会再次响应中断。所以电平触发方式适合于外部中断以低电平输入而且中断服务程序能清除外部中断请求源(即外部中断输入电平又变为高电平)的情况。
跳沿触发方式
外部中断若定义为跳沿触发方式,外部中断申请触发器能锁存外部中断输入线上的负跳变。即便是CPU暂时不能响应,中断申请标志也不会丢失。在这种方式里,如果相继连续两次采样,一个机器周期采样到外部中断输入为高,下一个机器周期采样为低,则置“1”中断申请触发器,直到CPU响应此中断时才清’0’。这样不会丢失中断,但输入的负脉冲宽度至少保持12个时钟周期(若晶振频率为6MHz,则为21xs),才能被CPU采样到。外部中断的跳沿触发方式适合于以负脉冲形式输入的外部中断请求。
中断是为使单片机具有对外部或内部随机发生的事件实时处理而设置的,中断功能的存在, 很大程度上提高了单片机处理外部或内部事件的能力。 它也是单片机最重要的功能之一, 是学习单片机必须要掌握的。
对于单片机来讲, 中断是指 CPU 在处理某一事件 A 时, 发生了另一事件 B,请求 CPU 迅速去处理(中断发生); CPU 暂时停止当前的工作(中断响应), 转去处理事件 B(中断服务); 待 CPU 将事件 B 处理完毕后, 再回到原来事件 A 被中断的地方继续处理事件 A(中断返回), 这一过程称为中断。
单片机在执行程序时, 中断也随时有可能发生, 但无论何时发生, 只要一旦发生, 单片机将立即暂停当前程序,赶去处理中断程序, 处理完中断程序后再返回刚才暂停处接着执行原来的程序。其流程图如下:
外部中断的程序设计,可以让我们的单片机处理优先级高的事件。所以说中断的用法很重要,并且也是一个很好的工具。
引起 CPU 中断的根源称为中断源。 中断源向 CPU 提出中断请求, CPU 暂时中断原来的事务 A, 转去处理事件 B, 对事件 B 处理完毕后, 再回到原来被中断的地方(即断点), 称为中断返回。 实现上述中断功能的部件称为中断系统(中断机构)。
当中央处理机 CPU 正在处理某件事的时候外界发生了紧急事件请求, 要求CPU 暂停当前的工作, 转而去处理这个紧急事件, 处理完以后, 再回到原来被中断的地方, 继续原来的工作, 这样的过程称为中断。 实现这种功能的部件称为中断系统, 请示 CPU 中断的请求源称为中断源。 微型机的中断系统一般允许多个中断源, 当几个中断源同时向 CPU 请求中断, 要求为它服务的时候, 这就存在CPU 优先响应哪一个中断源请求的问题。 通常根据中断源的轻重缓急排队, 优先处理最紧急事件的中断请求源, 即规定每一个中断源有一个优先级别。
CPU 总是先响应优先级别最高的中断请求。
当 CPU 正在处理一个中断源请求的时候(执行相应的中断服务程序), 发生了另外一个优先级比它还高的中断源请求。 如果 CPU 能够暂停对原来中断源的服务程序, 转而去处理优先级更高的中断请求源, 处理完以后, 再回到原低级中断服务程序, 这样的过程称为中断嵌套。 这样的中断系统称为多级中断系统, 没有中断嵌套功能的中断系统称为单级中断系统。
中断的开启与关闭、 设置启用哪一个中断等都是由单片机内部的一些特殊功能寄存器来决定的, 在前面章节的学习中我们仅对单片机 IO 口操作过(实际上操作 IO 口即操作 IO 口寄存器, 只不过编译器已经帮我们把 IO 口寄存器封装好直接操作 IO 即可, 这些可在 51 单片机头文件内查看) , 从本文开始就会介绍单片机内部更多的特殊功能寄存器以及如何配置它实现相应的功能。
总结学习:熟悉了关于外部中断的概念,以及外部中断的作用、使用方式等等,另外通过程序展示和编写,对于中断的使用有了更深的认识。
|