电子工程师提升计划-第5章 中断技术【2.0】

第5章 中断技术

5.1 概述

5.1.1 什么是中断

        在生活中,人们经常会遇到这样的情况:正在书房看书时,突然客厅的电话响了,人们往往会停止看书,转而去接电话,接完电话后又接着看书。这种停止当前工作,转而去做其他工作,做完后又返回来做先前工作的现象称为中断。
        单片机也有类似的中断现象,当单片机正在执行某程序时,如果突然出现意外情况,它就需要停止当前正在执行的程序,转而去处理意外情况,处理完后又接着执行原来的程序。

5.1.2 中断的有关概念

1.中断源
        要让 CPU 中断当前的程序去做其他事情,需要向它发出请求信号,CPU 接收到中断请求信号后才能产生中断。让CPU产生中断的信号称为中断源(又称中断请求源)。
        MCS-51系列单片机的中断源包括:两个外部中断源、两个定时器/计数器中断源和一个串行通信口中断源,如果它们向 CPU 发出中断请求信号,CPU 就会产生中断,停止执行当前的程序,转而去执行指定的程序(又称中断服务程序或中断子程序),执行完后又返回来执行原来的程序。
2.中断的优先级别
        单片机内的CPU在工作时,如果一个中断源向它发出中断请求信号,它就会产生中断;如果同时有两个或两个以上的中断源发出中断请求信号,CPU会怎么办呢?CPU会先接受优先级别高的中断源请求,然后再接受优先级别低的中断源请求。
        MCS-51系列单片机5个中断源的优先级别顺序见表5-1。
表5-1 5个中断源的优先级别顺序及中断入口地址


5.1.3 中断的处理过程

        为了更容易理解中断的处理过程,先来分析前面的例子。正在看书时,电话铃响了,这里的电话就是中断源,它发出的铃声就是中断请求信号。怎么来处理这个中断呢?一般的做法是记住书中刚看完的页码,然后再去客厅接电话,接完电话后,又回到书房阅读已看完页码的下一页的内容。

单片机处理中断的过程与上述情况类似,具体过程如下。
① 响应中断请求。当 CPU 正在执行主程序时,如果接收到中断源发出的中断请求信号,就会响应中断请求,停止主程序,开始执行中断。
② 保护断点。为了在执行完中断后能返回主程序,在执行中断时,会将主程序的下一条指令的地址(又称断点地址)保存到数据存储器(RAM)的堆栈中。
③ 寻找中断入口地址。保护好断点后,CPU开始寻找中断入口地址(又称矢量地址),中断入口地址存放着相应的中断子程序,不同的中断源对应着不同的中断入口地址。MCS-51系列单片机5个中断源对应的中断入口地址见表5-1。
④ 执行中断子程序。CPU寻找到中断入口地址后,就开始执行中断入口地址处的中断子程序。由于几个中断入口地址之间只有8个单元空间(见表5-1,如0003H~000BH相隔8个单元),较小的中断子程序(程序只有一两条指令)可以写在这里,较大的中断子程序无法写入,通常的做法是将子程序写在其他位置,而在中断入口地址单元只写一条跳转指令,由该指令跳转到中断子程序。
⑤ 中断返回。执行完中断子程序后,就会返回到主程序,返回的方法是从RAM的堆栈中取出之前保存的断点地址,然后执行该地址处的主程序,从而返回到主程序。

5.2 中断系统的结构

欲应用单片机的中断技术,首先要了解中断系统的结构。MCS-51系列单片机中断系统的结构如图5-1所示。

从图中可以看出,MCS-51系列单片机中断系统的主要组成部分如下。


① 5个中断源,即外部中断源 、外部中断源 、定时器/计数器中断源T0、定时器/计数器中断源T1和串行通信口中断源(TX和RX)。
② 中断源寄存器,包括定时器/计数器控制寄存器TCON和串行通信口控制寄存器SCON。
③ 中断允许寄存器IE。
④ 中断优先级控制寄存器IP。

