MCS-51中断系统教学课件PPT.ppt_第1页
MCS-51中断系统教学课件PPT.ppt_第2页
MCS-51中断系统教学课件PPT.ppt_第3页
MCS-51中断系统教学课件PPT.ppt_第4页
MCS-51中断系统教学课件PPT.ppt_第5页
已阅读5页,还剩51页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第5章 mcs-51中断系统,【学习目标】 掌握中断系统的基本概念,熟记mcs-51五个中断源及其中断入口地址; 熟悉功能寄存器tcon、scon、ie、ip的结构、控制作用和设置方法; 理解mcs-51中断响应过程及处理方法; 理解中断服务程序与调用子程序的区别; 掌握中断应用程序的编写方法。,【例3.11】 有一数据块存放起始地址为data1的片外ram区,数据块以“0”为结束标志,要求将其传送到data2为起始地址的片内ram区。编写程序如下:,mov dptr, #data1 ;设置片外ram数据块地址指针 mov r0,#data2 ;设置片内ram数据块地址指针 loop:movx a, dptr ;取数 jz endo ;检测是否为0?为0,转endo mov r0,a ;不为0,传送 inc dptr ;修改地址指针 inc r0 ajmp loop endo: sjmp $,基本程度范例:,例1、led的控制,使用89c5l的port 1连接8个led,以产生跑马灯的效果。连接好电路并且完成程序之后,您将可以看到8个led依次轮流闪烁。 在这次练习中,您将学会如何使用i/o port输出数据,以及如何使用循环实现时间延迟。,电路图,#include void delay (void) /* delay 函数 */ unsigned char i,j; /* 这个函数执行时间的延迟 */ for (i=0;i255;i+) for(j=0;j255;j+) ; void main (void) unsigned char j=0xfe; /*声明变量 j ,11111110*/ while (1) /* 无穷循环 */ /*依次让led 0,1,2,3,4,5,6,7闪烁 */ j=(j1) | 0x01; if(j=0xff) j=0xfe; p1 = j; /* 将数值输出到port1,控制led亮或灭 */ delay(); /* 调用 delay 函数*/ ,5.1 中断系统概述 1中断的概念 cpu正在执行程序时,单片机外部或内部发生的某一事件,请求cpu迅速去处理。cpu暂时中止当前的工作,转到中断服务处理程序处理所发生的事件。处理完该事件后,再回到原来被中止的地方,继续原来的工作,这称为中断。 cpu处理事件的过程,称为cpu的中断响应过程。,图5-1中断流程图所示。对事件的整个处理过程,称为中断处理(或中断服务)。,能够实现中断处理功能的部件称为中断系统;产生中断的请求源称为中断请求源。中断源向cpu提出的处理请求,称为中断请求(或中断申请)。进入中断保护现场中断处理恢复现场 中断返回,2中断的作用 提高cpu工作效率 具有实时处理功能 具有故障处理功能 实现分时操作,中断功能强弱是计算机性能优劣的重要标志,3中断系统的功能 为了正确地处理中断任务并能满足各种中断源的中断请求,计算机的中断系统应该具有以下功能。 1)能实现中断及返回。 2)能实现中断优先级排队。 3)能实现中断嵌套。,5.2 mcs-51单片机的中断系统 有5个中断请求源,两个中断优先级,可两级嵌套。 mcs-51单片机的中断系统结构示意图,如图5-3所示。, int0:外部中断0,中断请求信号由p3.2输入。 int1:外部中断1,中断请求信号由p3.3输入。 t0:定时/计数器0溢出中断,对外部脉冲计数由p3.4输入。 t1:定时/计数器1溢出中断,对外部脉冲计数由p3.5输入。 串行中断:包括串行接收中断ri和串行发送中断ti。,5.2.1 中断源及中断入口 中断源是指能发出中断请求,引起中断的装置或事件。 mcs-51单片机共有5个中断源,其中2个为外部中断源,3个为内部中断源:,5个中断源分别对应5个固定的中断入口地址。当某中断源的中断请求被cpu响应之后,cpu将把此中断源的入口地址装入pc,中断服务程序即从此地址开始执行。此地址称为中断入口,亦称为中断矢量。在mcs-51单片机中各中断源以及与之对应的入口地址分配见表5.1。,5.2.2 中断控制 mcs-51单片机中涉及中断控制的有4个特殊功能寄存器: 1)定时和外中断控制寄存器tcon。 2)串行口中断控制寄存器scon。 3)中断允许控制寄存器ie。 4)中断优先级控制寄存器ip。,int0、int1、t0、t1中断请求标志放在tcon中 串行中断请求标志放在scon中。 tcon的结构、位名称、位地址和功能如下:,1中断请求标志寄存器 mcs-51对每一个中断请求都对应有一个中断请求标志位,中断请求被响应前,中断请求由cpu锁存在特殊功能寄存器tcon和scon的相应中断标志位中。 (1)定时和外中断控制寄存器tcon,tcon位功能: tf1 t1溢出中断请求标志 t1计数溢出后,tf1=1 tf0 t0溢出中断请求标志 t0计数溢出后,tf0=1 tf0/tf1:定时器溢出中断申请标志位: =0:定时器未溢出; =1:定时器溢出申请中断,进中断后自动清零。 ie1 外中断中断请求标志 当p3.3引脚信号有效时,ie1=1 ie0 外中断中断请求标志 当p3.2引脚信号有效时,ie0=1 ie0/ie1:外部中断申请标志位: =0:没有外部中断申请; =1:有外部中断申请。, it1 外中断触发方式控制位 it1=1,边沿触发方式,即p3.3出现下跳边 脉冲有效; it1=0,电平触发方式。 it0 外中断触发方式控制位 其意义和功能与it1相似。,it0/it1:外部中断请求的触发方式选择位: =0:在int0/int1端申请中断的信号低电平有效; =1:在int0/int1端申请中断的信号负跳变有效.,当mcs-51复位后,tcon被清0,则cpu关中断,所有中断请求被禁止。,(2)串行中断控制寄存器scon 字节地址为98h。串行口的发送中断和接收中断的中断请求标志ti和ri。,各标志位的功能: (1)ti发送中断请求标志位。串口每发送完一帧串行数据后,硬件自动置“1”ti。必须在中断服务程序中用软件对ti标志清“0”。 (2)ri接收中断请求标志位。串口接收完一个数据帧,硬件自动置“1”ri标志。必须在中断服务程序中用软件对ri标志清“0”。,2中断允许控制寄存器ie cpu对中断系统所有中断以及某个中断源的开放和屏蔽是由中断允许寄存器ie控制的。ie的状态可用软件对各位分别置1或清零,从而实现对各中断源中断允许或屏蔽。ie寄存器的字节地址是a8h,位地址为afha8h。, ea cpu中断允许控制位(总开关) ea=1,cpu开中; ea=0,cpu关中,且屏蔽所有5个中断源。 ex0 外中断int0中断允许控制位 ex0=1,int0开中;ex0=0,int0关中。 ex1 外中断int1中断允许控制位 ex1=1,int1开中;ex1=0,int1关中。 et0 定时/计数器t0中断允许控制位 et0=1,t0开中;et0=0,t0关中。 et1 定时/计数器t1中断允许控制位 et1=1,t1开中;et1=0,t1关中。 es 串行口中断(包括串发、串收)允许控制位 es=1,串行口开中;es=0,串行口关中。,说明: mcs-51对中断实行两级控制,总控制位是ea,每一中断源还有各自的控制位。首先要ea=1,其次还要自身的控制位置“1”。,例如:要使int0开中(其余关中),可执行下列指令: setb ea setb ex0 或者 mov ie ,#10000001b 或者 orl ie ,#10000001b,中断允许控制寄存器ie,中断嵌套结构类似与调用子程序嵌套,不同的是: 子程序嵌套是在程序中事先按排好的;中断嵌套是随机发生的。 子程序嵌套无次序限制,中断嵌套只允许高优先级“中断”低优先级。,3中断优先级控制寄存器ip,mcs-51单片机有5个中断源,有两个中断优先级:高优先级和低优先级,可实现两级中断服务嵌套,由ip控制。只要对ip各位置1或清零,就可对各中断源设置高优先级或低优先级。相应位置1,定义为高优先级;相应位清零,定义为低优先级。ip寄存器的字节地址为0b8h,位地址为0bfh0b8h。ip相关的位地址见表5.5。, px0 :int0中断优先级控制位。px0=1,为高优先级; px0=0,为低优先级; px1 :int1中断优先级控制位。控制方法同上。 pt0 :t0中断优先级控制位。控制方法同上。 pt1 :t1中断优先级控制位。控制方法同上。 ps :串行口中断优先级控制位。控制方法同上。,ip的结构、位名称和位地址如下:,例如:若要将int1、串行口设置为高优先级,其余中断源设置为低优先级,可执行下列指令: mov ip,#00010100b; 需要指出的是,若置5个中断源全部为高优先级,就等于不分优先级。,mcs-51单片机响应中断的基本原则如下: 1)低优先级中断可被高优先级中断请求所中断,反之则不能。 2)在同一优先级中(不管是高优先级或低优先级),某个中断一旦得到响应,与它同级的中断请求就不能再中断它。 cpu同时接收到几个中断时,首先响应优先级最高的中断请求。如果同级的多个中断请求同时出现,则按cpu查询次序确定的中断优先权排队来响应,其确定的查询次序见表5.6。由此可见,各中断源在同一个优先级的条件下,外部中断0的中断优先权最高,串行口中断优先权最低。,查询顺序如表5-6: 表5-6 中断源同级优先次序 中断源 中断级别 外部中断0 最高 t0溢出中断 外部中断1 t1溢出中断 串行口中断 最低,5.3 中断处理过程 中断处理过程可分为三个阶段,即中断响应、中断处理和中断返回。所有计算机的中断处理都有这样三个阶段,但不同的计算机由于中断系统的硬件结构不完全相同,因而中断响应的方式有所不同,其一般的流程图如图5.4所示。,5.3.1 中断响应 1cpu的中断响应条件 cpu响应中断的条件主要有以下几点: 1)由中断源发出中断申请。 2)中断总允许位ea1,即cpu允许所有中断源申请中断。 3)申请中断的中断源的中断允许位为1,即此中断源没有被屏蔽,可以向cpu申请中断。 以上是cpu响应中断的基本条件。若满足,cpu一般会响应中断,但如果有下列任一种情况存在,中断响应即被封锁。,1)cpu正在执行一个同级或高级的中断服务程序。 2)当前的机器周期不是正在执行的指令的最后一个周期,即正在执行的指令完成前任何中断请求都得不到响应。 3)正在执行的指令是返回指令reti或者对专用寄存器ie、ip进行读写的指令时,在执行reti或者读写ie或ip之后,不会马上响应中断请求。,2中断响应过程 如果中断响应条件满足,且不存在中断受阻的情况,则cpu响应中断。此时,中断系统通过硬件生成的长调用指令“lcall”,自动把断点地址压入堆栈保护(但不保护状态寄存器psw及其他寄存器内容),然后将对应的中断入口地址装入程序计数器pc使程序转向该中断入口地址,并执行中断服务程序。,5.3.2 中断处理 中断处理(又称中断服务)程序从入口地址开始执行,直到返回指令“reti”为止,这个过程称为中断处理。,5.3.3 中断返回 中断返回是指中断服务完成后,计算机返回到断点(原来断开的位置),继续执行原来的程序。中断返回由专门的中断返回指令“reti”实现。该指令的功能是把断点地址取出,送回到程序计数器pc中去。另外,它还通知中断系统已完成中断处理,将清除优先级状态触发器。特别要注意不能用“ret”指令代替“reti”指令。,恢复断点地址: 将原来压入堆栈中的pc断点地址从堆栈中弹出,送回pc。这样cpu就返回到原断点处,继续执行被中断的原程序。初学者容易模糊的是,中断返回,返回哪里? 答案是:从什么地方来,回什么地方去。不是返回到相应中断的入口地址,而是返回到中断断点地址。,5.3.4 中断响应时间 外部中断的最短的响应时间为3个机器周期: (1)中断请求标志位查询占1个机器周期。 (2)子程序调用指令lcall转到相应的中断服务程序入口,需2个机器周期。 外部中断响应的最长的响应时间为8个机器周期: (1)发生在cpu进行中断标志查询时,刚好是开始执行reti或是访问ie或ip的指令,则需把当前指令执行完再继续执行一条指令后,才能响应中断,当前指令执行完最长需2个机器周期。 (2)接着再执行一条指令,按最长指令(乘法指令mul和除法指令div)来算,也只有4个机器周期。 (3)加上硬件子程序调用指令lcall的执行,需要2个机器周期。 所以,外部中断响应最长时间为8个机器周期。 如果已在处理同级或更高级中断,响应时间无法计算。 在一个单一中断的系统里,mcs-51单片机对外部中断请求的响应的时间总是在38个机器周期之间。,5.3.5 中断请求的撤销 中断源发出中断请求,相应中断请求标志置“1”。 cpu响应中断后,必须清除中断请求“1”标志。否则中断响应返回后,将再次进入该中断,引起死循环出错。 (1)定时器中断请求的撤销 对于定时器0或1溢出中断,cpu在响应中断后即由硬件自动清除其中断标志位tf0或tf1,无需采取其他措施。 (2)串行口中断请求的撤销 对于串行口中断,cpu在响应中断后,硬件不能自动清除中断请求标志位ti、ri,必须在中断服务程序中用软件将其清除。 (3)外部中断请求的撤销 外部中断可分为边沿触发型和电平触发型。,例:,硬件电路如图所示。当外部设备有中断请求时,中断请求信号经反相,加到锁存器cp端,作为cp脉冲。由于d端接地为0,q端输出低点平,触发 int0生中断。当cpu响应中断后,应在该中断服务程序中按排两条指令: clr p1.0 setb p1.0 从而撤消引起重复中断的int0低电平信号。 因此一般来说,对外中断int0、intl,应尽量采用边沿触发方式,以简化硬件电路和软件程序。,5.4 中断程序设计结构及应用举例 中断系统的应用要解决的问题主要是编写应用程序,编写应用程序包括两大部分:一是中断初始化;二是中断服务程序。本节将介绍中断程序的一般设计方法,并通过实例说明中断系统的应用。 5.4.1 中断程序的一般设计方法 1主程序 在编写主程序时应注意以下两点。 1)主程序的起始地址:mcs-51单片机复位后,(pc)0000h,而各中断源的入口地址为0003h0023h。因此,在编写程序时应在0000h处使用一条转移指令以跳过上述区域,主程序则以转移指令的目的地址作为其起始地址。 2)中断系统的初始化,2中断服务程序 在编写中断服务程序时应注意以下三点。 1)由表5.1可知,五个中断源的入口地址之间彼此相差8个存储单元,一般来说无法容纳下一个完整的中断服务程序。因此,通常在中断服务程序的入口处设置一条三字节长转移指令,这样可使中断服务程序安排在64kb程序存储器的任何地方。 2)在中断服务程序的开始应使用软件保护现场,在中断处理完成之后、中断返回之前应恢复现场。 3)中断服务程序的最后一条指令是中断返回指令reti。,下面通过实例来说明中断程序的一般设计方法。利用外部中断0向cpu申请中断,中断服务将pl口作为输出驱动。 主程序如下: org 0000h ajmp main ;转向主程序 org 0003h ;外部中断0入口地址 ajmp wint ;指向中断服务程序 org 0100h ;主程序 main:setb it0 ;选择边沿触发方式 setb ex0 ;允许外部中断0 setb ea ;cpu允许中断 here:ajmp here ;主程序踏步 中断服务程序如下: org 0200h wint:mov a, #0ffh mov p1, a ;输出驱动 reti ;中断返回 end,5.4.2 中断程序应用举例 【例5.1】 如图5.6所示,要求每次来一个负脉冲,使连接到p1口的发光二极管led循环点亮。 解:利用的下降沿触发中断。,汇编语言程序如下: org 0000h ;复位入口 ljmp main org 0013h ;中断入口 ljmp int_x1 org 0100h ;主程序 main:mov sp, #60h ;设栈底 mov a, #01h mov p1, #00h setb it1 ;负跳变触发中断 setb exl ;开int1中断 setb ea ;开总允许开关 sjmp $ ;等待 int_x1:mov p1, a rl a reti end,汇编语言程序如下: org 0000h ;复位入口 ljmp main org 0013h ;中断入口 ljmp int_x1 org 0100h ;主程序 main:mov sp, #60h ;设栈底 mov a, #01h mov p1, #00h setb it1 ;负跳变触发中断 setb exl ;开int1中断 setb ea ;开总允许开关 sjmp $ ;等待 int_x1:mov p1, a rl a reti end,对应的c语言程序如下: #include unsigned char i=0x01; void intxl_isr( ) interrupt 2 i=1; if (i=0) i=0x01; /移位8次后,i将变为0,需重新赋值 p1=i; void main( void) p1=0; it1=1; ex1=1; ea=1; while (1); /循环等待 ,2、使用mcs-51单片机的p1口连接到8颗led,要求采用中断方式,每当按键按下奇数次时,p1口单数引脚灯亮,按下偶数次时,p1口偶数引脚灯亮。,3、在89c51单片机的int0引脚外接脉冲信号,要求每送来一个脉冲,把30h单元值加1,若30h单元记满则进位31h单元。试利用中断结构,编制一个脉冲计数程序。,org 0000h ajmp main org 0003h ajmp subg main: mov a,#00h mov 30h,a mov 31h,a mov sp,#70h setb int0 setb ea setb ex0 ajmp $ org 0200h subg: push acc inc 30h mov a,30h jnz back inc 31h back: pop reti,【例5.2】 编写流水灯的中断闪烁程序。 正常工作时单片机p1口的8个led灯左移、右移,外部中断0产生请求时,led亮、灭闪10次。以下就是实现该功能的程序,它由延时子程序delay和中断处理子程序ext0以及主程序三部分组成,分别实现延时、led闪烁和流水灯的功能。,org 0000h ;复位入口 ljmp main org 0003h ;外部中断0入口 ljmp int_x0 org 0100h main: mov sp,#60h ;主程序入口,设栈底 mov a,#01h mov p1,#00h setb ea ;开中断 setb ex0 setb it0 ;负跳变触发中断 mov r1,#08h ;循环移位次数 l1: mov p1,a lcall delay rl a ;左移一位 djnz r1,l1 ;判断循环左移次数,若未结束则继续左移 mov r1,#08h ;左移结束,赋予循环右移次数 l2: rr a ;右移一位 mov p1,a lcall delay djnz r1,l2 ;判断循环右移次数,若未结束则继续右移 mov r1,#08h ;重置循环移位次数 ljmp l1,int_x0: mov r2,#0ah ;中断服务程序入口,定义闪烁次数 l3: mov p1,#0ffh ;led灯全亮 lcall delay mov p1,#00h ;led灯全灭 lcall delay djnz r2,l3 ;判断闪烁次数是否到达 reti ;返回主程序 delay: mov r6,#0ffh ;延时子程序入口 l5: mov r5,#0ffh l4: djnz r5,l4 djnz r6,l5 ret end,【例】 出租车计价器计程方法是车轮每运转一圈产生一个负脉冲,从外中断int0(p3.2)引脚输入,行驶里程为轮胎周长运转圈数,设轮胎周长为2m,试实时计算出租车行驶里程(单位米),数据存32h、31h、30h。, 中断系统应用举例,解:编程如下: org 0000h ;复位地址 ljmp stat ;转初始化 org 0003h ;中断入口地址 ljmp int ;转中断服务程序,org 0100h ;初始化程序首地址 stat: mov sp,#60h ;置堆栈指针 setb it0 ;置边沿触发方式 mov ip,#01h ;置高优先级 mov ie,#81h ;开中 mov 30h,#0 ;里程计数器清0 mov 31h,#0 ; mov 32h,#0 ; ljmp main ;转主程序,并等待中断 org 0200h ;中断服务子程序首地址 int: push acc ;保护现场 push psw ; mov a,30h ;读低8位计数器 add a,#2 ;低8位计数器加2m mov 30h,a ;回存 clr a ; addc a,31h ;中8位计数器加进位 mov 31h,a ;回存 clr a ; addc a,32h ;高8位计数器加进位 mov 32h,a ;回存 push psw ;恢复现场 push acc ; reti ;中断返回 end,main主程序可以处理循环显示等任务。,5.4.3 外部中断的扩展 mcs-51单片机有两个外部中断请求输入端,即和。在实际应用中,若系统所需的外部中断源为两个以上,就需要扩展外部中断源。 1定时计数器作为外部中断源的使用方法 2中断和查询结合的方法,的中断服务程序如下: intr:mov p1,#0ffh ;初始化p1口 jnb p1.0,wsir1 ;p1.0引脚为0,转外设ir1中断服务程序 jnb p1.1,wsir2 ;p1.1引脚为0,转外设ir2中断服务程序 jnb p1.2,wsir3 ;p1.2引脚为0,转外设ir3中断服务程序 jnb p1.3,wsir4 ;p1.3引脚为0,转外设ir4中断服务程序 ljmp intrend wsir1: ;外设ir1中断服务程序 ljmp intrend wsir2: ;外设ir2中断服务程序 ljmp intrend wsir3: ;外设ir3中断服务程序 ljmp intrend wsir4: ;外设ir4中断服务程序 ljmp intrend intrend:reti,4.8 函 数,4.8.1 函数的定义,函数定义的一般格式如下: 函数类型 函数名(形式参数表) reentrantinterrupt musing n 形式参数说明 局部变量定义 函数体 ,前面部件称为函数的首部,后面称为函数的尾部,格式说明: 1函数类型 函数类型说明了函数返回值的类型。 2函数名 函数名是用户为自定义函数取的名字以便调用函数时使用。 3形式参数表 形式参数表用于列录在主调函数与被调用函数之间进行数据传递的形式参数。,【例21】定义一个返回两个整数的最大值的函数max()。 int max(int x,int y) int z; z=xy?x:y; return(z); 也可以用成这样: int max(x,y) int x,y; int z; z=xy?x:y; return(z); ,4reentrant修饰符,这个修饰符用于把函数定义为可重入函数。所谓可重入函数就是允许被递归调用的函数。函数的递归调用是指当一个函数正被调用尚未返回时,又直接或间接调用函数本身。一般的函数不能做到这样,只有重入函数才允许递归调用。,关于重入函数,注意以下几点: (1)用reentrant修饰的重入函数被调用时,实参表内不允许使用bit类型的参数。函数体内也不允许存在任何关于位变量的操作,更不能返回bit类型的值。 (2)编译时,系统为重入函数在内部或外部存储器中建立一个模拟堆栈区,称为重入栈。重入函数的局部变量及参数被放在重入栈中,使重入函数可以实现递归调用。 (3)在参数的传递上,实际参数可以传递给间接调用的重入函数。无重入属性的间接调用函数不能包含调用参数,但是可以使用定义的全局变量来进行参数传递。,5interrupt m修饰符 interrupt m是c51函数中非常重要的一个修饰符,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论