51单片机汇编程序设计PPT课件
合集下载
单片机课件MCS-51单片机汇编程序设计

规则:
(1)标号字段和操作字码段之间要有冒号“:”相隔; (2)操作码字段和操作数字段间的分界符是空格;
(3)双操作数之间用逗号相隔;
(4)操作数字段和注释字段之间的分界符用分号“;”相隔。 操作码字段为必选项,其余各段为任选项。
第3章 MCS-51单片机汇编语言程序设计
补充例1
下面是一段汇编语言程序的四分段书写格式
第3章 MCS-51单片机汇编语言程序设计 采用十六进制形式来表示 ,某些特殊场合才采用二进制或十进制的表 示形式 。 十六进制,后缀“H” 。 二进制,后缀“B” 。 十进制,后缀“D”,也可省略。 若十六进制的操作数以字符A~F中的某个开头时,则需在它前面加一个 “0”,以便在汇编时把它和字符A~F区别开来。 (2)工作寄存器和特殊功能寄存器的表示 采用工作寄存器和特殊功能寄存器的代号来表示,也可用其地址来表示。 例如,累加器可用A(或Acc)表示。也可用0E0H来表示,0E0H为累加器 A的地址。
第3章 MCS-51单片机汇编语言程序设计
汇编语言程序设计步骤 一.确定方案和计算方法 二.了解应用系统的硬件配置、性能指标 三.建立系统数学模型,确定控制算法和操作步骤 四.合理分配存储器单元和了解I/O接口地址 五. 编制源程序 1.按功能设计程序,明确各程序之间 的相互关系
开始
2. 用流程图表示程序结构和功能 3.程序中用注释说明指令在程序中的 作用,方便阅读、调试和修改
第3章 MCS-51单片机汇编语言程序设计
单片机原理及应用
第3章 MCS-51单片机汇编语言程序设计
内 容 提 要
★概述 ★伪指令 ★汇编语言程序设计步骤 ★顺序程序设计
★分支程序设计
★循环程序设计 ★位操作程序设计
大学课件MCS51单片机指令系统与汇编语言程序设计

ANL C, P ; (C)← (C)∧(P)
其中:P是PSW的第0位,C是PSW的第7位。
(4)字节符号地址(字节名称)加位序号的形式。对于部分特 殊功能寄存器(如状态标志寄存器PSW),还可以用其字节名 称加位序号形式来访问某一位。AC 如:
定义:操作数存放在MCS-51内部的某个工作寄存器Rn (R0~R7)或部分专用寄存器中,这种寻址方式称为 寄存器寻址。
特点:由指令指出某一个寄存器的内容作为操作数。 存放操作数的寄存器在指令代码中不占据单独的一个 字节,而是嵌入(隐含)到操作码字节中。
寻址范围:四组通用寄存器Rn(R0~R7)、部分专用 寄存器( A, B, DPTR, Cy )。
伪指令只出现在汇编前的源程序中,仅提供汇编用的某些控制 信息,不产生可执行的目标代码,是CPU不能执行的指令。
(1)定位伪指令ORG
格式:ORG n
其中:n通常为绝对地址,可以是十六进制数、标号或表达式。
功能:规定编译后的机器代码存放的起始位置。在一个汇编 语言源程序中允许存在多条定位伪指令,但每一个n值都应和前
2.2.2 直接寻址
定义:将操作数的地址直接存放在指令中,这种寻址方式称为 直接寻址。 特点:指令中含有操作数的地址。该地址指出了参与操作的数 据所在的字节单元地址或位地址。计算机执行它们时便可根据 直接地址找到所需要的操作数。
寻址范围:ROM、片内RAM区、SFR和位地址空间。P42
2.2.3 寄存器寻址
定义:指令中给出的操作数是一个可单独寻址的位地址,这种寻址 方式称为位寻址方式。
特点:位寻址是直接寻址方式的一种,其特点是对8位二进制数中 的某一位的地址进行操作。
寻址范围:片内RAM低128B中位寻址区、部分SFR(其中有83位 可以位寻址)。
单片机课件-第4章 MCS-51汇编语言程序设计

