中断的概述
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
中断的概述
1.中断:中断是指计算机在执行某一程序的过程中, 由于计算机系统内、外的某种原因,
而必须中止原程序的执行, 转去执行相应的处理程序, 待处理结束之后, 再回来
继续执行被中止的原程序的过程。
中断的作用:
(1)解决CPU和慢速外设之间的矛盾
(2)可及时处理控制系统中许多随机的参数和信息
(3)具备了处理故障的能力,提高机器自身可靠性
2.中断和调用子程序的区别
中断是随机产生的、既保护断点又保护现场、为外设和处理事件服务。
3.中断优先级及嵌套
中断优先级越高, 则响应优先权就越高。当CPU正在执行中断服务程序时, 又有
中断优先级更高的中断申请产生, 这时CPU就会暂停当前的中断服务转而处理
高级中断申请, 待高级中断处理程序完毕再返回原中断程序断点处继续执行, 这
一过程称为中断嵌套。
MCS - 51中断系统
1.中断源:
中断源:产生中断的请求源.
MCS - 51中断系统共有5个中断源:2个外部、3个内部
*外部中断INT0,INT1
*定时器/计数器0与1
*串行口中断
2.中断控制寄存器
MCS - 51中断系统对中断的设置主要通过以下寄存器的数据设定而实现.
(1) IE(中断允许)寄存器
按位寻址,地址:A8H
EA (IE.7):EA=0时,所有中断禁止(即不产生中断)
EA=1时,各中断的产生由个别的允许位决定
(IE.6):保留
ET2(IE.5):定时2溢出中断充许(8052用)
ES (IE.4):串行口中断充许(ES=1充许,ES=0禁止)
ET1(IE.3):定时1中断充许
EX1(IE.2):外中断INT1中断充许
ET0(IE.1):定时器0中断充许
EX0(IE.0):外部中断INT0的中断允许
(2) IP(中断优先级控制)寄存器
按位寻址,地址位B8H
(IP.7):保留
(IP.6):保留
PT2(IP.5):定时2中断优先(8052用)
PS (IP.4):串行口中断优先
PT1(IP.3):定时1中断优先
PX1(IP.2):外中断INT1中断优先
PT0(IP.1):定时器0中断优先
PX0(IP.0):外部中断INT0的中断优先
中断优先级遵循的原则:
*低优先中断可被高优先级中断所中断
*某个中断一旦得到响应,与它同级的中断请求不能再中断它。
同级中断的优先级:外部中断0(最高)、T/C0、外部中断1、T/C1、串口(最低)。
例如, 某软件中对寄存器IE、IP设置如下:
MOV IE, #8FH
MOV IP, #06H
则此时该系统中:
◆CPU中断允许;
◆允许外部中断0、外部中断1、定时器/计数器0、定时器/计数器1提出的中断申请;
◆允许中断源的中断优先次序为:定时器/计数器0>外部中断1>外部中断0>定时器/计数器1。
3.中断响应
(1)CPU响应中断的条件
1)一条指令执行完成
2)刚执行的不是RETI或访问IE、IP指令,若是则要再执行一条才能响应
3)新的中断优先级要高于当前的正在执行的程序的优先级
(2)中断源的中断服务程序入口地址
A需保护, 则编制程序应为:
ORG 0000H
AJMP MAIN
ORG 0013H
LJMP INT1
……
ORG 0100H
MAIN:……;主程序
……
ORG 1000H
INT1: PUSH ACC ; 中断服务程序
PUSH DPH
PUSH DPL
PUSH R0
PUSH R1
POP R1
POP R0
POP DPL
POP DPH
POP ACC
RETI
(3)中断处理过程
1) 在每条指令结束后, 系统都自动检测中断请求信号, 如果有中断请求,且CPU处于开中断状态下, 则响应中断。
2) 保护现场, 在保护现场前, 一般要关中断, 以防止现场被破坏。保护现场一般是用堆栈指令将原程序中用到的寄存器推入堆栈。
3) 中断服务, 即为相应的中断源服务。
4) 恢复现场, 用堆栈指令将保护在堆栈中的数据弹出来, 在恢复现场前要关中断, 以防止现场被破坏。在恢复现场后应及时开中断。
5)中断返回, 此时CPU将推入到堆栈的断点地址弹回到程序计数器, 从而使CPU 继续执行刚才被中断的程序。
(4)CPU响应中断的过程
单片机一旦响应中断请求, 就由硬件完成以下功能:
1)根据响应的中断源的中断优先级, 使相应的优先级状态触发器置1;
2)执行硬件中断服务子程序调用, 并把当前程序计数器PC的内容压入堆栈;
3)清除相应的中断请求标志位(串行口中断请求标志RI和TI除外);
4)把被响应的中断源所对应的中断服务程序的入口地址(中断矢量)送入PC, 从而转入相应的中断服务程序。
(5) 堆栈
堆栈介绍:日常生活中,我们都注意到过这样的现象,家里洗的碗,一只一只摞起来,最晚放上去的放在最上面,而最早放上去的则放在最下面,在取的时候正好相反,先从最上面取,这种现象我们用一句话来概括:“先进后出,后进先出”。请大家想想,还有什么地方有这种现象?其实比比皆是,建筑工地上堆放的砖头、材料,仓库里放的货物,都是“先进后出,后进先出”这实际是一种存取物品的规则,我们称之为“堆栈”。
在单片机中,我们也可以在RAM中构造这样一个区域,用来存放数据,这个区域存放数据的规则就是“先进后出,后进先出”,我们称之为“堆栈”。为什么需要这样来存放数据呢?存储器本身不是可以按地址来存放数据吗?对,知道了地址的确就可以知道里面的内容,但如果我们需要存放的是一批数据,每一个数据都需要知道地址那不是麻烦吗?如果我们让数据一个接一个地放置,那么我们只要知道第一个数据所在地址单元就可以了(看图2)如果第一个数据在27H,那么第二、三个就在28H、29H了。所以利用堆栈这种方法来放数据可以简化操作
那么51中堆栈什么地方呢?单片机中能存放数据的区域有限,我们不能够专门分配一块地方做堆栈,所以就在内存(RAM)中开辟一块地方,用于堆栈,但是用内存的哪一块呢?还是不好定,因为51是一种通用的单片机,各人的实际需求各不相同,有人需要多一些堆栈,而有人则不需要那么多,所以怎么分配都不合适,怎样来解决这个问题?分不好干脆就不分了,把分的权利给用户(编程者),根据自已的需要去定吧,所以51单片机中堆栈的位置是可以变化的。而这种变化就体现在SP中值的变化,看图2,SP中的值等于27H不就相当于是一个指针指向27H单元吗?当然在真正的51机中,开始指针所指的位置并非就是数据存放的位置,而是数据存放的前一个位置,比如一开始指针是指向27H单元的,那么第一个数据的位置是28H单元,而不是27H单元。