MCS51中断系统教学课件PPT.ppt

上传人:laozhun 文档编号:2963733 上传时间:2023-03-05 格式:PPT 页数:56 大小:579.02KB
返回 下载 相关 举报
MCS51中断系统教学课件PPT.ppt_第1页
第1页 / 共56页
MCS51中断系统教学课件PPT.ppt_第2页
第2页 / 共56页
MCS51中断系统教学课件PPT.ppt_第3页
第3页 / 共56页
MCS51中断系统教学课件PPT.ppt_第4页
第4页 / 共56页
MCS51中断系统教学课件PPT.ppt_第5页
第5页 / 共56页
点击查看更多>>
资源描述

《MCS51中断系统教学课件PPT.ppt》由会员分享,可在线阅读,更多相关《MCS51中断系统教学课件PPT.ppt(56页珍藏版)》请在三一办公上搜索。

1、第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;取数

2、 JZ ENDO;检测是否为0?为0,转ENDO MOV R0,A;不为0,传送 INC DPTR;修改地址指针 INC R0 AJMP LOOPENDO: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+)

3、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)|0 x01;if(j=0XFF)j=0XFE;P1=j;/*将数值输出到Port1,控制LED亮或灭*/delay();/*调用 delay 函数*/,5.1 中断系统概述 1中断的概念 CPU正在执行程序时,单片机外部或内部发生的某一事件,请求CPU迅速去处理。CPU暂时中止当前的工作,转到中断服务处理程序处理所发生的事件。处理完该事件后,再回到原来被

4、中止的地方,继续原来的工作,这称为中断。CPU处理事件的过程,称为CPU的中断响应过程。,图5-1中断流程图所示。对事件的整个处理过程,称为中断处理(或中断服务)。,能够实现中断处理功能的部件称为中断系统;产生中断的请求源称为中断请求源。中断源向CPU提出的处理请求,称为中断请求(或中断申请)。进入中断保护现场中断处理恢复现场 中断返回,2中断的作用 提高CPU工作效率 具有实时处理功能 具有故障处理功能 实现分时操作,中断功能强弱是计算机性能优劣的重要标志,3中断系统的功能 为了正确地处理中断任务并能满足各种中断源的中断请求,计算机的中断系统应该具有以下功能。1)能实现中断及返回。2)能实现

5、中断优先级排队。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个为内部中断源

6、:,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的结构、位名称、位地址和功能如下:,

7、1中断请求标志寄存器 MCS-51对每一个中断请求都对应有一个中断请求标志位,中断请求被响应前,中断请求由CPU锁存在特殊功能寄存器TCON和SCON的相应中断标志位中。(1)定时和外中断控制寄存器TCON,TCON位功能:TF1 T1溢出中断请求标志 T1计数溢出后,TF1=1 TF0 T0溢出中断请求标志 T0计数溢出后,TF0=1TF0/TF1:定时器溢出中断申请标志位:=0:定时器未溢出;=1:定时器溢出申请中断,进中断后自动清零。IE1 外中断中断请求标志 当P3.3引脚信号有效时,IE1=1 IE0 外中断中断请求标志 当P3.2引脚信号有效时,IE0=1IE0/IE1:外部中断申

8、请标志位:=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发送中断

9、请求标志位。串口每发送完一帧串行数据后,硬件自动置“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中断允许

10、控制位 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

11、 EASETBEX0或者 MOVIE,#10000001B或者 ORLIE,#10000001B,中断允许控制寄存器IE,中断嵌套结构类似与调用子程序嵌套,不同的是:子程序嵌套是在程序中事先按排好的;中断嵌套是随机发生的。子程序嵌套无次序限制,中断嵌套只允许高优先级“中断”低优先级。,3中断优先级控制寄存器IP,MCS-51单片机有5个中断源,有两个中断优先级:高优先级和低优先级,可实现两级中断服务嵌套,由IP控制。只要对IP各位置1或清零,就可对各中断源设置高优先级或低优先级。相应位置1,定义为高优先级;相应位清零,定义为低优先级。IP寄存器的字节地址为0B8H,位地址为0BFH0B8H。I

