微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > MCS-51系列单片机结构化程序设计探讨

MCS-51系列单片机结构化程序设计探讨

时间:04-20 来源:电子技术应用 点击:

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系列单片机应用系统设计同样适用。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top