中断系统的大致工作过程是(以 为例):当单片机的 端输入中断请求信号时,该信号是一个低电平,它经方式选择开关的“1”(当IT0=0时)和非门后变为“1”,送入寄存器TCON的IE0位,
IE0=1送到寄存器IE的EX0位,如果EX0位为“1”,那么该EX0位内的开关闭合,数据“1”会通过EX0位,再经过闭合的总开关(EA=1时总开关闭合)到达寄存器IP的PX0位,若PX0=1,则PX0内的开关接“1”处,数据“1”通过开关选中 中断源的矢量地址(中断入口地址),该地址送入PC,PC开始执行该地址单元的中断子程序。

5.2.1 中断源寄存器

中断源寄存器包括定时器/计数器控制寄存器TCON和串行通信口控
制寄存器SCON。
1.定时器/计数器控制寄存器TCON
        定时器/计数器控制寄存器 TCON 的功能主要是接收外部中断源(INT0、INT1 )和定时器/计数器(T0、T1)送来的中断请求信号。其字节地址是88H,它有8位,每位均可进行位寻址,各位的地址和名称如下:
下面是寄存器TCON各位功能的说明。
        IE0和IE1:它们分别是外部中断0( )和外部中断1( )的中断请求标志位。当外部有中断请求信号输入单片机的 引脚(即P3.2引脚)或 引脚(即P3.3引脚)时,寄存器TCON的IE0和IE1位会被置“1”。
        IT0和IT1:它们分别是外部中断0和外部中断1的输入方式控制位。以外部中断0( )为例,如图5-1所示,当IT0=0时,开关置“1”处, 端输入的低电平经非门后会将定时器/计数器控制寄存器TCON的IE0位置“1”;当IT1=1时,开关置“2”处, 端只有输入信号下降沿时才能将IE0位置“1”,才表示 有中断请求。TF0和TF1:它们分别是定时器/计数器0和定时器/计数器1的中断请求标志。当定时器/计数器工作产生溢出时,会将TF0或TF1位置“1”,表示定时器/计数器有中断请求。

        TR0和TR1:它们分别是定时器/计数器0和定时器/计数器1的启动/停止位。在编写程序时,若将TR0或TR1设置为“1”,那么相应的定时器/计数器开始工作;若设置为“0”,定时器/计数器则会停止工作。
        注意:如果将TF*位设为“1”,则把IE*设置为下降沿置“1”,中断子程序执行完后,IE*位自动变为“0”(硬件置“0”);如果将TF*位设为“0”,则把IE*设置为低电平置“1”,中断子程序执行完后,IE*位将仍是“1”,所以在退出中断子程序前,要将 INT*端的低电平信号撤掉,再用指令将IE*位置“0”(软件置“0”),若退出中断子程序后,IE*位仍为“1”,将会产生错误的再次中断。在单片机复位时,定时器/计数器控制寄存器TCON的各位均为“0”。
2.串行通信口控制寄存器SCON
        串行通信口控制寄存器SCON的功能主要是接收串行通信口送到的中断请求信号。其字节地址是98H,它有8位,每位均可进行位寻址,各位的地址和名称如下:


        串行通信口控制寄存器SCON的TI位和RI位与中断有关,其他位用作串行通信控制,将在后面说明。
        TI:串行通信口发送中断标志位。在串行通信时,每发送完一帧数据,串行通信口会将TI位置“1”,表明数据已发送完成,向单片机发送中断请求信号。
        RI:串行通信口接收中断标志位。在串行通信时,每接收完一帧数据,串行通信口会将 RI 位置“1”,表明数据已接收完成,向单片机发送中断请求信号。
        注意:单片机执行中断子程序后,TI位和RI位不能自动变为“0”,需要在退出中断子程序时,用软件指令将它们清0。

5.2.2 中断允许寄存器IE

        中断允许寄存器IE的功能是控制各个中断请求信号能否通过。其字节地址是A8H,它有8位,每位均可进行位寻址,各位的地址和名称如下:


        寄存器IE中有2位不可用,其他各位的功能说明如下。
        EA:总中断允许位。当EA=1时,总中断开关闭合;当EA=0时,总中断开关断开,所有的中断请求信号都不能通过。
        ES:串行通信口中断允许位。当ES=1时,允许串行通信口的中断