12、P相关的位地址见表5.5。,PX0:INT0中断优先级控制位。PX0=1,为高优先级;PX0=0,为低优先级;PX1:INT1中断优先级控制位。控制方法同上。PT0:T0中断优先级控制位。控制方法同上。PT1:T1中断优先级控制位。控制方法同上。PS:串行口中断优先级控制位。控制方法同上。,IP的结构、位名称和位地址如下:,例如:若要将INT1、串行口设置为高优先级,其余中断源设置为低优先级,可执行下列指令:MOV IP,#00010100B;需要指出的是,若置5个中断源全部为高优先级,就等于不分优先级。,MCS-51单片机响应中断的基本原则如下:1)低优先级中断可被高优先级中断请求所中断,反

13、之则不能。2)在同一优先级中(不管是高优先级或低优先级),某个中断一旦得到响应,与它同级的中断请求就不能再中断它。CPU同时接收到几个中断时,首先响应优先级最高的中断请求。如果同级的多个中断请求同时出现,则按CPU查询次序确定的中断优先权排队来响应,其确定的查询次序见表5.6。由此可见,各中断源在同一个优先级的条件下,外部中断0的中断优先权最高,串行口中断优先权最低。,查询顺序如表5-6:表5-6中断源同级优先次序中断源 中断级别外部中断0最高T0溢出中断外部中断1T1溢出中断串行口中断最低,5.3 中断处理过程 中断处理过程可分为三个阶段,即中断响应、中断处理和中断返回。所有计算机的中断处理

14、都有这样三个阶段,但不同的计算机由于中断系统的硬件结构不完全相同,因而中断响应的方式有所不同,其一般的流程图如图5.4所示。,5.3.1 中断响应1CPU的中断响应条件CPU响应中断的条件主要有以下几点:1)由中断源发出中断申请。2)中断总允许位EA1,即CPU允许所有中断源申请中断。3)申请中断的中断源的中断允许位为1,即此中断源没有被屏蔽,可以向CPU申请中断。以上是CPU响应中断的基本条件。若满足,CPU一般会响应中断,但如果有下列任一种情况存在,中断响应即被封锁。,1)CPU正在执行一个同级或高级的中断服务程序。2)当前的机器周期不是正在执行的指令的最后一个周期,即正在执行的指令完成前

15、任何中断请求都得不到响应。3)正在执行的指令是返回指令RETI或者对专用寄存器IE、IP进行读写的指令时,在执行RETI或者读写IE或IP之后,不会马上响应中断请求。,2中断响应过程 如果中断响应条件满足,且不存在中断受阻的情况,则CPU响应中断。此时,中断系统通过硬件生成的长调用指令“LCALL”,自动把断点地址压入堆栈保护(但不保护状态寄存器PSW及其他寄存器内容),然后将对应的中断入口地址装入程序计数器PC使程序转向该中断入口地址,并执行中断服务程序。,5.3.2 中断处理 中断处理(又称中断服务)程序从入口地址开始执行,直到返回指令“RETI”为止,这个过程称为中断处理。,5.3.3

16、中断返回 中断返回是指中断服务完成后,计算机返回到断点(原来断开的位置),继续执行原来的程序。中断返回由专门的中断返回指令“RETI”实现。该指令的功能是把断点地址取出,送回到程序计数器PC中去。另外,它还通知中断系统已完成中断处理,将清除优先级状态触发器。特别要注意不能用“RET”指令代替“RETI”指令。,恢复断点地址:将原来压入堆栈中的PC断点地址从堆栈中弹出,送回PC。这样CPU就返回到原断点处,继续执行被中断的原程序。初学者容易模糊的是,中断返回,返回哪里?答案是:从什么地方来,回什么地方去。不是返回到相应中断的入口地址,而是返回到中断断点地址。,5.3.4 中断响应时间外部中断的最

17、短的响应时间为3个机器周期:(1)中断请求标志位查询占1个机器周期。(2)子程序调用指令LCALL转到相应的中断服务程序入口,需2个机器周期。外部中断响应的最长的响应时间为8个机器周期:(1)发生在CPU进行中断标志查询时,刚好是开始执行RETI或是访问IE或IP的指令,则需把当前指令执行完再继续执行一条指令后,才能响应中断,当前指令执行完最长需2个机器周期。(2)接着再执行一条指令,按最长指令(乘法指令MUL和除法指令DIV)来算,也只有4个机器周期。(3)加上硬件子程序调用指令LCALL的执行,需要2个机器周期。所以,外部中断响应最长时间为8个机器周期。如果已在处理同级或更高级中断,响应时

