单片机——程序的基本结构教学教材
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
3、注意设置堆栈指针和现场保护 4、最后一条指令必须是RET指令 5、子程序可以嵌套,即子程序可 以调用子程序(最多8层) 6、在子程序调用时,还要注意参 数传递的问题
♨
✎
不管多么简单或复杂的程序, 总离不开若干顺序程序段所组成 的。如图1所示,A框和B框分别 代表不同的程序段, 是A、B顺 序执行。它是最简单、最基本的 程序结构,其特点是按指令的排 列顺序一条条地执行,直到全部 指令执行完毕为止。
a
A
B
b
图2-7-1 顺序程序结构
♨
✎
基本结构
几
顺序结构
种
分支结构
✎
END
♨
子程序
可以被调用的程序段称为子程序。在实际问题中,常常 会遇到在一个程序中有许多相同的运算或操作,例如多字节 的加、减、字符处理等。如果每遇到这些运算和操作,都从 头做起,则使程序非常繁琐且浪费内存。因此在实际应用中 ,通常把这些多次使用的程序段,按一定结构编好,存放在 内存中,当需要时,程序可以去调用这些独立的程序段。因 此,字程序就是一种能完成某一特定任务的程序段。
✎
♨
分支结构
顺序结构程序只能解决一些简单的算术、逻辑运 算、传送操作等。实际控制问题往往要求计算机能根 据给定的条件进行判断,再选择不同的处理路径,从 而表现出某种智能。
程序要求改变程序执行顺序,即程序的流向有两个 或两个以上时,这种程序结构称为分支程序结构,分 支程序的特点是程序中包含有转移指令。根据分支出 口的不同分为简单分支程序和多路分支程序。
基 本
查表结构
结Fra Baidu bibliotek
子程序结构
构
循环结构
✎
♨
顺序结构
顺序结构程序:是一种最简 单、最基本的程序,按照程 序编写的顺序逐条依次执行 ,直到程序结束。这是程序 的最基本的形式,任何程序 都离不开这种形式。
程序段A 程序段 B
顺序结构
✎
♨
【例1】 将片内RAM的20H单元中的压缩BCD码拆成两 个ASCII码存入21H、22H单元。高4位转换后存在21H单 元,低4位转换后存在22H单元。
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为结束码
..........
方法一 分析:两个 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. 循环结构
♨
✎
绪论
在汇编语言程序设计中,普遍采用结构化程 序设计方法。任何复杂的程序都可由顺序结构、 分支结构、循环结构、子程序结构等程序构成。 结构程序设计的特点是程序的结构清晰、易于读 写和验证、可靠性高。
♨
✎
分支结构
分支结构:程序中含有转移指令
分支 结构
无条件 分支
有条件 分支
单分支 结构
多分支 结构
条件
Y
程序段A
N
程序段 B
分支结构
✎
♨
分支程序的两类结构
开始
程序段1
Y
条件满足吗?
N
程序段2 程序段3
结束
(a)单分支结构
开始
程序段1 数字关键码
分支程序1
分支程序2
分支程序3
程序段2
结束
(b)多分支结构
♨
✎
解:单片机中负数一般用补码表 示,只要能够判断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
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
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个显示码。
♨
✎
子程序的设计
1、给每个子程序赋予名字 2、现场保护与恢复 3、参数的正确传递 4、子程序说明
♨
✎
在编写子程序时应注意以下问题
1、子程序应有入口地址(用标号) 2、主程序调用子程序
两个子程序调用指令:
(1)绝对调用指令:ACALL addr11 (2)长调用指令:LCALL addr16
♨
✎
在编写子程序时应注意以下问题
♨
✎
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口
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汇编指令系统提供了两条专用的查表指令:
♨
✎
不管多么简单或复杂的程序, 总离不开若干顺序程序段所组成 的。如图1所示,A框和B框分别 代表不同的程序段, 是A、B顺 序执行。它是最简单、最基本的 程序结构,其特点是按指令的排 列顺序一条条地执行,直到全部 指令执行完毕为止。
a
A
B
b
图2-7-1 顺序程序结构
♨
✎
基本结构
几
顺序结构
种
分支结构
✎
END
♨
子程序
可以被调用的程序段称为子程序。在实际问题中,常常 会遇到在一个程序中有许多相同的运算或操作,例如多字节 的加、减、字符处理等。如果每遇到这些运算和操作,都从 头做起,则使程序非常繁琐且浪费内存。因此在实际应用中 ,通常把这些多次使用的程序段,按一定结构编好,存放在 内存中,当需要时,程序可以去调用这些独立的程序段。因 此,字程序就是一种能完成某一特定任务的程序段。
✎
♨
分支结构
顺序结构程序只能解决一些简单的算术、逻辑运 算、传送操作等。实际控制问题往往要求计算机能根 据给定的条件进行判断,再选择不同的处理路径,从 而表现出某种智能。
程序要求改变程序执行顺序,即程序的流向有两个 或两个以上时,这种程序结构称为分支程序结构,分 支程序的特点是程序中包含有转移指令。根据分支出 口的不同分为简单分支程序和多路分支程序。
基 本
查表结构
结Fra Baidu bibliotek
子程序结构
构
循环结构
✎
♨
顺序结构
顺序结构程序:是一种最简 单、最基本的程序,按照程 序编写的顺序逐条依次执行 ,直到程序结束。这是程序 的最基本的形式,任何程序 都离不开这种形式。
程序段A 程序段 B
顺序结构
✎
♨
【例1】 将片内RAM的20H单元中的压缩BCD码拆成两 个ASCII码存入21H、22H单元。高4位转换后存在21H单 元,低4位转换后存在22H单元。
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为结束码
..........
方法一 分析:两个 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. 循环结构
♨
✎
绪论
在汇编语言程序设计中,普遍采用结构化程 序设计方法。任何复杂的程序都可由顺序结构、 分支结构、循环结构、子程序结构等程序构成。 结构程序设计的特点是程序的结构清晰、易于读 写和验证、可靠性高。
♨
✎
分支结构
分支结构:程序中含有转移指令
分支 结构
无条件 分支
有条件 分支
单分支 结构
多分支 结构
条件
Y
程序段A
N
程序段 B
分支结构
✎
♨
分支程序的两类结构
开始
程序段1
Y
条件满足吗?
N
程序段2 程序段3
结束
(a)单分支结构
开始
程序段1 数字关键码
分支程序1
分支程序2
分支程序3
程序段2
结束
(b)多分支结构
♨
✎
解:单片机中负数一般用补码表 示,只要能够判断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
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
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个显示码。
♨
✎
子程序的设计
1、给每个子程序赋予名字 2、现场保护与恢复 3、参数的正确传递 4、子程序说明
♨
✎
在编写子程序时应注意以下问题
1、子程序应有入口地址(用标号) 2、主程序调用子程序
两个子程序调用指令:
(1)绝对调用指令:ACALL addr11 (2)长调用指令:LCALL addr16
♨
✎
在编写子程序时应注意以下问题
♨
✎
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口
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汇编指令系统提供了两条专用的查表指令: