当前位置:首页 > 嵌入式 > 嵌入式硬件
[导读]探讨了MCS-51系列单片机结构化程序设计相关问题,研究了MCS-51系列单片机结构化程序的三种基本结构,并给出了程序实现方法范例,介绍了MCS-51系列单片机结构化程序设计步骤及各部分具体设计要求。

1 MCS-51系列单片机结构化程序设计概述

结构化程序指程序组成结构化、功能模块化、运行流程化。结构化程序要求将处理特定任务的代码和数据与程序其余部分隔离,在MCS-51系列单片机结构化程序中,实现隔离的方法是将处理特定任务的指令和数据设计成子程序或中断服务子程序。这些子程序或中断服务子程序称作功能模块,其具有确定功能,处理特定任务,解决专门问题。

在MCS-51系列单片机结构化程序设计时,按照总体规划和总体设计,由若干软件设计人员分别编程设计各功能模块,再依据软件结构和程序流程,由若干功能模块组成结构化程序,实现应用程序整体功能,解决复杂的实际问题。

MCS-51系列单片机结构化程序具有结构清晰、逻辑性强、易于维护、便于共享、运行稳定、可靠性高等特点。按照结构化程序设计要求编程,有助于规范软件设计人员的编程工作,有助于提高软件设计人员的编程效率,有助于提升软件设计人员的编程水平。

2 三种基本结构及程序实现方法

MCS-51系列单片机结构化程序由若干功能模块构成,功能模块由三种基本结构组成,即顺序结构、选择结构、循环结构。由这三种基本结构组成的功能模块,能实现各种程序算法,解决复杂实际问题。

2.1 顺序结构

在顺序结构程序中,按先后顺序,CPU逐条执行指令或逐段执行程序段。顺序结构分为逐条顺序结构和逐段顺序结构两种。逐条顺序结构如图1所示,逐段顺序结构如图2所示。


2.2 选择结构

在选择结构程序中,CPU执行条件判断指令(或间接转移指令),依据条件(或转移目的地址)执行对应分支程序段。选择结构分为二分支选择结构和多分支选择结构。

2.2.1 二分支选择结构

在二分支选择结构程序中,CPU执行条件判断指令,判断转移条件。当条件满足时,CPU执行程序段1;当条件不满足时,CPU执行程序段2,实现了二分支选择功能。条件转移类指令、比较不相等转移类指令均可作为条件判断指令。二分支选择结构如图3所示。程序实现方法参见范例1。

范例1:
CJNE A,# DATA,PGM2
PGM1:{程序段1}
LJMP EXIT
PGM2:{程序段2}
EXIT:┇

2.2.2 多分支选择结构

在多分支选择结构程序中,CPU执行间接转移指令,计算多分支转移目标地址,依据多分支转移目标地址,CPU执行对应分支程序段,实现了多分支选择功能。在多分支选择结构程序实现方法范例2中,A中保存有多分支选择条件值n,多分支选择结构如图4所示。程序实现方法参见范例2。

范例2:
PGM:MOV R1,A
RL A
ADD A,R1
MOV DPTR,# PGMTB
JMP @A+DPTR
PGMTB: LJMP PGM0
LJMP PGM1

LJMP PGMn

PGM0:{程序段0}
LJMP EXIT
PGM1:{程序段1}
LJMP EXIT

PGMn:{程序段n}
LJMP EXIT
EXIT:┇

2.3 循环结构

在循环结构程序中,CPU执行条件转移指令,依据条件决定是否继续执行循环体。循环结构分为当型循环结构和直到型循环结构两种,下面分别介绍。

2.3.1 当型循环结构

在当型循环结构程序中,CPU首先执行条件转移指令,判断循环条件。当条件满足时,CPU继续执行循环体程序;当条件不满足时,CPU退出循环结构程序,接着执行后续程序。当型循环结构如图5所示,程序实现方法参见范例3、范例4。

范例3:
LOP1: JB BIT,LOP2
LJMP EXIT
LOP2: {循环体}
LJMP LOP1
EXIT:┇
范例4:
LOP1: JNB BIT,EXIT
{循环体}
LJMP LOP1
EXIT:┇

2.3.2 直到型循环结构

在直到型循环结构程序中,CPU首先执行循环体程序,再执行条件转移指令,判断循环条件。当条件满足时,CPU继续执行循环体程序;当条件不满足时,CPU退出循环结构程序,接着执行后续程序。直到型循环结构如图6所示,程序实现方法参见范例5、范例6。