18、间无法计算。在一个单一中断的系统里,MCS-51单片机对外部中断请求的响应的时间总是在38个机器周期之间。,5.3.5 中断请求的撤销 中断源发出中断请求,相应中断请求标志置“1”。CPU响应中断后,必须清除中断请求“1”标志。否则中断响应返回后,将再次进入该中断,引起死循环出错。(1)定时器中断请求的撤销对于定时器0或1溢出中断,CPU在响应中断后即由硬件自动清除其中断标志位TF0或TF1,无需采取其他措施。(2)串行口中断请求的撤销对于串行口中断,CPU在响应中断后,硬件不能自动清除中断请求标志位TI、RI,必须在中断服务程序中用软件将其清除。(3)外部中断请求的撤销外部中断可分为边沿触发

19、型和电平触发型。,例:,硬件电路如图所示。当外部设备有中断请求时,中断请求信号经反相,加到锁存器CP端,作为CP脉冲。由于D端接地为0,Q端输出低点平,触发 INT0生中断。当CPU响应中断后,应在该中断服务程序中按排两条指令:CLR P1.0 SETB P1.0 从而撤消引起重复中断的INT0低电平信号。因此一般来说,对外中断INT0、INTl,应尽量采用边沿触发方式,以简化硬件电路和软件程序。,5.4 中断程序设计结构及应用举例 中断系统的应用要解决的问题主要是编写应用程序,编写应用程序包括两大部分:一是中断初始化;二是中断服务程序。本节将介绍中断程序的一般设计方法,并通过实例说明中断系统

20、的应用。5.4.1 中断程序的一般设计方法1主程序在编写主程序时应注意以下两点。1)主程序的起始地址:MCS-51单片机复位后,(PC)0000H,而各中断源的入口地址为0003H0023H。因此,在编写程序时应在0000H处使用一条转移指令以跳过上述区域,主程序则以转移指令的目的地址作为其起始地址。2)中断系统的初始化,2中断服务程序在编写中断服务程序时应注意以下三点。1)由表5.1可知,五个中断源的入口地址之间彼此相差8个存储单元,一般来说无法容纳下一个完整的中断服务程序。因此,通常在中断服务程序的入口处设置一条三字节长转移指令,这样可使中断服务程序安排在64KB程序存储器的任何地方。2)

21、在中断服务程序的开始应使用软件保护现场,在中断处理完成之后、中断返回之前应恢复现场。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 0200HW

22、INT:MOV A,#0FFHMOV 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

23、 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=0 x01;void intxl_isr()interrupt 2 i=1;i

24、f(i=0)i=0 x01;/移位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,#00

25、H MOV 30H,A MOV 31H,A MOV SP,#70HSETB INT0SETB EASETB EX0AJMP$ORG 0200H SUBG:PUSH ACCINC 30HMOV A,30HJNZ BACKINC 31H BACK:POP RETI,【例5.2】编写流水灯的中断闪烁程序。正常工作时单片机P1口的8个LED灯左移、右移,外部中断0产生请求时,LED亮、灭闪10次。以下就是实现该功能的程序,它由延时子程序DELAY和中断处理子程序EXT0以及主程序三部分组成,分别实现延时、LED闪烁和流水灯的功能。,ORG 0000H;复位入口 LJMP MAIN ORG 0003H;

26、外部中断0入口 LJMP INT_X0 ORG 0100HMAIN:MOV SP,#60H;主程序入口,设栈底 MOV A,#01H MOV P1,#00H SETBEA;开中断 SETBEX0 SETBIT0;负跳变触发中断 MOV R1,#08H;循环移位次数L1:MOV P1,A LCALLDELAY RL A;左移一位 DJNZR1,L1;判断循环左移次数,若未结束则继续左移 MOV R1,#08H;左移结束,赋予循环右移次数L2:RR A;右移一位 MOV P1,A LCALL DELAY DJNZ R1,L2;判断循环右移次数,若未结束则继续右移 MOV R1,#08H;重置循环移

27、位次数 LJMP L1,INT_X0:MOVR2,#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,试实时计算出租车行驶

28、里程(单位米),数据存32H、31H、30H。,中断系统应用举例,解:编程如下:ORG0000H;复位地址 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 P

29、SW;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中断和查询结合的方法,的中断服务程

30、序如下: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 INTRENDWSIR1:;外设IR1中断服务程序 LJMP INTRENDWSIR2:;外设IR2中断服务程序 LJMP INTRENDWSIR3:;外设IR3中断服务程序 LJMP INTRENDWSIR4:;外设IR4中断服务程序

31、 LJMP INTRENDINTREND: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;re

32、turn(z);也可以用成这样:int max(x,y)int x,y;int z;z=xy?x:y;return(z);,4reentrant修饰符,这个修饰符用于把函数定义为可重入函数。所谓可重入函数就是允许被递归调用的函数。函数的递归调用是指当一个函数正被调用尚未返回时,又直接或间接调用函数本身。一般的函数不能做到这样,只有重入函数才允许递归调用。,关于重入函数,注意以下几点:(1)用reentrant修饰的重入函数被调用时,实参表内不允许使用bit类型的参数。函数体内也不允许存在任何关于位变量的操作,更不能返回bit类型的值。(2)编译时,系统为重入函数在内部或外部存储器中建立一个模拟

33、堆栈区,称为重入栈。重入函数的局部变量及参数被放在重入栈中,使重入函数可以实现递归调用。(3)在参数的传递上,实际参数可以传递给间接调用的重入函数。无重入属性的间接调用函数不能包含调用参数,但是可以使用定义的全局变量来进行参数传递。,5interrupt m修饰符 interrupt m是C51函数中非常重要的一个修饰符,这是因为中断函数必须通过它进行修饰。在C51程序设计中,当函数定义时用了interrupt m修饰符,系统编译时把对应函数转化为中断函数,自动加上程序头段和尾段,并按MCS-51系统中断的处理方式自动把它安排在程序存储器中的相应位置。,在该修饰符中,m的取值为031,对应的中

34、断情况如下:0外部中断01定时/计数器T02外部中断13定时/计数器T14串行口中断5定时/计数器T2其它值预留。,编写MCS-51中断函数注意如下:(1)中断函数不能进行参数传递,如果中断函数中包含任何参数声明都将导致编译出错。(2)中断函数没有返回值,如果企图定义一个返回值将得不到正确的结果,建议在定义中断函数时将其定义为void类型,以明确说明没有返回值。(3)在任何情况下都不能直接调用中断函数,否则会产生编译错误。因为中断函数的返回是由8051单片机的RETI指令完成的,RETI指令影响8051单片机的硬件中断系统。如果在没有实际中断情况下直接调用中断函数,RETI指令的操作结果会产生

35、一个致命的错误。(4)如果在中断函数中调用了其它函数,则被调用函数所使用的寄存器必须与中断函数相同。否则会产生不正确的结果。,(5)C51编译器对中断函数编译时会自动在程序开始和结束处加上相应的内容,具体如下:在程序开始处对ACC、B、DPH、DPL和PSW入栈,结束时出栈。中断函数未加using n修饰符的,开始时还要将R0R1入栈,结束时出栈。如中断函数加using n修饰符,则在开始将PSW入栈后还要修改PSW中的工作寄存器组选择位。(6)C51编译器从绝对地址8m+3处产生一个中断向量,其中m为中断号,也即interrupt后面的数字。该向量包含一个到中断函数入口地址的绝对跳转。,(7

36、)中断函数最好写在文件的尾部,并且禁止使用extern存储类型说明。防止其它程序调用。,【例22】编写一个用于统计外中断0的中断次数的中断服务程序extern int x;void int0()interrupt 0 using 1 x+;,6using n修饰符 修饰符using n用于指定本函数内部使用的工作寄存器组,其中n的取值为03,表示寄存器组号。对于using n修饰符的使用,注意以下几点:(1)加入using n后,C51在编译时自动的在函数的开始处和结束处加入以下指令。PUSH PSW;标志寄存器入栈MOV PSW,#与寄存器组号相关的常量POP PSW;标志寄存器出栈(2)using n修饰符不能用于有返回值的函数,因为C51函数的返回值是放在寄存器中的。如寄存器组改变了,返回值就会出错。,OVER!,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号