当前位置:首页 > 嵌入式 > 嵌入式硬件
[导读]循环程序结构的特点是程序中含有可以反复执行的程序段,该程序段通常称为循环体。例如,求100个数的累加和,没有必要连续安排100条加法指令,可以只用一条加法指令并使其循

循环程序结构的特点是程序中含有可以反复执行的程序段,该程序段通常称为循环体。例如,求100个数的累加和,没有必要连续安排100条加法指令,可以只用一条加法指令并使其循环执行100次。因此循环程序不仅可以缩短程序长度和使程序所占的内存单元数量更少,也能使程序结构紧凑,可读性强。

1.循环程序的结构

循环结构程序主要由以下四部分组成。

(1)循环初始化循环初始化

程序段用于完成循环前的准备工作。例如,循环控制计数初值的设置、地址指针的起始地址的设置、为变量预置初值等。

(2)循环处理

这是循环程序结构的核心部分,完成实际的处理工作,它是需反复循环执行的部分,故又称循环体。这部分程序的内容,取决于实际要处理的问题本身。

(3)循环控制

在重复执行循环体的过程中,不断修改循环控制变量,直到符合结束条件,就结束循环程序的执行。循环结束控制方法分为循环计数控制法和条件控制法。

(4)循环结束

这部分是对循环程序执行的结果进行分析、处理和存放。

上面介绍的四部分有时能较明显地划分,有时则相互包含,不一定能明显区分。

2.循环结构的控制

根据循环控制部分不同,循环程序结构可分为循环计数控制结构和条件控制结构。左图是计数循环控制结构,图右是条件控制结构。

 

(1)计数循环控制结构 计数循环控制结构是依据计数器的值来决定循环次数,一般为减1计数器,计数器减到O时,结束循环。计数器的初值是在初始化时设定的。

MCS-51指令系统提供了功能极强的循环控制指令:

 

例如,计算n个数据的和,计算公式为

 

 

按这个公式,可以很容易地画出相应的程序框图,如图右所示

。从这个框图中,也可以看出循环程序的基本结构。

1. 求n个单字节无符号数xi的和,xi按i顺序存放在AT89S51单片机内部RAM从50H开始的单元中,n放在R2中,现将要求的和(双字节)放在R3R4中,程序如下:

 

在这里,用寄存器R2作为计数控制变量,RO作为变址单元,用它来寻址xi。一般来说,循环工作部分中的数据应该用间接方式来寻址,如这里用

ADD A,@RO

计数控制方法只有在循环次数已知的情况下才适用。对循环次数未知的问题,不能用循环次数来控制,往往需要根据某种条件来判断是否应该终止循环。

(2)条件控制结构 条件控制结构如图4-9所示。条件控制就是在循环控制中,设置一个条件,判断是否满足该条件,如满足条件,则循环结束;如果不满足该条件,则循环继续。

2. 设有一串字符,依次存放在内部RAM从30H单元开始的连续单元中,该字符串以OAH为结束标志,编写测试字符串长度的程序。

本例采用逐个字符依次与“0AH”比较(设置的条件)的方法。为此设置一个长度计数器和一个字符串指针。长度计数器用来累计字符串的长度,字符串指针用于指定字符。如果指定字符与“0AH”不相等,则长度计数器和字符串指针都加1,以便继续往下比较;如果比较相等,则表示该字符为“0AH”,字符串结束,长度计数器的值就是字符串的长度。程序如下:

 

上面介绍的两个例子都是在一个循环程序中不再包含其他循环程序,该循环程序称为单循环程序。如果一个循环程序中包含了其他循环程序,则称为多重循环程序。

最常见的多重循环是由DJNZ指令构成的软件延时程序。

3. 50 ms延时程序。

软件延时程序与指令执行时间有很大的关系。在使用12 MHz晶振时,一个机器周期为1”s,执行一条DJNZ指令的时间为2μs。这时,可用双重循环方法写出如下程序:

 

以上延时程序不是太精确,如把所有指令的执行时间计算在内,它的延时时间为

 

如果要求比较精确的延时,应该考虑对上述程序进行修改。但要注意,用软件实现延时程序,不允许有中断,否则将严重影响定时的准确性。

对于需延时更长的时间,可采用更多重的循环,如1s延时,可用三重循环。[!--empirenews.page--]

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

在嵌入式系统开发、调试和测试过程中,J-Link作为一种高效的调试工具,为开发者提供了极大的便利。然而,要想充分发挥J-Link的功能,首先需要正确安装其驱动程序。本文将详细介绍J-Link驱动的安装过程,并深入解析其中...

关键字: jlink 嵌入式系统 嵌入式开发

与谷歌的合作使 Nordic 能够在 nRF Connect SDK 中嵌入开发人员软件,以构建与安卓移动设备兼容的谷歌Find My Device和未知跟踪器警报服务

关键字: 谷歌 SoC 嵌入式开发

嵌入式开发作为当今电子工程和信息技术领域的核心分支,涵盖了广泛的软硬件技术和系统集成方法,用于构建高性能、低成本、低功耗、体积小巧且功能专一的嵌入式系统。这些系统无处不在,从微型传感器节点到复杂的工业控制设备,从日常使用...

关键字: 嵌入式开发 Python

嵌入式开发是当今信息技术领域不可或缺的一部分,它融合了硬件设计、软件开发和系统集成等多个学科,专门用于创建那些被嵌入到特定设备或系统中的专用计算机系统。嵌入式开发的主要过程包括利用分立元件或集成器件进行电路设计、结构设计...

关键字: 嵌入式开发 硬件设计 软件开发

嵌入式开发作为一种专业且技术密集型的领域,涵盖了从硬件底层驱动、中间件到应用层软件开发等多个层面的工作,其所需的工具种类繁多,各有针对性,旨在提升开发效率、保证代码质量以及简化调试过程。

关键字: 嵌入式开发 keil

嵌入式开发作为信息技术领域的重要分支,其涉及的语言种类繁多,各具特色。这些语言的选择取决于目标平台的特性、性能需求、开发者的熟练程度以及项目的具体要求。本文将详细介绍几种常见的嵌入式开发语言,包括C语言、C++、汇编语言...

关键字: 嵌入式开发 C语言

嵌入式开发是一项综合了硬件设计、软件编程以及系统整合的技术活动,其目的是为了创造出能够在特定环境中高效、稳定运行的嵌入式系统。这一流程涵盖了多个紧密关联且不可或缺的阶段,从最初的客户需求分析到最终的产品测试和交付,每个环...

关键字: 嵌入式开发 硬件设计

嵌入式开发作为一个融合了计算机软硬件和系统工程的综合性领域,其成功与否往往取决于三个核心要素的有效整合与协调。这三个要素分别是:硬件平台的选择与设计、软件开发及其优化、以及系统级的设计与集成。深入理解并熟练掌握这三个方面...

关键字: 嵌入式开发 ARM

嵌入式开发作为信息技术的关键支柱,在全球数字化转型浪潮中扮演着无可替代的角色。从传统的嵌入式微控制器到如今先进的片上系统(SoC),再到与云计算、人工智能深度融合的智能终端,嵌入式系统的演进与发展始终紧跟时代脉搏。本文将...

关键字: 嵌入式开发 智能应用

嵌入式开发是一种专门针对特定硬件平台设计和实现软件系统的工程实践,它涵盖了从需求分析、系统设计、编程实现、调试测试直到产品部署及维护的全过程。本文将深入探讨嵌入式开发的主要阶段,分解其流程并阐述每个步骤的关键要点,以便于...

关键字: 嵌入式开发 嵌入式软件
关闭
关闭