本章教学要求
第4章 MCS-51汇编语言程序设计
➢ 掌握汇编语言编程的基础知识。 ➢ 熟悉汇编语言程序设计的步骤和方法。 ➢ 了解汇编语言程序特点。 ➢ 掌握MCS-51汇编语言的顺序、分支、循环、查
表及子程序的结构。
12:02
返回目录
1
本章目录
4.1 程序设计概述 4.1.1 汇编语言的组成 4.1.2 程序设计的步骤 4.2 汇编语言程序设计方法 4.2.1 顺序结构程序 4.2.2 分支结构程序 4.2.3 循环结构程序 4.2.4 子程序
例如:ORG 1100H TAB: DW 1234H, 0ABH 10
DB、DW伪指令都只对程序存储器 的单元赋值或初始化。
12:02
返回目录
4.1.1 汇编语言的组成
----伪指令DS
(5)定义存储区伪指令DS
格式: [标号:] DS 表达式
功能:从标号地址开始保留表达式指定的字节单元作为 备用存储区,供程序运行使用。 例如: ORG 2000H
中;要求把相加之和存放在50H、
51H和52H单元中,进位存放 在位寻址区的00H位中。
50H 51H 52H
53H 54H 55H
高字节
低字节 + 高字节
低字节
R1→55H 54H 53H
R0→52H 51H 50H
00H 50H 51H 52H CY
20H
内部RAM
低字节
中字节 高字节
加数
低字节
源程序:
Y
位P=1?
N (A)=0? Y
N
P200H P2FFH P2F0H
ORG 0000H
JB P,JISH
JZ
QUAN
第4章 MCS-51汇编语言程序设计
➢ 掌握汇编语言编程的基础知识。 ➢ 熟悉汇编语言程序设计的步骤和方法。 ➢ 了解汇编语言程序特点。 ➢ 掌握MCS-51汇编语言的顺序、分支、循环、查
表及子程序的结构。
12:02
返回目录
1
本章目录
4.1 程序设计概述 4.1.1 汇编语言的组成 4.1.2 程序设计的步骤 4.2 汇编语言程序设计方法 4.2.1 顺序结构程序 4.2.2 分支结构程序 4.2.3 循环结构程序 4.2.4 子程序
例如:ORG 1100H TAB: DW 1234H, 0ABH 10
DB、DW伪指令都只对程序存储器 的单元赋值或初始化。
12:02
返回目录
4.1.1 汇编语言的组成
----伪指令DS
(5)定义存储区伪指令DS
格式: [标号:] DS 表达式
功能:从标号地址开始保留表达式指定的字节单元作为 备用存储区,供程序运行使用。 例如: ORG 2000H
中;要求把相加之和存放在50H、
51H和52H单元中,进位存放 在位寻址区的00H位中。
50H 51H 52H
53H 54H 55H
高字节
低字节 + 高字节
低字节
R1→55H 54H 53H
R0→52H 51H 50H
00H 50H 51H 52H CY
20H
内部RAM
低字节
中字节 高字节
加数
低字节
源程序:
Y
位P=1?
N (A)=0? Y
N
P200H P2FFH P2F0H
ORG 0000H
JB P,JISH
JZ
QUAN
第三章 MCS51单片机指令系统及汇编语言程序设计PPT课件

