51单片机之中断系统

    科技2023-09-21  86

    51单片机之中断系统

    一、中断概念1、中断发挥的作用2、什么是中断3、什么是中断源4、中断优先级5、中断系统 二、中断的结构1、中断源(以基础型52为例)2、中断控制相关寄存器3、中断结构图 三、51单片机中断响应流程四、中断程序设计五、中断程序示例

    一、中断概念

    1、中断发挥的作用

    中断一方面可以通过标志位的设定,极大的降低CPU的占用率;另一方面使用中断,也实现了单片机对复杂情景的处理。

    2、什么是中断

    CPU与外设并行工作,当外设数据准备好或者有某种突发事件发生时,向CPU提出请求,CPU暂停正在进行的工作,转而为该外设服务(或者是处理紧急事件),处理完毕后再回到原断点继续执行原程序。这个过程称为中断。

    注:这里对于初学者,额外解释一句,上述所指的外设一般情况下指的是片上外设。例如定时器、串行口等 我们的计算机主要由运算器、控制器(合成中央处理器CPU)、输入、输出、存储这五大部分构成。除了运算器和控制器,基本都可以叫外设。

    3、什么是中断源

    引起中断的原因和发出中断请求的来源,称为中断源。 中断源可以是外设(通过接口)、紧急事件、定时器或人为设置用于单步或断点调试程序。

    4、中断优先级

    当有多个中断源同时向CPU申请中断时,CPU优先响应最需紧急处理的中断请求,这种预先安排的响应次序,称为中断优先级。

    5、中断系统

    能实现中断功能并能对中断进行管理的硬件和软件称为中断系统。 中断请求是在执行程序的过程中随机发生的。

    中断系统要解决的问题: ①CPU在不断的执行程序的过程中,如何检测到随机发生的中断请求 ②是否允许中断 ③如何正确的进入中断 ④怎么排列优先级 ⑤中断完成后,怎么返回原断点处

    二、中断的结构

    基础51单片机有5个中断源,增强型52系列增加了一个定时计数器2,共有6个中断源。其中包含两个外部中断源,其余为内部中断源(具体几个可参考自己所用单片机型号的对应数据手册,不同型号之间均有差异)。

    基础51单片机只有两个中断优先级,其他型号可能有更多的优先级(取决于用来控制优先级的位数多少,问我为什么,先请去复习一下二进制),通过这些优先级的设置,我们可以使中断实现嵌套。

    1、中断源(以基础型52为例)

    中断源符号名称中断引起原因中断服务程序入口地址(汇编用)INT0外部中断0P3^2引脚低电平或者下降沿信号0003HINT1外部中断1P3^3引脚低电平或者下降沿信号0013HT0定时器0中断定时器/计数器0计数回0溢出000BHT1定时器1中断定时器/计数器1计数回0溢出001BHT2定时器2中断定时器/计数器2计数回0溢出002BHITI / RI串行口中断串行通信完成一帧数据发送或接受引起中断0023H

    2、中断控制相关寄存器

    中断控制主要由两个方面: A:是否允许中断 B:中断的优先级设置

    ① 中断控制寄存器 IE ——中断的允许和接收

    EA—ET2ESET1EX1ET0EX0中断总控位T2串行口T1INT1T0INT0

    EA:中断总控开关,1-CPU开中断,0-关 其他都是一样,为表内各个对应外设的中断开关,1开0关

    ②中断请求标志及外部中断方式选择寄存器TCON

    TF1TR1TF0TR0IE1IT1IE0IT0T1请求有无T1工作启停T0请求有无T1工作启停INT1 请求有无INT1工作方式 下降沿/低电平INT0请求有无INT0工作方式 下降沿/低电平

    注:串行口的中断标志位在SCON的RI和TI位

    补充: 低电平和下降沿触发的区别 ①触发条件不同 低电平触发:低电平触发后一直处于中断状态 下降沿触发:检测到信号有下降沿时就触发开关动作,

    ②触发次数不同 低电平触发:只要引脚为低电平时间内中断一直有效,就会一直进入中断,直到变为高电平 下降沿触发:下降沿触发只触发一次,只在下次电平发生变化时才重新触发中断

    ③、中断优先级管理寄存器IP

    注:不同型号的单片机,随着寄存器的增多,可用来控制优先级的位数越多,优先级层级就越多

    ——PT2PSPT1PX1PT0PX0T2优先级高低串行口优先级高低T1优先级高低INT1优先级高低T0优先级高低INT0优先级高低

    1表优先级高 0低 若同为0或1时,CPU查询顺序为 INT0→T0→INT1→T1→TI/RI→T2

    3、中断结构图

    从图中可以看出,我们的51单片机中断部分流程如下:

    ①检测对应中断源标志位

    ②检测对应中断开关是否打开

    ③检测总中断是否打开

    ④查询是否有优先级更高或同优先级中断正在执行

    ⑤有高优先级或同级,等待其执行完毕进行中断;无高优先级和同级,直接进行中断

    三、51单片机中断响应流程

    CPU对中断的响应分为4个阶段:中断请求、中断响应、中断服务、中断返回 这里以定时器中断为例进行讲解

    ①CPU正常执行主程序

    ②定时器TH0,TL0计满溢出,中断标志位TF0置1

    ③CPU执行到正在进行的指令的最后一个机器周期,例行检测中断标志位

    ④检测到TF0=1,暂停主程序执行,查询EA、ET0,看是否允许中断

    ⑤检测中断优先级,看是否有条件执行中断

    ⑥查询可以执行中断,将CPU将要执行的下一条存于PC中的指令存入栈内(PC:程序计数器,存放CPU要执行的下一条指令)

    ⑦将中断入口地址送入PC,PC再送入CPU,进入中断服务函数

    ⑧进入中断服务函数,擦除中断标志位(软件清零),执行中断服务函数

    ⑨中断返回,将入栈的断点PC指令存入PC,返回主程序断点,继续执行

    四、中断程序设计

    1、开中断总开关EA,置位中断源的中断允许位

    2、对于外部中断INT0、INT1,应选择中断触发方式为低电平还是下降沿

    3、设定中断优先级,预置IP

    4、中断服务程序函数定义 注:中断服务函数格式: 返回值 函数名([参数])[模式][ 再入]interrupt n [using m]

    含义: interrupt n 将函数声明为中断服务函数 n: 0——外部中断0 1——定时/计数器0溢出中断 2——外部中断1 3——定时计数器1溢出中断

    using m 定义函数使用的工作寄存器组 m 取值范围为0~3

    五、中断程序示例

    #include<reg52.h> int0()interrupt 0 { P1=0X0F; P1<<=4; } void main() { EA=1; EX0=1; IT0=1; while(1); }
    Processed: 0.021, SQL: 8