您好,欢迎访问三七文档
当前位置:首页 > 机械/制造/汽车 > 机械/模具设计 > 第5章 MCS-51中断系统
第5章MCS-51单片机的中断5.1中断的概述5.2MCS-51中断系统5.3中断系统的应用5.1.1中断返回你正在专心看书,突然电话铃响,于是你记下正在看的书的页数,去接电话,接完电话后再回来接着看书。日常中断的例子(1)中断中断是指计算机在执行某段程序的过程中,由于计算机系统内、外的某种原因,暂时中止原程序的执行,转去执行相应的处理程序,并中断服务程序执行完后,再回来继续执行被中断的原程序的过程。定义:程序在执行过程中被打断的情况称为“中断”。(2)中断源向CPU提出中断请求的地方叫中断源。生活中很多事件可以引起中断:有人按了门铃了,电话铃响了,你的闹钟闹响了,你烧的水开了…等等诸如此类的事件,我们把可以引起中断的事件称之为中断源。MCS-51单片机中一共有5个中断源,意思是51单片机有5个可以引起中断的地方。(3)内部中断与外部中断MCS-51单片机中的5个中断源也由两个外部中断和三个内部中断组成。两个外部中断是外部中断0、外部中断1;三个内部中断是计数/定时器中断0,数/定时器中断1,串行口中断。(4)中断优先级与中断嵌套设想一下,我们正在看书,电话铃响了,同时又有人按了门铃,你该先做那样呢?总之这里存在一个优先级的问题,单片机中也是如此,也有优先级的问题。看书接电话水开了继续接电话关火电话铃响继续看书返回主程序主程序中断源A执行中断A中断源B执行中断B返回中断A低优先级高优先级12中断嵌套(2级)人为设定高优先级中断优先级:根据中断源的重要性和紧迫程度的不同,将中断源设为多个优先级。MCS-51单片机有两个中断优先级。中断嵌套:高级中断源能打断低级中断源的中断处理。中断嵌套级数:有几个级别的中断源,就说实现了几级中断嵌套。MCS-51单片机可以实现两级中断嵌套。中断优先级的设定:人为设定某个中断源的优先级程度。(5)中断的响应过程五个中断源,每个中断产生后都到一个固定的地方去找处理这个中断的程序。程序存储器ROM0000H:复位后,程序的入口地址(PC=0000H)0023H:串行口中断入口0003H:外部中断0入口000BH:定时器0溢出中断入口0013H:外部中断1入口001BH:定时器1溢出中断入口002AH使用时,通常在这些入口地址处存放一条跳转指令,使程序跳转到用户安排的中断服务程序起始地址上去!中断入口常常是这样写程序ORG0000HLJMPSTARTORG0030HSTART:……(1)保护断点,即保存下一将要执行的指令的地址,就是把这个地址送入堆栈。(2)寻找中断入口,根据5个不同的中断源所产生的中断,查找5个不同的入口地址。以上工作是由计算机自动完成的,与编程者无关。(3)执行中断处理程序。(4)恢复现场,即出栈,将断点信息恢复,保证程序可以从断点处继续执行。(5)中断返回,执行完中断指令后,就从中断处返回到主程序继续执行。看书记录页数信息接电话调出页数信息继续看书主程序保护现场执行中断恢复现场中断返回中断执行过程走到电话机旁寻找中断入口1.TCON中的中断标志位D7D6D5D4D3D2D1D0TF1TR1TF0TR0IE1IT1IE0IT03.中断请求标志(MSB)8FH8EH8DH8CH8BH8AH89H88H(LSB)外部中断INT0中断标志位(TCON.1):IE0=1,外部中断1向CPU申请中断外部中断INT0触发方式控制位(TCON.0):IT0=0,电平触发方式IT0=1,下降沿触发方式P3.2√×√×TCON寄存器——T0和T1控制寄存器TF1TF0IE1IT1IE0IT0TCONT0溢出中断标志(TCON.5):T0启动计数后,计满溢出由硬件置位TF0=1,向CPU请求中断,此标志一直保持到CPU响应中断后,才由硬件自动清0。也可用软件查询该标志,并由软件清0。76543210D7D6D5D4D3D2D1D0SM0SM1SM2RENTB0RB0TIRI2.SCON的中断标志位(MSB)9FH9EH9DH9CH9BH9AH99H98H(LSB)TI(SCON.1)——串行发送中断标志。RI(SCON.0)——串行接收中断标志。注意:该寄存器可以位寻址。1.中断允许控制——中断允许寄存器IE5.2.2中断控制D7D6D5D4D3D2D1D0EA××ESET1EX1ET0EX0(MSB)AFHAEHADHACHABHAAHA9HA8H(LSB)中断允许寄存器IE对中断的开放和关闭实行两级控制。所谓两级控制,就是有一个总开、关中断控制位EA,当EA=0时,则屏蔽所有的中断申请,即任何中断申请都不接受;当EA=1时,CPU开放中断,但五个中断源还要由IE的低5位的各对应控制位的状态进行中断允许控制。例5-1如果我们要设置外中断1、定时器1中断允许,其它不允许,请设置IE的相应值。位D7D6D5D4D3D2D1D0符号EA××ESET1EX1ET0EX0值10001100(MSB)AFHAEHADHACHABHAAHA9HA8H(LSB)(a)用字节操作指令实现MOVIE,#8CH或MOVA8H,#8CH(b)用位操作指令实现SETBEA;使EA=1,CPU开中断SETBET1;使ET1=1,定时/计数器1允许中断SETBEX1;使EX1=1,外中断T1允许中断中断优先级寄存器IPD7D6D5D4D3D2D1D0×××PSPT1PX1PT0PX0(MSB)BFHBEHBDHBCHBBHBAHB9HB8H(LSB)专用寄存器IP为中断优先级寄存器,用户可用软件设定相应位为1,对应的中断源被设置为高优先级,相应位为0,对应的中断源被设置为低优先级系统复位时,均为低优先级该寄存器可以位寻址自然优先权顺序中断源同级内优先权排列外部中断0中断定时器/计数器0中断外部中断1中断定时器/计数器1中断串行接口中断最高最低中断响应原则(1)非中断服务子程序可以被任何一个中断申请所中断,而与优先级结构无关。(2)高级中断请求可以中断正在执行的低级中断。(3)同级或低级中断请求不能中断正在执行的中断。(4)多个中断源同时向CPU申请中断,首先响应优先级别最高的中断请求;多个同级中断源同时向CPU申请中断,CPU通过内部硬件查询,按自然优先级确定优先响应哪一个中断请求。解:IP的首3位没用,可任意取值,设为000,后面根据要求写就可以了。位D7D6D5D4D3D2D1D0符号XXXPSPT1PX1PT0PX0值00000110例5-2设有如下要求,将T0、外中断1设为高优先级,其它为低优先级,求IP的值。IP的值就是06H。例5-3在上例中,如果5个中断请求同时发生,求中断响应的次序。解:响应次序为定时器0→外中断1→外中断0→实时器1→串行中断。1.中断响应的时序与条件5.2.3中断响应(1)在每个机器周期的S5P2期间,各中断标志采样相应的中断源。CPU则在下一机器周期的S6期间按优先级的顺序查询各中断标志。若查询某中断标志为1,则按优先级的高低进行处理,即响应中断。(2)响应中断后,执行硬件生成的长调用指令“LCALL”,将程序计数器PC的内容压入堆栈保护,先低位地址,后高位地址,栈指针加2。(3)将对应中断源的中断矢量地址装入程序计数器PC,使程序转向该中断矢量地址,去执行中断服务程序。(4)中断服务程序由中断矢量地址开始执行,直到遇到RETI指令为止。(5)执行RETI指令,撤销中断申请,弹出断点地址送入PC,先弹出高位地址,后弹出低位地址,栈指针减2,恢复原程序的执行。CPU将封锁对中断的响应的情况:(1)同级或高优先级的中断已在进行中;(2)当前的机器周期还不是正在执行指令的最后一个机器周期(换言之,正在执行的指令完成前,任何中断请求都得不到响应);(3)正在执行的是一条RETI或者访问特殊功能寄存器IE或IP的指令(换言之,在RETI或读写IE或IP之后,不会马上响应中断请求,而至少执行一条其它指令之后才会响应)。单片机一旦响应中断请求,就由硬件完成以下功能:(1)保留断点,执行硬件中断服务子程序调用,并把当前程序计数器PC的内容压入堆栈;(2)自动清除相应的中断请求标志位(串行口中断请求标志RI和TI除外);(3)把被响应的中断源所对应的中断服务程序的入口地址(中断矢量)送入PC,从而转入相应的中断服务程序。2.CPU响应中断的过程注意:每个中断向量地址只间隔了8个单元,如0003H~000BH,在如此少的空间中是无法存储一个比较完整的中断服务程序的,需要作一个简单的技术处理。就是在中断入口处存储一条LJMP或AJMP指令。ORG0000HLJMPMAINORG0003HLJMPINT0;转外中断0ORG0030HMAIN:…….ORG0200HINT0:…….一个完整的主程序看起来应该是这样的:主程序1.主程序的起始地址MCS-51系列单片机复位后,(PC)=0000H,而0003H~002BH分别为各中断源的入口地址。所以编程时应在0000H处写一跳转指令(一般为长跳转指令),使CPU在执行程序时,从0000H跳过各中断源的入口地址。主程序则是以跳转的目标地址作为起始地址开始编写,一般从0030H开始。2.主程序的初始化内容所谓初始化,是对将要用到的MCS-51系列单片机内部部件或扩展芯片进行初始工作状态设定。应对IE,IP进行初始化编程,以开放CPU中断,允许某些中断源中断和设置中断优先级等。5.3.2中断服务程序中断服务程序是一种具有特定功能的独立程序段,它为中断源的特定要求服务,以中断返回指令结束。在中断响应过程中,断点的保护主要由硬件电路来完成。对用户来说,在编写中断服务程序时,主要需考虑现场的保护与恢复。CH1:CLREAPUSHAPUSHR1……SETBEA……CLREA……POPR1POPASETBEARETI中断服务程序一般编写格式2.中断服务程序编写中的注意事项(1)视需要确定是否保护现场。(2)及时清除那些不能被硬件自动清除的中断请求标志,以免产生错误的中断。(3)中断服务程序中的压栈(PUSH)与出栈(POP)指令必须成对使用,以确保中断服务程序的正确返回。(4)主程序和中断服务程序之间的参数传递与主程序和子程序的参数传递方式相同。
本文标题:第5章 MCS-51中断系统
链接地址:https://www.777doc.com/doc-3972440 .html