第三章 80C51单片机汇编语言程序设计(本科)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
返回
ORG START: CLR MOV MOVX MOV INC MOVX SUBB JNC XCH SJMP BIG1: MOVX BIGO: INC MOVX END
8000H C;进位清0 DPTR, #ST1; 设数据指针 A, @DPTR; A←((ST1)),取N1 R2, A; 暂存N1 DPTR; DPTR← ST2(指向N2单元) A, @DPTR; 取N2存于A中 A, R2;N1,N2比较(N2-N1,差在A中) BIG1;N2≥N1,转BIG1,N2<N1,顺序执行 A, R2;N1,N2互换,A ←N1 BIG0 A, @DPTR;A ←N2 DPTR; DPTR← ST3(指向N3单元) @DPTR, A;ST3 ←大数 返回
等、不相等等各种条件判断。
例:两个8位无符号二进制数比较大小。假设在外部RAM中有 ST1、ST2和ST3共3个连续单元(单元地址从小到大),其中ST1
、ST2单元中存放着两个8位无符号二进制数N1,N2,要求找出其
中的大数并存入ST3单元中。
解:(1)分析任务:比较两个数的大小
(2)算法:算术运算、控制转移 (3)程序结构:单分支 (4)数据类型:单字节、二进制、无符号数 (5)数据结构:单元地址升序排列
思考题
3) ORG MOV MOV MOVX ADD MOVX DEC DEC MOVX ADDC 1000H RO, R1, A, A, @R1, R0; R1; A, A, #52H;加数N1的低字节地址送地址指针R0 #55H;加数N2的低字节地址送地址指针R1 @R1; 取N2的低字节 @R0; N1、N2低字节相加 A; 保存N1、N2低字节和 修改加数N1的地址指针内容 修改加数N2的地址指针内容 @R1; 取N2的中间字节 @R0; N1、N2中间字节带低字节和进位相加
MOV
DEC
@R0,
R0;
A;
保存N1、N2中间字节和
修改加数N1的地址指针内容
DEC
MOV ADDC
R1;
A, A, @R0;
修改加数N2的地址指针内容
取N1的高字节 @R1; N1、N2高字节带中间字节和进位相加
MOV
MOV END 思考题:
@R0, A;
00H, C;
保存N1、N2高字节和
高字节和的进位送00H位保存
50H、51H和52H单元中,另一个加数在内部RAM的53H、54H和55H
单元中,要求把相加之和存放在50H、51H和52H单元中,进位存 放在位寻址区的00H位中。
解:(1)分析任务:求两数之和
(2)算法:加法运算(ADD或ADDC)
(3)程序结构:顺序或循环结构
(4)数据类型:三字节、二进制、无符号数 (5)数据结构:升序或降序排列 (6)RAM单元安排: (内部RAM字节单元、位地址空间) (7)采用寄存器间接寻址方式(R0、R1)
1000H RO, R1, A, A, A; @R0,
#52H;加数N1的低字节地址送地址指针R0 #55H;加数N2的低字节地址送地址指针R1 @R0; 取N1的低字节 @R1; N1、N2低字节相加 N1、N2低字节和十进制调整 A; 保存N1、N2低字节和
DEC DEC MOV ADDC DA MOV DEC DEC MOV ADDC DA MOV MOV END
R1,
A, A, @R0, R0; R1; A, A,
#55H;加数N2的低字节地址送地址指针R1
@R0; 取N1的低字节 @R1; N1、N2低字节相加 A; 保存N1、N2低字节和 修改加数N1的地址指针内容 修改加数N2的地址指针内容 @R0; 取N1的中间字节 @R1; N1、N2中间字节带低字节和进位相加
数据结构升降序排列被加数n1高字节8位中字节8位低字节8位加数n2高字节8位中字节8位低字节8位被加数n1加数n2和n320h单元低字节8位2ah单元低字节8位20h单元低字节8位21h单元中字节8位2bh单元中字节8位21h单元中字节8位22h单元高字节8位2ch单元高字节8位22h单元高字节8位23h单元进位位被加数n1高字节8位中字节8位低字节8位加数n2高字节8位中字节8位低字节8位进位位cy进位位cy进位位cyn3进位高字节8位中字节8位低字节8位程序流程框图程序清单思考题
保存N1、N2中间字节和
修改加数N1的地址指针内容
DPTR, #0053H;修改加数N2的地址指针内容 @DPTR; 取N2的高字节 @R0; N1、N2高字节带中间字节和进位相加 A; 保存N1、N2高字节和 高字节和的进位送00H位保存
思考:修改加数N2的数据地址指针DPTR的内容可否采用
DEC DPTR指令?
1)上述程序中,如果只采用ADDC指令,应如何修改程序? 2)如果N1、N2,N3均为十进制数,应如何修改程序? 3)如果加数N1在内部RAM 50H、51H和52H单元中,而加数N2与 和N3均在外部RAM0053H、0054H和0055H单元中,其它条件不变,
应如何修改程序?
4)如果N1、N2,N3均存放在外部RAM单元,应如何修改程序?
加数(N1) 加数(N2) 高字节(8位) 高字节(8位) 中字节(8位) 中字节(8位) 低字节(8位) 低字节(8位)
加数(8位) 55H单元 低字节(8位) 52H单元 低字节(8位) 51H单元 中字节(8位) 54H单元 中字节(8位) 51H单元 中字节(8位)
MOVX
DEC
@R1,
R0;
A;
保存N1、N2中间字节和
修改加数N1的地址指针内容
DEC R1; 修改加数N2的地址指针内容 MOVX A, @R1; 取N2的高字节 ADDC A, @R0; N1、N2高字节带中间字节和进位相加 MOVX @R1, A; 保存N1、N2高字节和 MOV 00H, C; 高字节和的进位送00H位保存 END 如果N2、N3的数据地址指针采用DPTR,则程序修改如下: ORG 1000H MOV RO, #52H;加数N1的低字节地址送地址指针R0 MOV DPTR, #0055H;加数N2的低字节地址送DPTR MOVX A, @DPTR; 取N2的低字节 ADD A, @R0; N1、N2低字节相加 MOVX @DPTR, A; 保存N1、N2低字节和 DEC R0; 修改加数N1的地址指针内容
第三章 MCS-51汇编语言程序设计
1、 单片机程序程序设计语言概述
汇编语言程序设计必须注意如下特点: (1)设计人员必须详细了解单片机的硬件结构,以便在程序设
计中熟练使用;
(2)必须熟悉汇编语言指令的功能和用法; (3)在程序设计前,必须分析设计任务,确定所用算法,确定
程序结构,确定数据的类型、数据的结构,必须对数据的存放、
(6)RAM单元安排:外部RAM单元
(7)采用寄存器间接寻址方式(R0、R1或DPTR) (8)程序设计流程框图;
(9)程序清单;
思考题(补充作业题): 上例中,如果采用CJNE 程序? A, direct,rel指令,应如何修改
开始 设置数据指针 取数据N1并暂存 取数据N2 Y N2保存于A中 N2≥N1 N N1保存于A中 修改数据指针 保存大数 结束
MOV
MOVX ADDC
DPTR, #0054H;修改加数N2的地址指针内容
A, A, @DPTR; 取N2的中间字节 @R0; N1、N2中间字节带低字节和进位相加
MOVX
DEC MOV MOVX ADDC MOVX MOV END
@DPTR,
R0; A, A, @DPTR, 00H, C;
A;
内部RAM 42H单元
内部RAM 41H单元
(2)算法:逻辑运算
(3)程序结构:顺序 (4)数据类型:单字节、二进制、无符号数 (5)数据结构:升序或降序排列 (6)程序设计流程框图;
开始 取40H单元内容 保留40H单元低半字节 取41H单元内容 保留41H单元低半字节 合字并保存 结束
(7)程序清单; ORG 2000H START: MOV R1, #40H;初始化数据指针R1的内容 MOV A, @R1; 取40H单元内容送A ANL A, #0FH;保留40H单元内容低4位 INC R1; 修改数据指针R1的内容 XCH A, @R1; (A)与@R1内容互换 ANL A, #0FH;保留41H单元内容低四位 SWAP A; 41H单元内容高低半字节互换 ORL A, @R1; 合字生成新字节 INC R1; 修改数据指针R1的内容 MOV @R1, A; 新字节送42H单元保存 END 作业题: 上例中其它条件不变,要求如下:42H单元新字节的低半字节 取自40H单元的低半字节,而高半字节取自41H单元的高半字节。
寄存器和工作单元的使用以及所用硬件资源等作出具体安排; (4)根据分析,画出程序设计流程图; (5)根据程序设计流程图编写程序。
2、汇编语言程序的基本结构形式
单片机汇编语言程序设计的基本结构形式一般分为以下4种
形式,即顺序结构、分支结构、循环结构和子程序结构。
(一) 顺序程序结构 顺序程序是最简单的程序结构,在顺序程序中,既无分支, 循环,也不调用子程序,程序执行时一条一条地按顺序执行指令 例:假定三字节无符号数相加,其中一个加数在内部RAM的
50H单元 高字节(8位) 52H单元 高字节(8位) 50H单元 高字节(8位)
00H位 进位位
(8)程序设计流程框图;
常用流程框图符号 开始结束
开始 加数N1和加数N2 的低字节相加 加数N1和加数N2 的中字节相加 加数N1和加数N2 的高字节相加 处理进位位 取N1中字节 结束 取N2中字节 处理进位位 N1和N2 中字节相加 结束 保存N1和N2 高字节和
例:设内部RAM 40H,41H单元中分别存放8位二进制数,现分别
取这两个单元中的半个字节,合并成一个新字节存放在42H单元 中。要求如下:42H单元新字节的低半字节取自40H单元的低半字 节,而高半字节取自41H单元的低半字节。 解:(1)分析任务:拆字、合字
N1
N2
N4
N2
N3
N4
内部RAM 40H单元
DEC MOV ADDC MOV MOV END 思考题: 2) ORG MOV MOV MOV ADD DA MOV
R1; A, A, @R0, 00H,
修改加数N2的地址指针内容 @R0; 取N1的高字节 @R1; N1、N2高字节带中间字节和进位相加 A; 保存N1、N2高字节和 C; 高字节和的进位送00H位保存
进程
判断
开始 取N1低字节 取N2低字节
判断
保存N1和N2 中字节和 取N1高字节
N1和N2 低字节相加 保存N1和N2 低字节和
取N2高字节 N1和N2 高字节相加
(9)程序清单;
ORG MOV 1000H RO, #52H;加数N1的低字节地址送地址指针R0
MOV
MOV ADD MOV DEC DEC MOV ADDC
思考题: 1) ORG MOV MOV MOV CLR ADDC MOV DEC DEC MOV ADDC MOV DEC
1000H RO, #52H;加数N1的低字节地址送地址指针R0 R1, #55H;加数N2的低字节地址送地址指针R1 A, @R0; 取N1的低字节 C; 清原来进位位CY的内容 A, @R1; N1、N2低字节相加 @R0, A; 保存N1、N2低字节和 R0; 修改加数N1的地址指针内容 R1; 修改加数N2的地址指针内容 A, @R0; 取N1的中间字节 A, @R1; N1、N2中间字节带低字节和进位相加 @R0, A; 保存N1、N2中间字节和 R0; 修改加数N1的地址指针内容
(2)多分支程序
假设多分支程序中,分支序号的最大值为n,则多分支转移 结构如图所示: MCS-51指令系统没有多分支转移指令,无法使用单条指令完 成多分支转移。要实现多分支转移,可采用以下几种方法:
(二) 分支程序结构 (1)单分支程序
单分支程序是通过条件转移指令实现的,即根据条件对程序
的执行进行判断,满足条件则进行程序转移,不满足条件程序就 顺序执行。 在MCS-51指令系统中,可利用JZ,JNZ,CJNE,DJNZ,JC, JNC,JB,JNB,JBC等指令,完成为0、为1、为正、为负以及相
R0; R1; A, A, A; @R0, R0; R1; A, A, A; @R0, 00H,
修改加数N1的地址指针内容 修改加数N2的地址指针内容 @R0; 取N1的中间字节 @R1; N1、N2中间字节带低字节和进位相加 N1、N2中间字节和十进制调整 A; 保存N1、N2中间字节和 修改加数N1的地址指针内容 修改加数N2的地址指针内容 @R0; 取N1的高字节 @R1; N1、N2高字节带中间字节和进位相加 N1、N2高字节和十进制调整 A; 保存N1、N2高字节和 C; 高字节和的进位送00H位保存
相关文档
最新文档