3.1调用子程序进程
主程序调用子程序进程应包含维护断点、跳至子程序首址、维护现场、子程序处理、康复现场、康复断点(子程序回来)6步。这六步都是用软件指令完结的。其间前两步维护断点和跳至子程序首址由调用指令CALL完结。维护断点其实便是把断点地址推入仓库中维护起来,要留意的是维护的断点应是紧跟着调用指令的下一条指令地址,而不是调用指令自身地址,不然会引起重复调用“死循环”,这点有必要提示学生留意。LCALL与ACALL是MCS-51单片机的两条调用指令,别离称为长调用和肯定调用,两指令首要差异在于LCALL后边操作数直接便是16位二进制的子程序进口地址;而ACALL后边操作数仅仅11位二进制数,子程序进口地址是把这11位数作为低位地址,再加上ACALL的下一条指令地址(即断点地址)的高5位作为高位地址,然后构成16位的子程序进口地址。由此可知,两条调用指令的调用规模是不一样的,LCALL为64KB程序存贮器任何规模,而ACALL在高5位地址不变的同一页2KB规模内。
因为主程序与子程序或许会运用相同的寄存器和存贮单元寄存数据,假如两者这些数据无关,那么子程序在运用这些相同寄存器和存贮单元之前,就有必要先把主程序寄存在这些区间里的数据现场维护起来,子程序在运用这些区间完毕后,再把主程序现场康复出来,以便子程序回来主程序后,主程序持续运用这些区间。现场维护与康复一般选用仓库推入PUSH指令与仓库弹出POP指令完结,当然也可选用改动作业寄存器R0~R7区间指针等办法完结。子程序回来只需用RET指令就可把维护在仓库中的断点康复出来,持续履行主程序。
此外,主程序与子程序是密切联系的,它们之间存在着进口参数与出口参数传递问题,也便是主程序怎么把输入参数传给子程序,子程序又怎么把处理结果的输出参数带回给主程序,两者参数传递一般可选用寄存器或存贮单元、仓库、数据指针等办法完结。
子程序再调用子程序叫做子程序嵌套,因为MCS-51单片机只能把内部RAM 00~7FH 128字节单元作为仓库运用,断点地址维护到仓库中需占2字节单元,所以子程序最多或许嵌套64级,当然实际运用中子程序嵌套一般2~3级,不然程序结构就显得太杂乱了。
3.2 中止进程
中止进程远比调用子程序进程要杂乱,它包含中止请求(或请求)、中止排队、中止呼应、中止服务(或处理)和中止回来5大步。这5大步是由硬件和软件结合完结的。
中止请求由中止源向CPU提出。MCS-51单片机只要T/C0守时/计数器0溢出、T/C1守时/计数器1溢出、TXD/RXD串行口发送与接纳一帧完、INT0外部中止0和INT1外部中止1等5个硬件中止源,其间前三个为内部中止源,后两个为外部中止源。
因为CPU在某一时刻只能呼应一个中止请求,为处理履行主程序时一起来了多个中止请求和正在处理某一中止时又来了新的中止请求这两种状况,计算机选用硬件或软件给各个中止源按优先权巨细进行中止排队,从多个中止请求中选出一个等级最高中止请求而呼应之,这一进程称为中止排队。MCS-51单片机用户可用指令设置高、低两个优先级,并且同级中还有5个固定的隐含优先级,从高到低的优先级次序别离是INT0、T/C0、INT1、T/C1、TXD/RXD。这样,在履行主程序时,一起来了两个以上中止请求,则先按凹凸两级挑选高优先级,如只要一个高档就直接选之,如有两个以上都是同级,则按同级隐含优先级,挑选其间一个高等级。如正在履行一个低优先级,又来了一个高优先级(即正在履行的中止等级低于新来的中止等级),则高优先级中止低优先级,这就构成了两级中止嵌套。如正在履行低的又来了另一低的或许正在履行高的又来了一个低的或高的(即正在履行的中止等级高于或等于新来的中止等级),则不予理睬,不会引起中止嵌套,也便是说同级隐含准则在不一起来了同级中止时无效。可见,MCS-51单片机最多构成两级中止嵌套。
CPU在履行任何机器指令时,在每一个机器周期TCY都要抽点时刻(MCS-51单片机为S5P2状况节拍)来收集查询有无中止请求,如没有,则持续履行原程序机器指令,如有中止请求,则先从中选出等级最高者,在中止呼应条件成立时,去处理呼应此中止请求。
MCS-51单片机的中止呼应必要条件是中止屏蔽总开关EA和中止请求相应的屏蔽分开关都有必要闭合,只要这样,中止请求信号才干送到CPU。此外,还不能碰到以下3种状况,即有优先级更高的中止请求一起提出或许正在履行同级或高档中止,正在履行的指令还没有履行完、正在履行RETI或拜访中止屏蔽寄存器IE和中止排队寄存器IP,这3种状况是中止呼应的充分条件。这1种状况中止排队轮不到它呼应;第2种状况有必要比及现行指令履行完,再呼应中止,指令周期分为1、2、4TCY三种机器周期,计算机每个TCY呈现仅检查一次中止请求,因而,2TCY和4TCY机器指令有或许没有履行完。假如履行指令没履行完就去呼应中止,则中止处理回来后,计算机很难把分断开履行的同一条指令连贯起来;第3种状况处理与第2种状况相似,但它除了要把现行的RETI指令或拜访IE、IP指令履行完处,还需再履行下一条指令,方能呼应中止。运用这个原理,很简单完结单步STEP操作(调试程序时运用)。
中止服务和中止回来又由关(制止)同级和初级中止、中止请求撤消、维护断点、跳至中止服务程序进口、维护现场、中止处理、康复现场、开(答应)同级和初级中止、康复断点(中止回来)等9小步组成。这9步中止服务进程与前面介绍的6步调用子程序进程相似,仅仅增加了开、关同级和初级中止请求以及中止请求撤消3步,其他6步彻底一致。开、关同级和初级中止意图是使不一起来中止请求的同级隐含排队准则无效,此刻只能完结高档嵌套初级的两级中止嵌套。在中止处理的回来前铲除原中止请求原因是避免同一次中止请求被重复呼应。
中止服务进程的前4步是由硬件主动完结的,这点彻底不同于调用子程序进程。当然TXD/RXD中止请求与INT0、INT1电平触发中止请求还需用户别离用软件和硬件铲除中止请求。MCS-51单片机的中止服务程序进口地址是固定的,它们别离是INT0为0003H、T/C0为000BH、INT1为0013H、T/C1为001BH、TXD/RXD为0023H。断点现场维护与康复也是经过仓库推入与弹出或改动作业寄存器区来完结的。
中止处理完后,就应回来断点持续履行主程序,开同级和初级中止、康复断点2步可用中止回来指令RETI完结,留意子程序回来指令RET只能完结康复断点,而不能开同级和初级中止。
声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/qianrushi/yingjian/266916.html