请求信号通过;当ES=0时,禁止串行通信口的中断请求信号通过。
        ET1:定时器/计数器1中断允许位。当ET1=1时,允许定时器/计数器1的中断请求信号通过;当ET1=0时,禁止定时器/计数器1的中断请求信号通过。
        EX1:外部中断1允许位。当EX1=1时,允许外部中断1的中断请求
信号通过;当EX1=0时,禁止外部中断1的中断请求信号通过。
        ET0:定时器/计数器0中断允许位。当ET0=1时,允许定时器/计数器0的中断请求信号通过;当ET0=0时,禁止定时器/计数器0的中断请求信号通过。
        EX0:外部中断0允许位。当EX0=1时,允许外部中断0的中断请求信号通过;当EX0=0时,禁止外部中断0的中断请求信号通过。

5.2.3 中断优先级控制寄存器IP

        中断优先级控制寄存器IP的功能是设置每个中断的优先级。其字节地址是B8H,它有8位,每位均可进行位寻址,各位的地址和名称如下:


        寄存器IE中有3位不用,其他各位的功能说明如下。
        PS:串行通信口优先级设定位。当PS=1时,串行通信口为高优先级;当PS=0时,串行通信口为低优先级。
        PT1:定时器/计数器1优先级设定位。当PT1=1时,定时器/计数器
1为高优先级;当PT1=0时,定时器/计数器1为低优先级。
        PX1:外部中断1优先级设定位。当PX1=1时,外部中断1为高优先级;当PX1=0时,外部中断1为低优先级。
        PT0:定时器/计数器0优先级设定位。当PT0=1时,定时器/计数器0为高优先级;当PT0=0时,定时器/计数器0为低优先级。
        PX0:外部中断0优先级设定位。当PX0=1时,外部中断0为高优先
级;当PX0=0时,外部中断0为低优先级。
        通过设置中断优先级控制寄存器IP相应位的值,可以改变5个中断源的优先顺序。若优先级一高一低的两个中断源同时发出请求,CPU会先执行优先级高的中断请求,再执行优先级低的中断请求;若5个中断源有多个高优先级或多个低优先级中断源同时发出请求,CPU会先按自然优先级顺序依次执行高优先级中断源,再按自然优先级顺序依次执行低优先级中断源。

5.3 中断程序的编写

        在应用中断技术时,先要根据中断需实现的功能设计好电路,然后编写中断程序。下面首先分析一个中断程序,再总结出编写中断程序的一般规律。

5.3.1 从实例了解中断程序的编写

图5-2所示是一个已设计好的单片机电路,在这个电路中需要实现这样的中断控制:当按下按键S1时,单片机的外部中断 端(与P3.2引脚共用)输入中断请求信号,该信号进入内部中断系统,让CPU产生中断来执行中断子程序,程序运行的结果是让单片机的P1.2引脚输出低电平,发光二极管VD1发光。
实现上述控制功能的程序如下:
ORG  0000H  ;指示下一条指令的起始地址为0000H
AJMP START  ;跳转执行标号START处的指令
ORG  0003H  ;指示下一条指令的起始地址为0003H
LJMP INT_0  ;跳转执行标号INT_0处的指令
ORG  30H   ;指示下一条指令的起始地址为30H
START: MOV SP,#5FH  ;将数据5FH送到寄存器SP中(即将存储器的5FH单元设作堆栈的栈底)
SETB P1.2  ;将P1.2端口置“1”(即让VD1熄灭)
SETB P3.2  ;将P3.2端口置“1”(即让外部中断INT0输入端为高电平)
SETB IT0   ;将定时器/计数器控制寄存器TCON的IT0位置“1”(即设置当INT0端输入;信号下降沿时表示有中断请求)
SETB EA   ;将中断允许寄存器IE的EA位置“1”(即开启总中断)
SETB EX0   ;将中断允许寄存器IE的EX0位置“1”(即开启外部中断0)
LJMP $   ;跳转到本行(即程序反复执行本行指令,不会执行后面的指令)
INT_0:     ;中断子程序标号
 PUSH ACC   ;将累加器A中的数据送到已设置好的堆栈中保存
