当前位置:文档之家› 单片机——程序的基本结构教学教材

单片机——程序的基本结构教学教材

MOVC A,@A+PC 表格只能放在该指令的256个地 址单元内,地址需要调整。 MOVC A,@A+DPTR 基址寄存器DPTR能提供16位 基址,因此查表范围可达64KB空间,且表格的大小和 位置也可在64KB ROM中任意安排。


【例3】 根据项目一流水灯电路电路,采用查表方法实 现相同功能。 解: 用查表法实现流水灯,要设计一个LED点亮码表 格,根据8个LED点亮次序,制作数码表格,为了循环 点亮LED,在点亮第8个LED后返回点亮第1个LED, 表格可以设置一个结束标志码FFH。当取显示码为结 束标志FFH时,返回取第1个显示码。
基 本
查表结构

子程序结构

循环结构


顺序结构
顺序结构程序:是一种最简 单、最基本的程序,按照程 序编写的顺序逐条依次执行 ,直到程序结束。这是程序 的最基本的形式,任何程序 都离不开这种形式。
程序段A 程序段 B
顺序结构


【例1】 将片内RAM的20H单元中的压缩BCD码拆成两 个ASCII码存入21H、22H单元。高4位转换后存在21H单 元,低4位转换后存在22H单元。


不管多么简单或复杂的程序, 总离不开若干顺序程序段所组成 的。如图1所示,A框和B框分别 代表不同的程序段, 是A、B顺 序执行。它是最简单、最基本的 程序结构,其特点是按指令的排 列顺序一条条地执行,直到全部 指令执行完毕为止。
a
A
B
b
图2-7-1 顺序程序结构


基本结构

顺序结构

分支结构


ORG 0000H
LJMP STRAT
ORG 0100H
STRAT:MOV R1,#0
MOV DPTR,#TAB GO:MOV A, R1
; R1用于计数,R1清零 ; 设置表地址指针
LOOP: MOVC A,@A+DPTR ;查表取显示码
CJNE A,#0FFH,OK
;不是结束码显示码送P0口
SJMP STRAT
;是结束码,重新开始
OK:MOV P0,A
LCALL DEL
;延时1s
INC R1
;循环左移一次
SJMP GO
(此处略延时程序DEL)
TAB:DB 0FEH,0FDH,0FBH,0F7H,0EFH
DB 0DFH,0BFH,7FH,0FFH
;LED点亮码,0FFH为结束码
..........

END

子程序
可以被调用的程序段称为子程序。在实际问题中,常常 会遇到在一个程序中有许多相同的运算或操作,例如多字节 的加、减、字符处理等。如果每遇到这些运算和操作,都从 头做起,则使程序非常繁琐且浪费内存。因此在实际应用中 ,通常把这些多次使用的程序段,按一定结构编好,存放在 内存中,当需要时,程序可以去调用这些独立的程序段。因 此,字程序就是一种能完成某一特定任务的程序段。
MOV A, 20H ANL A, #0FH ADD A, #30H MOV 21H, A ANL 20H, #0F0H MOV A, 20H SWAP A ADD A, #30H MOV 22H,A
;屏蔽高4位 ;得到低4位ASCII码 ;个位ASCII码送21H ;屏蔽低4位 ;送A ;高位交换到低位 ;得到高4位ASCII码 ; 十位ASCII码送22H


解:单片机中负数一般用补码表 示,只要能够判断x=0、 x<0和 x>0便能够方便实现函数。采用 JZ指令进行判断,程序流程图如 图2-1所示。
图2-7-2 程序流程图


START: MOV A,30H JZ OUT ANL A #80H JZ OUT1 MOV 31H, 30H SJMP OK


分支结构
分支结构:程序中含有转移指令
分支 结构
无条件 分支
有条件 分支
单分支 结构
多分支 结构
条件
Y
程序段A
N
程序段 B
分支结构


分支程序的两类结构
开始
程序段1
Y
条件满足吗?
N
程序段2 程序段3
结束
(a)单分支结构
开始
程序段1 数字关键码
分支程序1
分支程序2
分支程序3
程序段2
结束
(b)多分支结构


子程序的设计
1、给每个子程序赋予名字 2、现场保护与恢复 3、参数的正确传递 4、子程序说明


在编写子程序时应注意以下问题
1、子程序应有入口地址(用标号) 2、主程序调用子程序
两个子程序调用指令:
(1)绝对调用指令:ACALL addr11 (2)长调用指令:LCALL addr16


在编写子程序时应注意以下问题
OUT: MOV 31H, #3 OUT1: MOV A, #5
ADD A , 30H MOV 31H, A OK: SJMP $
;x=0, 转移 ;x≠0,判断正负号 ;x小于0,y=x
;x=0Байду номын сангаас则y=3 ;x>0,y=5+x


查表结构
查表是把事先安排的数据按照一定的顺序编制成表 格存放在 ROM 中,然后根据输入的数据,从表格中查 出所需的结果。查表可以将复杂的问题变得简单。 MCS-51汇编指令系统提供了两条专用的查表指令:
方法一 分析:两个 BCD 码拼装在一个单元内叫压缩 BCD码。设20H 内为压缩 BCD 码59, 22H通过变换 BCD 码 “5” 为ASCII码 “35”;BCD 码 “9” 变换为ASCII码 “39”。

图1-2 压缩BCD码转换成两个ASCII字符图

程序入口:20H 程序出口:21H、22H 根据分析图设计程序:

2. 7 程序的基本结构
一、绪论
二、基本结构
1. 顺序结构 2. 分支结构 3. 查表结构 4. 子程序结构 5. 循环结构


绪论
在汇编语言程序设计中,普遍采用结构化程 序设计方法。任何复杂的程序都可由顺序结构、 分支结构、循环结构、子程序结构等程序构成。 结构程序设计的特点是程序的结构清晰、易于读 写和验证、可靠性高。
3、注意设置堆栈指针和现场保护 4、最后一条指令必须是RET指令 5、子程序可以嵌套,即子程序可 以调用子程序(最多8层) 6、在子程序调用时,还要注意参 数传递的问题


分支结构
顺序结构程序只能解决一些简单的算术、逻辑运 算、传送操作等。实际控制问题往往要求计算机能根 据给定的条件进行判断,再选择不同的处理路径,从 而表现出某种智能。
程序要求改变程序执行顺序,即程序的流向有两个 或两个以上时,这种程序结构称为分支程序结构,分 支程序的特点是程序中包含有转移指令。根据分支出 口的不同分为简单分支程序和多路分支程序。
相关主题