范例5:
MOV R2,#COUNT
LOP1:{循环体}
DJNZ R2,LOP1

范例6:
LOP1:{循环体}
JB BIT,LOP1

说明:条件转移类指令、比较不相等转移类指令、减1不为0转移指令均可作为条件判断指令,由CPU决定是否继续执行循环体,从而实现了循环执行程序段功能。

3 MCS-51系列单片机结构化程序设计步骤

MCS-51系列单片机结构化程序设计步骤如图7所示,现对各部分具体设计要求分别叙述。


(1)需求分析

通过现场调研及与用户交流,全面、深入、准确地分析MCS-51系列单片机结构化程序设计所要解决的实际问题,搞清实际问题所涉及的应用环境、应用对象、应用过程、应用要求、应用联系,从整体上得出结构化程序设计所要达到的目标及系统所要实现的功能、完成的具体任务、产品的形式,最后形成需求分析报告。

(2)总体规划

在需求分析的基础之上,制订出MCS-51系列单片机结构化程序设计的总体规划。总体规划中应确定MCS-51系列单片机结构化程序设计的设计原则、设计目标、设计任务、设计方式、设计进度和设计协作。

(3)总体设计

基于需求分析,按照总体规划进行总体设计,确定出MCS-51系列单片机结构化程序设计的具体技术方案。总体设计包括系统性能设计、功能设计、工作原理设计、软件结构设计、程序流程设计和通信协议设计。

(4)模型建立

总体设计确定了软件结构的所有功能模块,某些功能模块涉及处理复杂实际问题,应根据相关理论和专业知识,对复杂实际问题建立数学模型,为后续算法设计提供依据。

(5)数据结构

依据功能模块所要完成的指定功能、所要执行的具体任务、所要处理的具体问题,针对为特定功能模块所建立的数学模型,应确定出功能模块的输入数据、暂存数据、输出数据、数据关系。对于MCS-51系列单片机结构化程序设计,应统筹规划内部RAM、确定数据类型、定义程序变量、分配数据存储单元,为后续算法设计打好基础。

(6)算法设计

结构化程序设计包括结构化算法设计。在建立了特定功能模块的数学模型、规划了特定功能模块的数据结构之后,应对数学模型进行结构化算法设计,结构化算法设计的原则如下:
①自顶向下、逐步求精。基于需求分析制订出总体规划,依据总体规划完成总体设计,按照总体设计自顶向下对总任务逐层分解细化,直到每个子任务仅处理一个特定问题。
②模块化设计。由自顶向下、逐步求精得出的子任务处理程序称为功能模块,处理复杂实际问题的应用程序由多层若干功能模块组成。
③功能模块特性。功能模块仅处理一个特定子任务;功能模块由顺序、选择和循环三种基本结构组成;功能模块可独立编程、独立编译、独立调试;功能模块可被上层功能模块调用。

(7)程序编辑

按照数据结构规划,对软件结构中各层功能模块应分别进行编程。对于建有数学模型、设有算法的功能模块,应依据算法设计进行编程。

(8)程序编译

利用集成开发调试工具软件,对各层功能模块源程序分别编译,检查程序语法。若发现语法错误,应修改源程序重新编译,直到所有功能模块源程序编译通过为止。

基于总体设计,参照软件结构图及程序流程图,将各层功能模块集成到一起,形成一个完整应用程序,并进行统一编译。若发现语法错误,应修改应用程序重新编译,直到应用程序编译通过为止。

(9)程序调试

利用集成开发调试工具软件,首先对各层功能模块分别进行调试,检查各功能模块的功能是否正确。若发现功能逻辑错误,应修改程序错误后重新调试,直到所有功能模块调试通过为止。然后对应用程序进行统调,检查应用程序的总体功能是否正确。若发现功能逻辑错误,应跟踪查找错误原因,确定引起错误的位置,修改程序错误后重新调试,直到应用程序调试通过为止。

(10)文档整理

应用程序调试通过后,应对应用程序进行测试,测试通过后,应整理出应用程序的整套技术文档。技术文档包括需求分析报告、总体规划报告、总体设计报告、源程序文件和使用说明。

本文探讨了MCS-51系列单片机结构化程序设计相关问题,对于其他系列单片机,软件程序设计人员可参照本文进行对应结构化程序设计。对于本文所述功能模块,软件设计人员应结合实际、准确理解、整体考虑、总体设计、按功能分层次设计好各层功能模块。本程序的设计步骤及硬件设计部分,对MCS-51系列单片机应用系统设计同样适用。

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

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 隧道灯 驱动电源
关闭