下来(即在执行中
;断子程序时,保护A中的数据,防止在执行中断子程序时破坏A中
;的数值,该过程称作保护现场)
PUSH PSW   ;将寄存器PSW中的数据送到堆栈中保存下来(即
保护PSW中的数据)
CPL  P1.2  ;将P1.2端口取反(即将先前置的“1”变为
“0”)
POP  PSW   ;将堆栈中的数据送回到寄存器PSW中(该过程
称为恢复现场)
POP  ACC   ;将堆栈中的数据送还给累加器A
RETI     ;中断返回(返回到中断执行前的指令“LJMP 
$”处)
END     ;程序结束
程序执行过程说明如下。
        ① 程序从第2 行指令开始执行(因为第1 行是伪指令,不执行),执行第2 行指令的结果是跳到第6行。
        ② 第6 行~第11 行指令用于进行中断前的设置。具体包括:在单片机内部存储器中设置一个区域当作堆栈(堆栈的栈底地址设为5FH);将I/O接口设置到初始状态;设置中断输入有效方式(下降沿有效),并开启总中断和外部中断0。
        ③ 第 12 行指令“LJMP $”是一条死循环指令。这条指令执行的结果就是再执行它,程序一直执行这条指令,无法执行下一条指令,就像是原地踏步。
        ④一旦按下按键S1,单片机的 端(P3.2)马上由高电平变为低电平,相当于该端输入一个下降沿信号,该信号使单片机内部的中断系统发生中断,由于外部中断 0 的中断入口地址为0003H,程序马上由“LJMP $”指令处跳到第 4 行指令“LJMP INT_0”处,第 4 行指令执行的结果是跳到标号“INT_0”处。
        ⑤ 从标号“INT_0”到指令“RETI”的这一段程序为中断子程序。为了避免执行中断子程序时破坏累加器ACC和寄存器PSW中的数据,先用“PUSH”指令将ACC、PSW中的数据送到先前设置好的堆栈中保存下来(保护现场),然后执行子程序中的关键部分“CPLP1.2”,执行完后,再用“POP”指令依次将堆栈中的数据送回到PSW、ACC中(恢复现场)。要注意的是,先保存到堆栈中的数据要后取出(先存后取),由于ACC中的数据先存入堆栈,所以要后取出,如果不按“先存后取”的顺序,就会造成数据恢复错误(如会将堆栈中ACC的数据送到PSW中)。
        ⑥ “RETI”指令是一条中断子程序返回指令,该条指令执行的结果是返回到中断前的指令,这里是返回到指令“LJMP$”处,让程序又“原地踏步”,直到 端再输入中断请求信号。

  • 37
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
HCIA-HarmonyOS应用开发工程V2.0模拟考试是为了评估考生对HarmonyOS应用开发的理解和掌握程度的考试。该考试主要包含以下几个方面: 1. 应用开发基础知识:考生需要了解HarmonyOS架构和组件,掌握应用开发的基本概念和原理,包括应用开发流程、应用打包、应用部署等内容。 2. Java基础知识:考生需要熟悉Java编程语言,理解Java类、对象、继承、多态等概念,掌握Java的常用语法和编程技巧。 3. HarmonyOS应用界面设计:考生需要了解应用界面设计的基本原则和方法,熟悉HarmonyOS的布局控件和界面元素,能够实现复杂的界面布局和交互效果。 4. 应用数据管理:考生需要了解应用数据的存储和管理方法,掌握HarmonyOS提供的数据库和文件系统API,能够实现数据的增删改查等操作。 5. 应用开发调试与测试:考生需要具备良好的调试和测试能力,能够利用调试工具分析和解决应用开发中遇到的问题,实现应用的调试和测试。 模拟考试通过对上述内容的考察来评估考生的综合能力和应用开发水平。考生可以通过模拟考试了解自己对HarmonyOS应用开发的熟悉程度,发现自己的不足之处,并在实际考试前有针对性地进行备考和提升。同时,模拟考试还可以让考生熟悉考试的题型和要求,提高应对考试的能力。 综上所述,HCIA-HarmonyOS应用开发工程V2.0模拟考试是为了评估考生对HarmonyOS应用开发的掌握程度和能力的考试,通过对应用开发基础知识、Java基础知识、应用界面设计、应用数据管理等方面的考察来评估考生的综合能力。考生可以通过模拟考试了解自己的不足,并在备考中有针对性地提升自己的能力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BinaryStarXin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值