《程序设计〖PPT教案〗单片机原理与应用》由会员分享,可在线阅读,更多相关《程序设计〖PPT教案〗单片机原理与应用(165页珍藏版)》请在金锄头文库上搜索。
1、 概述 简单程序设计 分支程序设计 循环程序设计 查表程序 子程序设计与堆栈技术 实用汇编子程序举例 第四章 程序设计 概 述 单片机程序设计语言主要有三类: 机器 语言 、 汇编语言和高级语言 。 机器语言 ( 是指直接用机器码编写程序 、 能够为计算机直接执行的机器级语言 。 机器码是一串由二进制代码 “ 0”和 “ 1”组成的二进制数据 ,其执行速度快 , 但是可读性极差 。 机器语言一般只在简单的开发装置中使用 , 程序的设计 、 输入 、 修改和调试都很麻烦 , 在实训 1和实训 3中直接固化或输入的程序都是机器语言程序 。 汇编语言 ( 是指用指令助记符代替机器码的编程语言 。 汇
2、编语言程序结构简单 ,执行速度快 , 程序易优化 , 编译后占用存储空间小 ,是单片机应用系统开发中最常用的程序设计语言 。 汇编语言的缺点是可读性比较差 , 只有熟悉单片机的指令系统 , 并具有一定的程序设计经验 , 才能研制出功能复杂的应用程序 , 实训 4中的 3个程序都是用汇编语言设计的 。 高级语言( 在汇编语言的基础上用自然语言的语句来编写程序,例如 51、 1等,程序可读性强,通用性好,适用于不熟悉单片机指令系统的的用户。 高级语言编写程序的缺点是实时性不高 , 结构不紧凑 , 编译后占用存储空间比较大 , 这一点在存储器有限的单片机应用系统中没有优势 。 目前 , 大多数用户仍
3、然使用汇编语言进行单片机应用系统的软件设计 , 本章将介绍 单片机汇编语言程序设计的基本步骤如下: (1) 题意分析 。 熟悉并了解汇编语言指令的基本格式和主要特点 , 明确被控对象对软件的要求 , 设计出算法等 。 (2) 画出程序流程图。编写较复杂的程序,画出程序流程图是十分必要的。程序流程图也称为程序框图,是根据控制流程设计的,它可以使程序清晰,结构合理,便于调试。 (3) 分配内存工作区及有关端口地址 。 分配内存工作区 , 要根据程序区 、 数据区 、 暂存区 、 堆栈区等预计所占空间大小 , 对片内外存储区进行合理分配并确定每个区域的首地址 , 便于编程使用 。 (4) 编制汇编源
4、程序 。 (5) 仿真 、 调试程序 。 (6) 固化程序 。 简单程序设计 简单程序也就是顺序程序 , 实训 4中的程序 1就是顺序程序结构 , 它是最简单 、 最基本的程序结构 , 其特点是按指令的排列顺序一条条地执行 , 直到全部指令执行完毕为止 。 不管多么复杂的程序 , 总是由若干顺序程序段所组成的 。 本节通过实例介绍简单程序的设计方法 。 例 4字节 ( 双字 ) 加法 。 将内部 30字节十六进制数和内部 0个单元中存放的 4字节十六进制数相加 , 结果存放到 40 例 (1) 题意分析 。 题目的要求如图所示 。 3 0 1 存放处 加数 2 存放处4 3 H C A 0 A
5、 B 2 3 4 8 0 5 6 7 2 B 7 9 C 000H ,30H A,40H 0H,A ;最低字节加法并送结果 ,31H ,41H 1H,A ;第二字节加法并送结果 (2) 汇编语言源程序 。 按照双字节加法的思路,实现 4字节加法的源程序如下: ,32H A,42H 2H,A ;第三字节加法并送结果 ,33H ,43H 3H,A ;第四字节加法并送结果 , 进位 位在 显然 , 上面程序中 , 每一步加法的步骤很相似 , 因此我们可以采用循环的方法来编程 , 使得源程序更加简洁 , 结构更加紧凑 。 例 数据拼拆程序 。 将内部 0 分别存放到 312 (1) 题意分析 。 题目
6、要求如图所示 。 例 3 54 5 十进制数 45 的 B C D 码3 4 32 A S C I I 码 5 的 A S C I I 码31 本题中 , 首先必须将两个数拆开 , 然后再拼装成两个 数字与 4位为 0011H,低 4位即为该数字的 8421码 。 (2) 汇编语言源程序 。 源程序如下: 0000H 30H A,#30H A,位与 30位 交换 32H,A ; A, ;将高位数据换到低位 A,#30H ;与 3031H,A 分支程序设计 分支程序实例 1 两分支程序设计 例 两个无符号数比较 ( 两分支 ) 。 内部 00位无符号数 , 请比较这两个数的大小 , 比较结果显示
7、在实训的实验板上: 若 (20H)(30H), 则 若 (20H)(30H), 则 若 (20H)(Y), 转移到 ,X ;判断 (X)的最高位 以确定其 正负 ; (X)(Y), 点亮 3) 程序说明 。 判断两个有符号数符号异同的方法 。 本例中使用逻辑异或指令 , 将 (X)与 (Y)进行异或操作 ,那么 , (X)的符号位 (X)7与 (Y)的符号位 (Y)7异或的结果如下: 若 (X)7与 (Y)7相同 , 则 (X)7(Y)7 0;若 (X)7与 (Y)7不相同 , 则 (X)7(Y)7 1。 本例中 , (X)与 (Y)的异或结果存放在累加器 因此判断 比较两个有符号数的其它方法
8、 。 除了本例中使用的比较两个有符号数的方法之外 , 我们还可以利用溢出标志 具体算法如下: 若 则 时 XY; 时 采用这种比较方式的汇编语言源程序自己编写 。 3. 散转程序 散转程序是指经过某个条件判断之后 , 程序有多个流向 ( 三个以上 ) 。 在后面的键盘接口程序设计中经常会用到散转功能 根据不同的键码跳转到相应的程序段 。 例 程序 2的基础之上 , 先设计两个开关 ,使 种不同状态 。 然后对应每种状态 , 使 8个 (1) 硬件设计 。 在实训 1的电路中 , 我们使用单片机的并行口 个 现在我们使用其 硬件原理图如图所示 。 例 8 0 3 1 5 7 k P 3 . 5
9、7 k P 3 . 4 如图 当开关 时 , ;当 时 , 5 V, 。 同样 , 当开关 时 , ;当 时 , 5 V, 。 假设要求 1口的 8个 显示方式 0 0 全亮 0 1 交叉亮 1 0 低 4位连接的灯亮 , 高 4位灭 1 1 低 4位连接的灯灭 , 高 4位亮 (2) 软件设计 。 程序设计思想。散转程序的特点是利用散转指令实现向各分支程序的转移, 散转程序流程图 开始读 的引脚状态 的值, A 2 P T 2屏蔽掉 A 中无关位,并将相应位移到最低位显示方式 1 显示方式 3 显示方式 4结束 结束 结束 汇编语言源程序 。 000H 3,#00110000B;使 , ;读 ,#00110000B ; “ 逻辑与 ” 操作 , 屏蔽掉无 关位 ;将相应位移位到低位 ;循环左移一位 , A*2A 移指令表的基地址送数 据指针 A+ ;散转指令 00H ;第一种显示方式 , 地 $ 55H;第二种显示方式 , 5 V, $ 1,#0 ;第三种显示方式 , 5 V $ 0第四种显示方式 , 5 V, $ 转移指令表 3) 程序说明 。 读 个 I/出数据方式 , 读端口数据方式和读端口引脚方式 。 输出数据方式举例: 00H