第4章80C51的程序设计 41程序编制的方法和技巧 4.2源程序的编辑和汇编 4.3基本程序结构 4.4常用程序举例
1 第4章 80C51的程序设计 4.1 程序编制的方法和技巧 4.2 源程序的编辑和汇编 4.3 基本程序结构 4.4 常用程序举例
4.1程序编制的方法和技巧 4.1.1程序编制的步骤 、预完成任务的分析 首先,要对单片机应用系统预完成的 任务进行深入的分析,明确系统的设计任 务、功能要求和技术指标。其次,要对系 统的硬件资源和工作环境进行分析。这是 单片机应用系统程序设计的基础和条件
2 4.1 程序编制的方法和技巧 4.1.1程序编制的步骤 一、预完成任务的分析 首先,要对单片机应用系统预完成的 任务进行深入的分析,明确系统的设计任 务、功能要求和技术指标。其次,要对系 统的硬件资源和工作环境进行分析。这是 单片机应用系统程序设计的基础和条件
二、进行算法的优化 算法是解决具体问题的方法。一个应用系统经 过分析、研究和明确规定后,对应实现的功能和技 术指标可以利用严密的数学方法或数学模型来描述, 从而把一个实际问题转化成由计算机进行处理的问 题。同一个问题的算法可以有多种,结果也可能不 尽相同,所以,应对各种算法进行分析比较,并进 行合理的优化。比如,用迭代法解微分方程,需要 考虑收敛速度的快慢(即在一定的时间里能否达到 精度要求)。而有的问题则受内存容量的限制而对 时间要求并不苛刻。对于后一种情况,速度不快但 节省内存的算法则应是首选
3 二、进行算法的优化 算法是解决具体问题的方法。一个应用系统经 过分析、研究和明确规定后,对应实现的功能和技 术指标可以利用严密的数学方法或数学模型来描述, 从而把一个实际问题转化成由计算机进行处理的问 题。同一个问题的算法可以有多种,结果也可能不 尽相同,所以,应对各种算法进行分析比较,并进 行合理的优化。比如,用迭代法解微分方程,需要 考虑收敛速度的快慢(即在一定的时间里能否达到 精度要求)。而有的问题则受内存容量的限制而对 时间要求并不苛刻。对于后一种情况,速度不快但 节省内存的算法则应是首选
程序总体设计及流程图绘制 经过任务分析、算法优化后,就可以进 行程序的总体构思,确定程序的结构和数 据形式,并考虑资源的分配和参数的计算 等。然后根据程序运行的过程,勾画出程 序执行的逻辑顺序,用图形符号将总体设 计思路及程序流向绘制在平面图上,从而 使程序的结构关系直观明了,便于检查和 修改
4 三、程序总体设计及流程图绘制 经过任务分析、算法优化后,就可以进 行程序的总体构思,确定程序的结构和数 据形式,并考虑资源的分配和参数的计算 等。然后根据程序运行的过程,勾画出程 序执行的逻辑顺序,用图形符号将总体设 计思路及程序流向绘制在平面图上,从而 使程序的结构关系直观明了,便于检查和 修改
清晰正确的流程图是编制正确无误的应用 程序的基础和条件。所以,绘制一个好的流 程图,是程序设计的一项重要内容。 流程图可以分为总流程图和局部流程图。 总流程图侧重反映程序的逻辑结构和各程序 模块之间的相互关系。局部流程图反映程序 模块的具体实施细节。对于简单的应用程序, 可以不画流程图。但是当程序较为复杂时, 绘制流程图是一个良好的编程习惯
5 ◼清晰正确的流程图是编制正确无误的应用 程序的基础和条件。所以,绘制一个好的流 程图,是程序设计的一项重要内容。 ◼流程图可以分为总流程图和局部流程图。 总流程图侧重反映程序的逻辑结构和各程序 模块之间的相互关系。局部流程图反映程序 模块的具体实施细节。对于简单的应用程序, 可以不画流程图。但是当程序较为复杂时, 绘制流程图是一个良好的编程习惯
常用的流程图符号有:开始和结束符号、工 作任务符号、判断分支符号、程序连接符号、 程序流向符号等 开始或结束符号 判断分支符号 程序流向符号 工作任务符号 程序连接符号 程序流向符号 ○
6 常用的流程图符号有:开始和结束符号、工 作任务符号、判断分支符号、程序连接符号、 程序流向符号等 开始或结束符号 工作任务符号 判断分支符号 程序连接符号 程序流向符号 程序流向符号
4.1.2编制程序的方法和技巧 采用模块化程序设计方法 应用系统的程序一般由包含多个模块的主程序和各种 子程序组成。各程序模块都要完成一个明确的任务, 实现某个具体的功能,如:发送、接收、延时、打印 和显示等。采用模块化的程序设计方法,就是将这些 不同的具体功能程序进行独立的设计和分别调试,最 后将这些模块程序装配成整体程序并进行联调。 模块化的程序设计方法具有明显的优点。把一个多功 能的复杂的程序划分为若干个简单的、功能单一的程 序模块,有利于程序的设计和调试,有利于程序的优 化和分工,提高了程序的阅读性和可靠性,使程序的 结构层次一目了然
7 4.1.2 编制程序的方法和技巧 一、采用模块化程序设计方法 ◼应用系统的程序一般由包含多个模块的主程序和各种 子程序组成。各程序模块都要完成一个明确的任务, 实现某个具体的功能,如:发送、接收、延时、打印 和显示等。采用模块化的程序设计方法,就是将这些 不同的具体功能程序进行独立的设计和分别调试,最 后将这些模块程序装配成整体程序并进行联调。 ◼模块化的程序设计方法具有明显的优点。把一个多功 能的复杂的程序划分为若干个简单的、功能单一的程 序模块,有利于程序的设计和调试,有利于程序的优 化和分工,提高了程序的阅读性和可靠性,使程序的 结构层次一目了然
二、尽量采用循环结构和子程序 采用循环结构和子程序可以使程序的长度减少 占用内存空间减少。 多重循环,注意各重循环的初值和循环结束条 件,避免出现“死循环”现象; 通用的子程序,除了用于存放子程序入口参数 的寄存器外,子程序中用到的其它寄存器的内 容应压入堆栈进行现场保护,并要特别注意堆 栈操作的压入和弹出的平衡; 中断处理子程序除了要保护程序中用到的寄存 器外,还应保护标志寄存器
8 二、尽量采用循环结构和子程序 采用循环结构和子程序可以使程序的长度减少、 占用内存空间减少。 ◼多重循环,注意各重循环的初值和循环结束条 件,避免出现 “死循环”现象; ◼通用的子程序,除了用于存放子程序入口参数 的寄存器外,子程序中用到的其它寄存器的内 容应压入堆栈进行现场保护,并要特别注意堆 栈操作的压入和弹出的平衡; ◼中断处理子程序除了要保护程序中用到的寄存 器外,还应保护标志寄存器
4.1.3汇编语言的语句格式 语句行由四个字段组成: [标号:]操作码[操作数][;注释] 括号内的部分可以根据实际情况取舍。每个 字段之间要用分隔符分隔,可以用作分隔符的 符号有空格、冒号、逗号、分号等。 如:L0OP:MOVA,#7FH;A←7FH
9 4.1.3 汇编语言的语句格式 语句行由四个字段组成 : [标号:]操作码 [操作数] [;注释] 括号内的部分可以根据实际情况取舍。每个 字段之间要用分隔符分隔,可以用作分隔符的 符号有空格、冒号、逗号、分号等。 如:LOOP:MOV A,# 7FH ;A←7FH
标号 标号是语句地址的标志符号,用于引导对该语句的 非顺序访问。有关标号的规定为: 标号由1~8个ASC字符组成。第一个字符必须是字 母,其余字符可以是字母、数字或其他特定字符; 不能使用该汇编语言已经定义了的符号作为标号。如 指令助记符、寄存器符号名称等; 标号后边必须跟冒号。 二、操作码 操作码用于规定语句执行的操作。它是汇编语句中 唯一不能空缺的部分。它由指令助记符表示。 10
10 一、标号 标号是语句地址的标志符号,用于引导对该语句的 非顺序访问。有关标号的规定为: ◼ 标号由1~8个ASCII字符组成。第一个字符必须是字 母,其余字符可以是字母、数字或其他特定字符; ◼ 不能使用该汇编语言已经定义了的符号作为标号。如 指令助记符、寄存器符号名称等; ◼ 标号后边必须跟冒号。 二、操作码 操作码用于规定语句执行的操作。它是汇编语句中 唯一不能空缺的部分。它由指令助记符表示