例如: MOV 30H,#20H
;将数值20H放入地址 为30H的存储单元
MOV R0,#30H MOV A,@R0
;将地址值送入工作寄 存器R0 ;A←((R0))
此例执行的结果就是将20H这个立即数装入A中。期间经历 了两次寻址,即间接寻址。
5、变址寻址
基址寄存器加变址寄存器间接寻址, 简称变址寻址。它以数据指 针DPTR或程序计数器PC作为基址寄存器, 累加器A作为变址寄 存器, 两者的内容相加形成16位程序存储器地址, 该地址就是操 作数所在地址。
(4) 目的操作数提供操作的对象, 并指出一个目标地址, 表示操作结果存放单元的地址, 它与操作码之间必须以一个 或几个空格分隔。 如上例中A表示操作对象是累加器A的内 容, 并指出操作结果又回送A存放。
(5) 源操作数指出的是一个源地址(或立即数), 表示操 作的对象或操作数来自何处。 它与目的操作数之间要用“,” 号隔开。
第三章 MCS-51单片机指令系 统及汇编语言程序设计
内容提要:
§3-1 汇编语言与指令系统简介
§3-2 数据传送类指令 §3-3 算术运算类指令 §3-4 逻辑运算类指令 §3-5 控制转移类指令 §3-6 位操作类指令 §3-7 汇编语言的汇编过程 §3-8 汇编语言的程序设计及应用
整体概况
概况一
指令中操作数的描述符号: Rn —— 工作寄存器R0 ~ R7 Ri —— 间接寻址寄存器R0、R1
Direct —— 直接地址,包括内部128B RAM单元地址、 26个SFR地址。
#data —— 8位常数 #data 16 —— 16位常数 addr 16 —— 16位目的地址 addr 11 —— 11位目的地址
程序设计语言: 机器语言: 用二进制代码表示指令和数据。 汇编语言: 用助记符表示指令操作功能,用标号表示操作对象。 高级语言: 独立于机器,面向过程,接近自然语言和数学表达式.
80C51单片机汇编语言程序设计PPT

BRn: …
(2)通过转移指令表实现程序多分支
MOV A, n
RL A
;分支序号值乘以2
MOV DPTR, #BRTAB;转移指令表首址
JMP A+DPTR
BRTAB: AJMP BR0
;转分支程序0
AJMP BR1
;转分支程序1
BR0: … BR1: …
AJMP BR127
;转分支程序127 ;分支程序
;若(CY)=1,表明Ta<T54,转升温处理程序
FH: RET
;若T55≥Ta≥T54,则返回主程序
例:已知:127≥X≥-128,求Y。设X,Y分别存放在外部 RAM 1000H和2000H单元中。
解:(1)分析任务:解方程 (2)算法:控制转移 (3)程序结构:多分支
1
x0
y
1
x0
0
x0
EQU
1000H;
EQU
2000H;
1000H
DPTR, #XAD ;数据X的地址送数据指针DPTR
A,
DPTR; A←取数据X
SAV;
X=0转SAV
ACC.7, NEG; X<0转NEG,否则,X>0
A,
#01H;
SAV;
A,
#0FFH; (0FFH为-1补码)
DPTR, #BUF; 数据Y的地址送数据指针DPTR
DEC R0
DEC R1
MOV A, R0 ADDC A, R1;高字节带进位相加 MOV R0, A ;存高字节相加结果
CLR A ADDC A, #00H;进位送00H位保存 MOV R0, #20H;存放进位的单元地址
MOV R0, A
4.2.2 分支程序结构
单片机课件第三章 MCS-51系列单片机的指令系统和汇编语言程序设计.ppt

