8051单片机第三章汇编语言程序设计

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
784F 795F 7F20 E6 04 F7 18 19 DFF9 80FE
LOOP:
LJMP ORG MOV MOV MOV MOV INC MOV DEC DEC DJNZ SJMP END
0100H 0100H R0,#4FH R1,#5FH R7,#20H A,R0 A R1,A R0 R1 R7,LOOP $
MOV R4,A
010D E3
MOVX A,R1
010E 3C
ADDC A,R4
010F F3
MOVX R1,A
wk.baidu.com
0110 09
INC R1
0111 A3
INC DPTR
0112 DFF7
DJNZ R7,LOOP
0114 E4
CLR A
0115 3400
ADDC A,#00H
0117 F3
MOVX R1,A
MINUS:JB SJMP
BIG:MOV MOV
SMA:DJNZ MOV MOV MOVX SJMP END
OV,BIG SMA A,R2 R1,A R7,LOOP DPTR,#2040H A,R1 DPTR,A $
带符号数的比较
比较条件 X为正数,Y为正数 X>Y
X<Y X为负数,Y为负数 X>Y
0100
ORG 0100H
0100 90204l
MOV DPTR,#2041H
0103 EO
MOVX A,DPTR
0104 FF
MOV R7,A
0105 7900
MOV R1,#80H ;开始R1存最小值
-128
0107 A3 LOOP: INC DPTR
0108 E0 0109 FA 010A C3 010B 99 010C 20E705
0109 B53002 010C 8004 010E 4002
CJNE SJMP HERE:JC
A,30H,HERE TOSMA TOSMA
0110 F530 0112 DFF3 0114 902040
MOV TOSMA:DJNZ
MOV
30H,A ;大于30H取代原有值 R7,LOOP ;小于30H,继续比较 DPTR,#2040H
循环结构的程序举例
例3-3 有一组数据,存放在30H为首地址的内存单元,数据长度为32
个。试将每一个数分别取出加1,再存人以40H为首地址的内存单元。
ORG 0000 0100 0100 0102 0104 0106 0107 0108 0109 010A 010B 010D
0000H 020190
DPTR,A DPTR,#2000H A,DPTR DPTR,#2019H DPTR,A $
分支结构的程序举例
例3-2 有甲乙两数存于41H和42H存储单元,运算符号的 ASCII码存于40H单元,编写一根据40H的符号,对甲乙两数 进行相应运算的程序;井将运算结果存于43H单元。
ORG
LJMP ORG MOV CJNE PLUS: MOV ADD MOV SJMP
;设定累加次数 ;设定数据首地址 ;取数 ;累加到41H ;是否有进位 ;有进位42H加1 ;将和存入41H
操作码:助记符或 伪指令的符号。
返回本章首页
INC DJNZ LJMP
END
R1
R2,LOOP 操作数:操作所需
要的数据或数据的
$
存储位置来源
注释:对语句 的说明,也可 不加注释
第二节 伪指令
主程序:入口条件为待转换的十六进制数存R1
0100
ORG 0100H
0100 A930
MOV R1,30H
0102 122000
LCALL SUB
0105 8A40
MOV 40H,R2
0107 8B41
MOV 41H,R3
0109 80FE
SJMP $
END
子程序:出口条件为转换所得BCD码存R2、R3
循环结构框图
图中每执行一次循环 体后,都要检查结束条 件是否满足,若条件满 足停止循环,否则返回 继续执行循环体。
右边两图区别是先检
查循环是否结束后修改 初值,还是先修改初值 后检查循环是否结束。
顺序结构的程序举例
例3-1 将地址为2000H 、2019H、2019H的片外数据存储单元的内容, 分别传送到2019H、2019H、2019H存储单元中去。
多字节加法的程序
0100
ORG 0100H
0100 900801
MOV DPTR,#0801H
0103 75A009
MOV P2,#09H
0106 7901
MOV R1,#01H
0108 7F0A
MOV R7,#0AH
010A C3
CLR C
010B E0 LOOP: MOVX A,DPTR
010C FC
返回本章首页
第三节 汇编语言程序的编写步骤 及基本结构
一、顺序结构:
顺序结构是指程 序按指令顺序逐条 执行的一种结构。 也是程序结构中最 简单的一种结构。
二、分支结构:
指程序中具有转移指令,可根据转移 条件决定是转移还是继续执行下一条指 令。
几种分支结构程序的框图
三、循环结构
循环结构由四个环节组成。
无符号数求最大值或最小值的程序
0100 0100 902041
ORG 0100H MOV DPTR,#2041H
0103 E0 0104 FF 0105 753000
MOVX MOV MOV
A,DPTR R7,A 30H,#00H
0107 A3 0108 E0
LOOP:INC DPTR MOVX A,DPIR
ORG MOV MOVX MOV INC MOVX MOV LOOP: INC MOVX CJNE MOV SJMP LOOP1: DJNZ MOV SJMP END
0100H DPTR,#2041H A,DPTR B,A DPTR A,DPTR R7,A DPTR A,DPTR A,B,LOOPl 30H,#00H $ R7,LOOP 30H,#0FFH $
0000H
0100H 0100 A,40H A,#2BH,MINUS A,41H A,42H 43H,A CLOSE
MINUS:CJNE CLR MOV SUBB MOV SJMP
ERR: MOV CLOSE:SJMP
A,#2DH,ERR C A,41H A,42H 43H,A CLOSE 43H,#0FFH $
X-Y为负
OV=0
四、搜索
例3-9 有一批数据存 放在以2043H为首地址 的连续单元中,数据长 度置于2042H存储单元, 编制检索程序,使之能 从该批数据中寻找是否 有等于字母T的ASCII码 的数据。字母T的ASCII 码存放在2041H单元。
检索程序举例
O100 902041 0103 E0 0104 F5F0 0106 A3 0167 E0 0108 FF 0109 A3 010A E0 010B 35F005 010E 753000 0111 80FE 0113 DFF4 0115 7530FF 0118 80FE
X<Y X为正数,Y为负数 X>Y
X>Y X<Y X为负数,Y为正数 X>Y X<Y
X<Y
两数相减后标志状态
X-Y为正
OV=0
X-Y为负
OV=0
X-Y为正
OV=0
X-Y为负
OV=0
X-Y为正
OV=0
X-Y为负
OV=1
X为正数且Y为负数,X不可能小于Y
X为负数且Y为正数,X不可能大于Y
X-Y为正
OV=1
;除100余数作为下一次的被除数 ;余数再除以10
200B C4 200C 45F0 200E FB
SWAP A ORL A,B MOV R3,A
;十位个位合并 ;十位个位合并存R3
200F 22
RET
三、求最大值或最 小值
1.无符号数求最大值 与最小值
例3-7 在以2042H为首 地址的存储单元中,连续 存放一组单字节无符号数, 数据个数存于2041H单元, 从中找出最大数并存于 2040H。
8051单片机第三章汇编语言程序设计
第一章 回归分析的性质
本章要点
• 本章介绍 汇编语言程序的书写格式、 编写步骤以及程序的基本结构。通过一 些具体范例,了解与掌握编程方法并从 中掌握程序设计的基本技巧。
第一节 汇编语言程序的格式
汇编语言编写的程序由语句组成,每一语句占一行填写一
条指令。每行分4段,分别为标号、操作码、操作数和注释。
伪指令不执行任何操作,汇编时也不生成目标程序。它仅 仅提供对汇编的要求。汇编成机器语言后,伪指令就不存在 了。以下为常用的伪指令:
1.ORG(Origin)::指明汇编起始点地址。 2.END:指明源程序至此结束。 3.EQU(Epual):赋值伪指令,可对地址标号进行赋值。 4.DB(Define Byte):定义从指定标号地址开始所存放的字节 数据,多字节时各字节间用逗号隔开。 5.DW(Define Word):定义从指定的标号地址开始,所存放 的字数据。跟DB一样,输入几个字时各字间要用逗号隔开。 6.DS(Define Storage) :定义存储区,表示从标号所指的存 储单元开始,保留的内存单元数量,以供程序使用。
ORG 0000H
LJMP 1000H
ORG 1000H
MOV DPTR,#2019H
MOVX A,DPTR
MOV MOVX MOV MOVX MOV
DPTR,#2019H DPTR,A DPTR,#2019H A,DPTR DPTR,#2019H
MOVX MOV MOVX MOV MOVX SJMP
循环结构程序举例
例3-4 编制一延时子程序,使执行这一段程序延时2s。
0100 7D64
MOV R5,#64H
0102 7E64 LOOP1: MOV R6,#64H
0104,7F62 LOOP2: MOV R7,#62H
0106 DFFE LOOP3: DJNZ R7,LOOP3
0108 DEFA
2000
ORG 2000H
20012000 E9 SUB ;MOV A,R1 ;取十六进制数
2019 75F064 2019 84 2019 FA
MOV DIV MOV
B,#64H AB R2,A
;除以100 ;商为百位数存R2
2019 740A 2019 C5F0 200A 84
MOV A,#0AH XCH A,B DIV AB
0118 80FE
SJMP $
;甲数据地址 ;乙数据地址高字节 ;乙数据地址低字节 ;数据字节数
;取甲数 ;暂存R4 ;取乙数 ;两数相加并加上一次进位位 ;和存于原乙数的地址 ;修改地址指针
;继续相加
;存最高字节进位位 ;结束
二、数制变换
例3-6 将30H中的十六进制数转换为BCD码,并存于 40H、41H。
MOVX MOV CLR SUBB JB
A,DPIR R2,A C A,R1 ACC.7,MINUS
010F 20D209 PLUS:JB OV,SMA
0112 8005
SJMP BIG
带符号数求最大值与最小值的程序(续)
0114 20D202 0117 8002 0119 EA 011A F9 011B DFEA 011D 902040 0120 E9 0121 F0 0122 80FE
DJNZ R6,LOOP2
010A DDF6 010C 22
DJNZ RET
R5,LOOPl
以上程序执行的时间近似为2秒,如要准确计算还需 考虑执行对R5、R6、R7的赋值指令所需的时间、RET返 回指令的时间等等。
返回本章首页
第四节 程序设计举例
一、多字节加法程 序
例3-5 两个10字节数,分别 从存储单元0801H、和 0901H开始存放,先存低 字节后存高字节,求其 和并存于乙数原来所在 的单元。
ORG
ADDR: MOV
MOV
标号:代表该行指 令所在的地址,结 尾应加一冒号
MOV MOV
MOV
LOOP:MOV
ADD
JNC
INC
NEXT: MOV
2000H A,00H 41H,A 42H,A R2,0AH R1,30H A,R1 A,41H NEXT 42H 41H,A
;累加器清零 ;41H、42H清零
0117 E530 0119 F0 011A 80FE
MOV MOVX SJMP END
A,30H DPTR,A $
2.带符号数求 最大值或最小值
例3-8 —组单字 节带符号数据存放 在以2042H为首地 址的连续单元中, 数据长度存放在 2041H单元,找出 的最大值存于 2040H单元。
带符号数求最大值与最小值的程序
1.初始化部分:对循环体中参加操作的有关 参数、地址等赋以初始值,并指定循环结束条 件。
2.循环体部分:指每次循环都需要重复执行 的程序段。
3.修改初始值:每次循环结束都要对初始值 进行修改,特别是判断结束条件的参数,每经 一次循环后都要作相应的修改,以便决定是否 结束循环。
4.结束判断部分:检查结束条件是否满足, 若条件满足停止循环,否则返回继续执行循环 体。
相关文档
最新文档