您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 项目/工程管理 > 第4章:汇编语言程序设计3
4.4分支程序设计•4.4.1分支程序设计方法•4.4.2分支程序设计实例4.4.1分支程序设计方法•分支程序是根据程序的要求改变程序的执行顺序,并根据条件对程序的流向进行判断的程序结构。•分支程序一般有两个或两个以上的出口。•分支程序又分为单分支和多分支结构。4.4.1分支程序设计方法•分支程序的特点和设计方法。程序中有转移指令包括无条件转移、条件转移和散转指令。分支的出口有两个以上时,形成散转程序,一般用散转指令来实现,设计方法有4种。分别是转移指令表法、地址偏移量表法、转向地址表法和利用RET指令法。单分支程序一般有一个入口、两个出口,一般用无条件转移和条件转移指令来实现,结构形式有两种。一种是当条件满足时,执行处理程序2,否则执行处理程序3。分支程序流程图如下图(a)所示。另一种是当条件满足时,跳过处理程序2,直接执行处理程序3,否则顺序执行处理程序2和处理程序3。分支程序流程图如下图(b)所示。4.4.1分支程序设计方法开始处理2处理3处理1初始化结束YN条件满足?(a)分支程序流程图(b)分支程序流程图4.4.1分支程序设计方法开始处理2处理3处理1初始化结束YNYN处理4处理5条件满足?条件满足?分支程序允许嵌套,即一个分支接一个分支,形成树状多分支结构。多分支程序流程图如右图所示。多分支程序流程图【例4-9】两个无符号数大小的比较:有两个无符号数分别放在30H和31H单元,若(30H)≥(31H),则P1.0管脚连接的LED发光(设P口接有LED,“0”点亮);若(30H)(31H),则P1.1管脚连接的LED发光。在系统自动控制中,一般是两种情况:一种是开关量的判断,并由此作出一种行为抉择;另一种是数据量的大小判断,根据大小、相等来选择相应的动作。本题是属于数据量的判断。数据大小的比较常用以下两种方法:一种是两数相减(放在A中的数据将被破坏),然后查看Cy,程序流程如图4-5所示。另外一种是直接用比较转移指令(A中数据不被破坏),然后查看Cy。X-Y开始结束CY=1?YNX<Y,P1.1灯亮XY,P1.0灯亮≥图4-5数据判断流程图程序如下:XDATA30H;地址赋值伪指令DATAYDATA31HORG0000HSJMPSTORG0030HST:MOVA,X;(X)→ACLRC;Cy=0SUBBA,Y;带借位减法,A-(Y)-Cy→AJCOUT1;Cy=1,转移到OUT1CLRP1.0;(30H)≥(31H),点P1.0上LEDSJMPSTOP;跳转到结束等待OUT1:CLRP1.1;(30H)(31H),点P1.1上LEDSTOP:SJMP$END图4-6信号灯电路【例4-10】已知电路如图4-6所示,要求实现:(1)K0单独按下,只有红灯(R)亮(2)K1单独按下,只有绿灯(G)亮(3)K0、K1均按下,红、绿、黄灯(Y)全亮(4)其余情况黄灯亮图4-7信号灯流程图本例为开关量(状态)的判断,流程如图4-7所示。设置端口方式,灭灯信号YP1.0=0?开始P1.1=0?P1.1=0?NNNYY红、绿、黄灯亮P1.2=P1.3=P1.4=0红灯亮P1.2=0P1.3=P1.4=1绿灯亮P1.3=0P1.2=P1.4=1黄灯亮P1.3=0P1.2=P1.4=1程序如下:ORG0000HSJMPSTARTORG0030HSTART:MOVP1,#0FFH;设置P1.0、P1.1为输入方式,;红、绿、黄灯灭LOOP:JNBP1.0,K1;查P1.0是否为0JNBP1.1,GREENCLRP1.4;亮黄灯,灭红、绿灯SETBP1.2SETBP1.3SJMPLOOPGREEN:CLRP1.3;亮绿灯,灭红、黄灯SETBP1.2SETBP1.4SJMPLOOPK1:JNBP1.1,ALLRED:CLRP1.2;亮红灯,灭绿、黄灯SETBP1.3SETBP1.4SJMPLOOPALL:CLRP1.2;红、绿、黄灯全亮CLRP1.3CLRP1.4SJMPLOOPEND4.4.2分支程序设计实例【例7】设计一个水塔水位控制系统,晶振频率6MHz。设计要求如下:(1)在水塔内三个不同的高度分别安装了一根固定不动的金属棒,正常情况下,塔内水位应保持在虚线之内,水位控制原理如下图所示。(2)A棒处于水位上限,B棒处于水位下限。当水位低于水位下限时,自动启动水泵电机给水塔供水;直到塔内水位达到水位上限,自动停止水泵电机动转。(3)塔内水位从水位上限下降到水位下限的过程中,水泵电机不会自动启动。(4)水塔进水时,要有信号灯指示;水位检测发生故障时,要有故障灯指示并使水塔水位控制系统停止工作。由于水的导电作用,当塔内水位达到水位下限时,B棒接通+5V;当塔内水位达到水位上限时,A棒也接通+5V。水位上限信号输入至P1.0,水位下限信号输入至P1.1,P1.2输出控制信号以控制水泵电机的启动(P1.2=0)和停止(P1.2=1),P1.3输出显示信号以指示水泵电机的运行状态(P1.3=0时点亮),P1.4输出故障信号以指示水位检测系统故障状态(P1.4=0时点亮)。s解:当塔内水位处于水位下限以下时,A、B棒通过电阻接地。水位控制信号与水泵电机控制状态的对应关系为了防止电机频繁启停,在启动或停止电机后最少要维持这一状态20s,这可以采用延时程序来实现。P1.1P1.0控制状态P1.2P1.3P1.400水泵电机启动00101故障报警11010维持原来状态111水泵电机停止1114.4.2分支程序设计实例ORG0000H0000H020030LJMPMAINORG0030H0030H439003MAIN:ORLP1,#03H;水位信号输入端做读入准备0033HF590MOVA,P1;读入水位检测信号0035H30E108JNBACC.1,QDZB;P1.1=0,转移至启动准备0038H20E016JBACC.0,TZDJ;P1.0=1,转移至停止电机003BH120100YS:LCALLDELAY;延时20s003EH80F0SJMPMAIN0040H30E008QDZB:JNBACC.0,QDDJ;P1.0=0,转移至启动电机0043HD292SETBP1.2;停止电机0045HD293SETBP1.3;关闭电机运行指示0047HC294CLRP1.4;打开水位检测故障指示0049H80FESJMP$;出现故障控制电路停止工作004BHC292QDDJ:CLRP1.2;启动电机004DHC293CLRP1.3;打开电机运行指示004FH80EASJMPYS0051HD292TZDJ:SETBP1.2;停止电机0053HD293SETBP1.30055H80E4SJMPYS主程序:程序注释ORG0100HDELAY:MOVR3,#200;延时20s的循环次数LP1:MOVR7,#200;延时100ms的循环次数LP2:MOVR6,#123;延时0.5ms的循环次数NOPLP3:DJNZR6,LP3DJNZR7,LP2DJNZR3,LP1RETEND;程序结束延时子程序:
本文标题:第4章:汇编语言程序设计3
链接地址:https://www.777doc.com/doc-3155859 .html