例: ORG 1000H STORE: DS 08H
从1000H单元开始,保留8个连续单元备用。
7)赋值年伪指令EQU 格式: 名字 EQU 表达式 把表达式表示的值赋给名字。
例:
ABC EQU 8500H DEF EQU ABC+50H
§3-2 寻址方式
指令给出参与运算的数据的方式称为寻址方式。
对!
错!
MOV P1,R0
寻址比较
对!
错!
① 直接将20H这个数送P1口
MOV P1,@R0
② 地址在寄存器R0里面
MOV P1,20H
③ 地址是寄存器R0
MOV P1,#20H
④ 地址是内存20H
错!
错!
错!
错!
寻址比较
MOV P1,R0 MOV P1,@R0 MOV P1,20H MOV P1,#20H
49
48
41
40
39 38
31
30
29
28
21
20
19
18
11
10
09
08
01
00
立即数寻址 直接寻址 寄存器寻址 寄存器间接寻址 变址寻址 相对寻址 位寻址
SETB 3DH
28H 27H
21H 20H
0 0 10 0 0 0 0 0
···
···
例: 指令地址 机器码 0100H 7402 0102H 83 0103H 00 0104H 00 0105H 56
①
②
注:找信是寻找信的“地 址”!
你能说出第 二封信的
“地址”吗?
立即数寻址 直接寻址 寄存器寻址 寄存器间接寻址 变址寻址 相对寻址 位寻址
从1000H单元开始,保留8个连续单元备用。
7)赋值年伪指令EQU 格式: 名字 EQU 表达式 把表达式表示的值赋给名字。
例:
ABC EQU 8500H DEF EQU ABC+50H
§3-2 寻址方式
指令给出参与运算的数据的方式称为寻址方式。
对!
错!
MOV P1,R0
寻址比较
对!
错!
① 直接将20H这个数送P1口
MOV P1,@R0
② 地址在寄存器R0里面
MOV P1,20H
③ 地址是寄存器R0
MOV P1,#20H
④ 地址是内存20H
错!
错!
错!
错!
寻址比较
MOV P1,R0 MOV P1,@R0 MOV P1,20H MOV P1,#20H
49
48
41
40
39 38
31
30
29
28
21
20
19
18
11
10
09
08
01
00
立即数寻址 直接寻址 寄存器寻址 寄存器间接寻址 变址寻址 相对寻址 位寻址
SETB 3DH
28H 27H
21H 20H
0 0 10 0 0 0 0 0
···
···
例: 指令地址 机器码 0100H 7402 0102H 83 0103H 00 0104H 00 0105H 56
①
②
注:找信是寻找信的“地 址”!
你能说出第 二封信的
“地址”吗?
立即数寻址 直接寻址 寄存器寻址 寄存器间接寻址 变址寻址 相对寻址 位寻址
MCS51系列单片机指令系统及汇编语言程序设计课件

