当前位置:首页 > 单片机 > 单片机
[导读]分支结构程序的指令执行顺序与指令在ROM中的存放顺序不同,其中某些具有判断功能的指令会根据判断结果改变接下来的指令执行顺序,从而使程序产生一个或多个分支流向。可用于分支结构程序设计的判断指令主要包括JZ、CJNE和JB等有条件转移指令。根据程序分支的数量,可以将分支程序分为三类:单分支、一般多分支和散转多分支。

C语言中有三大结构,分别是顺序结构、选择结构和循环结构(分支结构):

顺序结构就是程序从头到尾的顺序依次执行每一条代码,不重复执行任何代码,也不跳过任何代码。

选择结构也称分支结构,就是让程序“拐弯”,有选择性的执行代码,即可以跳过没用的代码,只执行有用的代码。

循环结构就是让程序“杀个回马枪”,不断地重复执行同一段代码。

结构化程序设计思想

1976年,图灵奖获得者Niklaus Wirth出版了名为Algorithms+Data Structure=Programs的软件设计专著,书中提及了算法和数据结构的概念,并提出作为结构化程序设计的基础的著名论断:程序=算法+数据结构。

从书中我们可以了解到结构化程序设计的基本思想为:

自上而下、逐步细化、模块化设计、结构化程序编码

由此结构化程序具有以下特点:

程序由不同功能的模块构成,各模块又可以按照不同类型分成一个或者多个子模块。

每个子模块之间有一个或者多个程序单元构成,个子模块之间可以互相调用程序单元。

一个程序单元由顺序、分支、循环三种基本结构构成。

分支结构程序的指令执行顺序与指令在ROM中的存放顺序不同,其中某些具有判断功能的指令会根据判断结果改变接下来的指令执行顺序,从而使程序产生一个或多个分支流向。可用于分支结构程序设计的判断指令主要包括JZ、CJNE和JB等有条件转移指令。根据程序分支的数量,可以将分支程序分为三类:单分支、一般多分支和散转多分支。

1.单分支程序

单分支程序仅进行一个条件判断,程序流程相对简单。

【例3-58】判断单字节数的奇偶性。要求:单字节数X存放于片内RAM地址为55H的存储单元中,判断其奇偶性,若其为奇数则将PSW寄存器中的F0置1,否则将F0清0。

参考程序如下,运行结果是:(F0)=01。该程序的流程图如图3-6所示。

【例3-59】判断两个单字节型无符号数的大小。要求:单字节型无符号数X和Y分别存放于寄存器R0和R1中,比较两个数的大小,将其中较大的数存入R2中。

参考程序如下,运行结果是:(R2)=20H。该程序的流程图如图3-7所示。

2.一般多分支程序

一般多分支程序需要进行两次或两次以上的分支判断,而且一个判断可能需要两条(或以上)条件转移指令配合完成。

【例3-60】求三个无符号字节型数据X、Y和Z中的最大值。要求:X、Y和Z分别存放于片内RAM的30H、31H和32H单元,最大值存于33H单元。

以下参考程序的运行结果是:(33H)=57H,其流程图如图3-8所示。分析程序和流程图可知,大于等于的判断由CJNE和JNC两条指令配合实现,并且大于等于判断进行了两次,因此本程序属于多分支的程序结构。

3.散转多分支程序

与一般多分支程序相比,散转多分支程序具有更多分支,可以根据用户输入或之间的处理结果转向相应分支,并执行对应的处理程序。散转多分支程序所用的转移指令是散转指令“JMP@A+DPTR”。散转多分支程序的设计方法有三种:转移指令表法、分支地址表法和地址偏移量表法。其中,转移指令表法已经结合指令JMP进行了讲解(见例3-47),因此本小节仅介绍后两种方法。

(1)分支地址表法

分支地址表法将各分支程序的首条指令的地址存入一个表中,当执行某个分支时,通过索引在该表中查找分支地址,并送入程序指针寄存器(PC),从而实现程序的分支转移。

【例3-62】利用分支地址表法,实现与例3-47程序相同的功能。

解:参考程序如下:

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: 驱动电源

在工业自动化蓬勃发展的当下,工业电机作为核心动力设备,其驱动电源的性能直接关系到整个系统的稳定性和可靠性。其中,反电动势抑制与过流保护是驱动电源设计中至关重要的两个环节,集成化方案的设计成为提升电机驱动性能的关键。

关键字: 工业电机 驱动电源

LED 驱动电源作为 LED 照明系统的 “心脏”,其稳定性直接决定了整个照明设备的使用寿命。然而,在实际应用中,LED 驱动电源易损坏的问题却十分常见,不仅增加了维护成本,还影响了用户体验。要解决这一问题,需从设计、生...

关键字: 驱动电源 照明系统 散热

根据LED驱动电源的公式,电感内电流波动大小和电感值成反比,输出纹波和输出电容值成反比。所以加大电感值和输出电容值可以减小纹波。

关键字: LED 设计 驱动电源

电动汽车(EV)作为新能源汽车的重要代表,正逐渐成为全球汽车产业的重要发展方向。电动汽车的核心技术之一是电机驱动控制系统,而绝缘栅双极型晶体管(IGBT)作为电机驱动系统中的关键元件,其性能直接影响到电动汽车的动力性能和...

关键字: 电动汽车 新能源 驱动电源

在现代城市建设中,街道及停车场照明作为基础设施的重要组成部分,其质量和效率直接关系到城市的公共安全、居民生活质量和能源利用效率。随着科技的进步,高亮度白光发光二极管(LED)因其独特的优势逐渐取代传统光源,成为大功率区域...

关键字: 发光二极管 驱动电源 LED

LED通用照明设计工程师会遇到许多挑战,如功率密度、功率因数校正(PFC)、空间受限和可靠性等。

关键字: LED 驱动电源 功率因数校正

在LED照明技术日益普及的今天,LED驱动电源的电磁干扰(EMI)问题成为了一个不可忽视的挑战。电磁干扰不仅会影响LED灯具的正常工作,还可能对周围电子设备造成不利影响,甚至引发系统故障。因此,采取有效的硬件措施来解决L...

关键字: LED照明技术 电磁干扰 驱动电源

开关电源具有效率高的特性,而且开关电源的变压器体积比串联稳压型电源的要小得多,电源电路比较整洁,整机重量也有所下降,所以,现在的LED驱动电源

关键字: LED 驱动电源 开关电源

LED驱动电源是把电源供应转换为特定的电压电流以驱动LED发光的电压转换器,通常情况下:LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: LED 隧道灯 驱动电源
关闭