MOVC A, @A+PC ;A+PC为地址的存储器单元内容→A
第7页,共52页。
6. 相对寻址
以当前程序计数器PC的内容为基址,加上指令给出的一 字节补码数形成新的PC值的寻址方式。PC中的当前值称为 基地址,一字节补码数称为偏移量,新的PC值称为转移目 的地址。
例如:JC 80H ;C=1跳转
INC Rn
INC DPTR
第16页,共52页。
减1指令(4条)
DEC A DEC dir DEC @Ri
DEC Rn
十进制调整指令(1条)
DA A ;把A中按二进制相加后的结果调整成按BCD数相加的结果
第17页,共52页。
3.逻辑操作类指令(共24条)
逻辑操作类指令共有24条,主要包括“与”、“或”、“异或”、求反、清0、左右 移位等逻辑操作。
中(1050H)=64H。
堆栈操作类指令(2条)
PUSH dir POP dir
例:SP=07H,(35H)=55H,指令PUSH 35H执行后,55H送入08H地址单元,SP= 08H。
第13页,共52页。
交换指令(5条)
XCH A,Rn
XCH A,@Ri
XCH A,dir XCHD A,@Ri SWAP A 例:A=80H,R0=32H,(32H)=FFH,指令XCHD A,@R0执行后,
寄存器间接寻址的存储器空间包括:内部数据RAM和外部数据RAM。
内部数据RAM共用128字节,用一个字节的R0或R1可寻址整个空间。
外部数据RAM最大可达64K字节,仅用R0或R1无法寻址整个空间。在MCS-51系列单片机指 令中,对外部数据RAM作间接寻址有两种方法:第一种由P2口提供高8位外部数据RAM地址,由 R0或R1提供低8位地址,由此共同寻址64K空间;第二种是用16位的DPTR作寄存器间接寻址。
第7页,共52页。
6. 相对寻址
以当前程序计数器PC的内容为基址,加上指令给出的一 字节补码数形成新的PC值的寻址方式。PC中的当前值称为 基地址,一字节补码数称为偏移量,新的PC值称为转移目 的地址。
例如:JC 80H ;C=1跳转
INC Rn
INC DPTR
第16页,共52页。
减1指令(4条)
DEC A DEC dir DEC @Ri
DEC Rn
十进制调整指令(1条)
DA A ;把A中按二进制相加后的结果调整成按BCD数相加的结果
第17页,共52页。
3.逻辑操作类指令(共24条)
逻辑操作类指令共有24条,主要包括“与”、“或”、“异或”、求反、清0、左右 移位等逻辑操作。
中(1050H)=64H。
堆栈操作类指令(2条)
PUSH dir POP dir
例:SP=07H,(35H)=55H,指令PUSH 35H执行后,55H送入08H地址单元,SP= 08H。
第13页,共52页。
交换指令(5条)
XCH A,Rn
XCH A,@Ri
XCH A,dir XCHD A,@Ri SWAP A 例:A=80H,R0=32H,(32H)=FFH,指令XCHD A,@R0执行后,
寄存器间接寻址的存储器空间包括:内部数据RAM和外部数据RAM。
内部数据RAM共用128字节,用一个字节的R0或R1可寻址整个空间。
外部数据RAM最大可达64K字节,仅用R0或R1无法寻址整个空间。在MCS-51系列单片机指 令中,对外部数据RAM作间接寻址有两种方法:第一种由P2口提供高8位外部数据RAM地址,由 R0或R1提供低8位地址,由此共同寻址64K空间;第二种是用16位的DPTR作寄存器间接寻址。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
格式:DS n DS n从标号指定单元开始,预留n个单元的存贮区。
5、赋值伪指令
格式汇编指令
格式: END END指示源程序到结束,常将其放在汇编语言源 程序的末尾。
3.3.3 汇编语言程序设计过程
1、分析任务,确定算法或解题思路 2、根据算法和解决思路画出程序流程图 流程图是由一些框图和流程线组合而成:
【例3-10】 求单字节有符号二进制数的补码。
编程如下:
CMPT:
MOV A , 30H
JNB ACC.7 , NCH
;(A)≥0,不需要转换
MOV C , ACC.7 ;保存符号
MOV 10H , C
CPL A
ADD A , #1
MOV C , 10H
MOV ACC.7 , C ;恢复符号
NCH: END
3.3.2 伪指令
1、定位伪指令 格式:ORG n 2、定义字节伪指令 格式:标号:DB X1, X2, ……Xn 此伪指令的功能是把Xi存入从标号开始连续的单元中。 3、定义双字节伪指令 格式:标号:DW X1,X2,……Xn 此伪指令的功能是把Xi存入从标号开始的连续单元中。
4、预留存贮区伪指令
解:编程说明: 内部数据区首址: R0←30H 外部数据区首址: DPTR←2000H 循环次数: R2←32H 程序流程如图3-9所示。
参考程序如下: START: MOV R0 , #30H MOV DPTR , #2000H MOV R2 , #32H
LOOP: MOV A , @R0 MOVX @DPTR , A INC R0 INC DPTR DJNZ R2 , LOOP END
MOV R2 , #10H MOV R4 , #00H MOV R5 , #00H
LOOP: MOV A , R5 ADD A , @R0 MOV R5 , A MOV A , #00H ADDC A , R4 MOV R4 , A INC R0
DJNZ R2 , LOOP END
【例3-13】 将内部数据存贮器30H~4FH单元中的 内容传送至外部数据存贮器2000H开始的单元中。
`
置的框图连接在一起,位于不同框图的圈内,应
标注相同的字母。
3、根据流程图编写程序 4、上机调试程序
3.3.4 顺序结构程序设计 按照程序编写的顺序,依次执行。任何复杂的程 序,都含有较大成份的顺序结构程序。 【例3-8】 将两位压缩BCD码转换成二进制数 编程思路:(a1a0)BCD= a1×10+a0 编程说明:待转换的两位压缩BCD码存放于R2, 转换结果存回R2。 程序流程图如图3-1所示。
图3-5中,K的最大值一般为128。
【例3-1‰】 用单片机作四则运算。
编程说明:在单片机系统中,设置+、-、×、÷ 四个运算键,这四个运算键的键值分别为0、1、2、3 (键值存放在寄存器(2中),当其中一个按键按下时, 进行相应的运算。
P1口输入被加数、被减数、被乘数或被除数,以 及运算结果的低8位或商。
【例3-9】 求符号函数的值 1 当X>0
Y= 0 当X=0 的值。 -1 当X<0
编程说明:设变量X存放在40H单元中,函数Y存 放在41H单元中。此程序为三分支程序。
程序流程图如图3-3所示。
编程如下: START: MOV A,40H
JZ COMP JNB ACC.7, POST MOV A,#81H ;表示-1 SJMP COMP POSI: MOV A,#01H ;表示+1 COMP: MOV 41H,A END
【例3-14】试将内部数据存储器中连续存放的N个 数据由小到大进行排列。
设:数据区首地址存于寄存器R0中,数据个数N 存于寄存器R6中。程序流程如图3-10所示。
编程如下: START: MOV A , R2
ANL A , #0F0H ;取高位BCD码 SWAP A MOV B , #0AH MVL AB MOV R3 , A MOV A , R2 ANL A , #0FH ;取低位BCD码 ADD A , R3 MOV R2 , A END
3.3.5 分支程序设计
PRG1: MOV A,P1 CLR C SUBB A,P3 MOV P1,A
;进位位放入A中
CLR A RLC A ;借位放入A中 MOV P3,A RET
PRG2: MOV A,P1 MOV B,P3 MUL AB MOV P1,A MOV P3,B RET
PRG3: MOV A,P1 MOV B,P3 DIV AB MOV P1,A MOV P3,B RET
【例3-12】已知内存单元有16个二进制无符号数, 分别存放在30H~3FH中,试求它们的累加和,并将其 和数存放在R4、R5中。
编程说明:存放16个二进制无符号数的首地址为 30H,此循环程序的循环次数为16次,和数放在R4、 R5中。程序流程如图3-8。
参考程序如下: START: MOV R0 ,#30H
P3口输入加数、减数、乘数或除数,,以及结果的 高8位或余数。
键号存放在累加器A中。
程序流程图如图3-6所示。
参考程序如下: START: MOV P1 , #0FFH
MOV P3 , #0FFH MOV DPTR, #TABLE CLR C MOV A, R2 SUBB A,#04H JNC ERROR ADD A , #0-4H
3.3 汇编语言程序设计
3.3.1 汇编语言及其语句格式 1、汇编语言 这里介绍MCS-51单片机的汇编语言。 2、汇编语言的语句格式 一条汇编语言的语句包括四部分内容:标号、操 作码、操作数和注释。其格式为: 标号:操作码 操作数;注释 例如:LOOP: MOV A , #20H ; (A)←20H
CLR C
RL A
;正确的散转偏移号,键号×2
JMP @A+DPTR
TABLE: AJMP PRG0
AJMP PRG1
AJMP PRG2
AJMP PRG3
ERROR: ( 错误处理)
PRG0: MOV A,P1
ADD A,P3 MOV P1,A CLR A ADDC A,#00H MOV P3,A RET
5、赋值伪指令
格式汇编指令
格式: END END指示源程序到结束,常将其放在汇编语言源 程序的末尾。
3.3.3 汇编语言程序设计过程
1、分析任务,确定算法或解题思路 2、根据算法和解决思路画出程序流程图 流程图是由一些框图和流程线组合而成:
【例3-10】 求单字节有符号二进制数的补码。
编程如下:
CMPT:
MOV A , 30H
JNB ACC.7 , NCH
;(A)≥0,不需要转换
MOV C , ACC.7 ;保存符号
MOV 10H , C
CPL A
ADD A , #1
MOV C , 10H
MOV ACC.7 , C ;恢复符号
NCH: END
3.3.2 伪指令
1、定位伪指令 格式:ORG n 2、定义字节伪指令 格式:标号:DB X1, X2, ……Xn 此伪指令的功能是把Xi存入从标号开始连续的单元中。 3、定义双字节伪指令 格式:标号:DW X1,X2,……Xn 此伪指令的功能是把Xi存入从标号开始的连续单元中。
4、预留存贮区伪指令
解:编程说明: 内部数据区首址: R0←30H 外部数据区首址: DPTR←2000H 循环次数: R2←32H 程序流程如图3-9所示。
参考程序如下: START: MOV R0 , #30H MOV DPTR , #2000H MOV R2 , #32H
LOOP: MOV A , @R0 MOVX @DPTR , A INC R0 INC DPTR DJNZ R2 , LOOP END
MOV R2 , #10H MOV R4 , #00H MOV R5 , #00H
LOOP: MOV A , R5 ADD A , @R0 MOV R5 , A MOV A , #00H ADDC A , R4 MOV R4 , A INC R0
DJNZ R2 , LOOP END
【例3-13】 将内部数据存贮器30H~4FH单元中的 内容传送至外部数据存贮器2000H开始的单元中。
`
置的框图连接在一起,位于不同框图的圈内,应
标注相同的字母。
3、根据流程图编写程序 4、上机调试程序
3.3.4 顺序结构程序设计 按照程序编写的顺序,依次执行。任何复杂的程 序,都含有较大成份的顺序结构程序。 【例3-8】 将两位压缩BCD码转换成二进制数 编程思路:(a1a0)BCD= a1×10+a0 编程说明:待转换的两位压缩BCD码存放于R2, 转换结果存回R2。 程序流程图如图3-1所示。
图3-5中,K的最大值一般为128。
【例3-1‰】 用单片机作四则运算。
编程说明:在单片机系统中,设置+、-、×、÷ 四个运算键,这四个运算键的键值分别为0、1、2、3 (键值存放在寄存器(2中),当其中一个按键按下时, 进行相应的运算。
P1口输入被加数、被减数、被乘数或被除数,以 及运算结果的低8位或商。
【例3-9】 求符号函数的值 1 当X>0
Y= 0 当X=0 的值。 -1 当X<0
编程说明:设变量X存放在40H单元中,函数Y存 放在41H单元中。此程序为三分支程序。
程序流程图如图3-3所示。
编程如下: START: MOV A,40H
JZ COMP JNB ACC.7, POST MOV A,#81H ;表示-1 SJMP COMP POSI: MOV A,#01H ;表示+1 COMP: MOV 41H,A END
【例3-14】试将内部数据存储器中连续存放的N个 数据由小到大进行排列。
设:数据区首地址存于寄存器R0中,数据个数N 存于寄存器R6中。程序流程如图3-10所示。
编程如下: START: MOV A , R2
ANL A , #0F0H ;取高位BCD码 SWAP A MOV B , #0AH MVL AB MOV R3 , A MOV A , R2 ANL A , #0FH ;取低位BCD码 ADD A , R3 MOV R2 , A END
3.3.5 分支程序设计
PRG1: MOV A,P1 CLR C SUBB A,P3 MOV P1,A
;进位位放入A中
CLR A RLC A ;借位放入A中 MOV P3,A RET
PRG2: MOV A,P1 MOV B,P3 MUL AB MOV P1,A MOV P3,B RET
PRG3: MOV A,P1 MOV B,P3 DIV AB MOV P1,A MOV P3,B RET
【例3-12】已知内存单元有16个二进制无符号数, 分别存放在30H~3FH中,试求它们的累加和,并将其 和数存放在R4、R5中。
编程说明:存放16个二进制无符号数的首地址为 30H,此循环程序的循环次数为16次,和数放在R4、 R5中。程序流程如图3-8。
参考程序如下: START: MOV R0 ,#30H
P3口输入加数、减数、乘数或除数,,以及结果的 高8位或余数。
键号存放在累加器A中。
程序流程图如图3-6所示。
参考程序如下: START: MOV P1 , #0FFH
MOV P3 , #0FFH MOV DPTR, #TABLE CLR C MOV A, R2 SUBB A,#04H JNC ERROR ADD A , #0-4H
3.3 汇编语言程序设计
3.3.1 汇编语言及其语句格式 1、汇编语言 这里介绍MCS-51单片机的汇编语言。 2、汇编语言的语句格式 一条汇编语言的语句包括四部分内容:标号、操 作码、操作数和注释。其格式为: 标号:操作码 操作数;注释 例如:LOOP: MOV A , #20H ; (A)←20H
CLR C
RL A
;正确的散转偏移号,键号×2
JMP @A+DPTR
TABLE: AJMP PRG0
AJMP PRG1
AJMP PRG2
AJMP PRG3
ERROR: ( 错误处理)
PRG0: MOV A,P1
ADD A,P3 MOV P1,A CLR A ADDC A,#00H MOV P3,A RET