80C51汇编语言

合集下载

第5章80C51单片机汇编语言程序设计

第5章80C51单片机汇编语言程序设计
.
END
是一个标号, 其地址与前一条伪指令连续, 即1003H,
1004H地址单元中依次存放 45H, 66H。
16.05.2020
.
(4)定义字指令DW
指令格式:
[标号:] DW 16
该指令的功能与DB相似, 区别仅在于从指定地址开 始存放的是指令中的 16 位数据, 而不是字节串。每个 16 位数据要占两个存储单元, 高8 位先存, 低 8 位后存, 这和 MCS -51指令中的16位数据存放顺序是一致的。
16.05.2020
.
流第 程三
步 : 设 计
重复该过程
16.05.2020
找出第一个学生
N
他选计算机吗?
Y N
他选了德语吗?
Y N
他选了CAD吗?
Y
记录要找的人
N
还有学生吗?
Y
下一个学生
结束
.
几点启示
• 整体构思; • 构建整体流程框图; • 结构合理,流程清晰,简单明了; • 局部模块化;
16.05.2020
16.05.2020
.
源程序
低级语言 高级语言
目标程序
汇编
机器语言
编译
机器语言
16.05.2020
.
程序设计实例引入
• 实例 假设一个班有50个人, 共有3门选修课: ➢ 计算机算法 ➢ 服装CAD设计 ➢ 德语 请找出: ➢ 同时选了三门课的同学;
16.05.2020
.
问题的解决
• 第一步
如何在计算机中表示选修某门课的所有同学
MOV 22H,B ORL A,#30H MOV 21H,A SJMP $ END .

80C51汇编语言程序设计

80C51汇编语言程序设计
二、算法设计
将实际问题转化为计算机处理的程序算法 算法比较与优化(内存需求与运行速度)
三、流程描述
流程图符号
开始或结束符号
判断分支符号
工作任务符号
程序连接符号
程序流向符号
程序流向符号
“超级循环”框架
开始 初始化
循环扫描、处理
4.1.2 程序编制的方法和技巧
一、强化模块观念
程序模块(主程序模块、各种子程序模块) 模块化优点:分块设计、便于阅读、调试方便
本章学习目标 :
了解汇编语言的特点,明确程序设计的基本思 路 熟悉汇编语言的语句结构,能正确书写汇编语 言程序 理解伪指令的功能,能正确使用80C51常用伪指 令 熟悉几种基本的程序结构 能读懂教材中的程序实例,学会编写同等难度 的应用程序
单片机应用系统由硬件系统和应用程序构成
应用程序设计方法
汇编语言 高级语言
二进制(B) 十进制(D或省略D) 十六进制(H),注意A~F开头时要加“0” ASCII码,如 ‘A’,‘1245’ (2)符号:符号名、标号或“$”(PC的当前值) (3)表达式:由运算符和数据构成(见表4.1)Βιβλιοθήκη 四、注释英文分号“;”开头
表4.1
程序设计实例引入
❖ 实例 假设一个班有50个人, 共有3门选修课: ➢ 计算机算法 ➢ 服装CAD设计 ➢ 德语 请找出: ➢ 同时选了三门课的同学;
问题的解决
❖ 第一步 如何在计算机中表示选修某门课的所有同学
计算机算法
5
学生的学号
12
23
25
29
39
服装CAD设计
2 25 39
选修这门人数 德语 4 12 25 29 39
这个过程实际上是设计数据结构的问题

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

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

进程
判断
开始 取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
第三章 MCS-51汇编语言程序设计
1、 单片机程序程序设计语言概述
汇编语言程序设计必须注意如下特点: (1)设计人员必须详细了解单片机的硬件结构,以便在程序设
计中熟练使用;
(2)必须熟悉汇编语言指令的功能和用法; (3)在程序设计前,必须分析设计任务,确定所用算法,确定
程序结构,确定数据的类型、数据的结构,必须对数据的存放、
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位保存
例:设内部RAM 40H,41H单元中分别存放8位二进制数,现分别
取这两个单元中的半个字节,合并成一个新字节存放在42H单元 中。要求如下:42H单元新字节的低半字节取自40H单元的低半字 节,而高半字节取自41H单元的低半字节。 解:(1)分析任务:拆字、合字
N1
N2

80C51的汇编语言程序设计

80C51的汇编语言程序设计

标号(即符号地址)
非数字字符开头,后跟字母、数字、“ -” 、“?” 等 不能用已定义的保留字(指令助记符、伪指令等) LOOP: 1BT: 后跟英文冒号“:” 指令助记符 TABLE: LST+2: 是指令功能的英文缩写。 THLS2: BEGIN LT-1: MOV:
2016/7/10 8
操作数
78H 56H 34H 12H 00H 00H
(b)
实际应用中,应尽量采用指令代码字节数少、 执行时间短的高效率程序,即注意程序的优化。
2016/7/10 23
2、查表程序
例4.2 有一变量存放在片内RAM的20H单元,其取值范 围为00H~05H.要求编程,根据变量值求其平方值, 并存入片内RAM的21H单元。 开始
26
;被加数的低字节地址 ;加数的低字节地址
;低字节相减 ;存低字节相减结果
;中间字节带进位相减 ;存中间字节相减结果
;高字节带进位相减 ;存高字节相减结果 ;借位送00H保存
4.3.2 分支程序设计
程序的分支是通过条件转移指令实现的。根据条件 对程序中的状态进行判断,满足条件则进行程序转移, 否则按顺序执行。在 MCS-51 指令系统中,有多种条件转 移指令,包括JZ、JNZ、CJNE、DJNZ以及位状态条件转移 指令JC、JNC、JB、JNB、JBC等,使用这些指令,可以完 成各种条件下的程序分支转移。 分支程序可分为单分支、双分支和多分支程序。
3、简单运算
由于80C51指令系统中只有单字节加法指 令,因此对于多字节的相加运算必须从低位字 节开始分字节进行。除最低字节相加时可以使 用ADD指令外,其他字节相加时要把低字节的 进位考虑进去,这时应该使用ADDC(减法用 SUBB)指令。

第四章 80C51汇编语言程序设计

第四章 80C51汇编语言程序设计

4.2 基本结构程序设计
程序设计的基本结构有:顺序结构、分支结构和循环结构。 4.2.1 顺序结构程序 例4-2 将30H单元的2个BCD码拆开并分别存入到31H和32H 单元中。 解:方法一:先把30H中低4位BCD码交换出来,存入31H 中,再把高4位BCD码交换到低4位存入32H中。
4.2 基本结构程序设计
4.2 基本结构程序设计
ORG 0000H LJMP START ORG 0030H START:MOV R0,#30H MOV A,@R0 INC R0 CLR C SUBB A,@R0 JC BIG2 ADD A,@R0 SJMP NEXT BIG2: MOV A, @R0 NEXT: INC R0 MOV @R0,A SJMP $ END
程序1:用AJMP 和JMP 程序 KEY: MOV DPTR, #TAB; 转移表的首址 MOV A, R2 RL A JMP @A+DPTR TAB: AJMP KEY0 AJMP KEY1 AJMP KEY2 AJMP KEY3 AJMP KEY4 AJMP KEY5 AJMP KEY6 AJMP KEY7 KEY0: …… RET KEY1: …… RET ……
4.2 基本结构程序设计
例:4-10 设计一个延时50ms的程序 DEL :MOV R7, #200 DEL1:MOV R6, #123 NOP DEL2:DJNZ R6, DEL2 DJNZ R7, DEL1 RET
4.2 基本结构程序设计
4.3 子程序设计 例:4-9已知(30H)=x,(31H)=y ,(32H)=f,实现函数 f小于255 f x y
LCALL DL MOV 32H,A MOV A, 31H LCALL DL ADD A, 32H MOV 32H, A SJMP $

第4章 80C51单片机汇编语言程序设计

第4章  80C51单片机汇编语言程序设计
第四章 汇编语言程序设计
按照语法格式 编写源程序 *.ASM *.C 按照语法格式 将源程序翻译 成机器代码 计算机识别的 二进制代码 *.OBJ
高级语言如 C++
汇编语言如 MCS-51指令
编译
目标文件
汇编
目标文件
1
本章结构
4.1 单片机程序设计语言概述 4.4 汇编语言编辑和汇编及其伪指令 4.2 汇编语言程序的基本结构形式
顺序程序结构 分支程序结构 循环程序结构
4.3 汇编语言程序设计举例
2
4.1
概述
4.1.1、 程序设计语言及语言处理程序
程序设计语言分:机器语言、汇编语言和中高级语言 1.机器语言: •硬件识别,二进制,无需翻译、直接执行,面向机器; •速度快,效率高,难以辨认和记忆,易错,难修改。 地址 2000H 2002H 机器码 78 30 E6 源程序 ORG 2000H MAIN: MOV R0,#30H MOV A,@R0
22
2.1 使用多条CJNE指令
假定分支序号值保存在累加器A中,则可使用
CJNE A, #data, rel
(A)=0?
转向0分支
(A)=1?
转向1分支
(A)=2?
转向2分支
23
例4.3某温度控制系统,采集的温度值(Ta)放在累加器A中。此外,在内部 RAM54H单元存放控制温度下限制(T54),在55H单元存放控制温度上限 制(T55)。若Ta >T55,程序转向JW(降温处理程序);若Ta<T54,则 程序转向SW(升温处理程序);T55≥Ta≥T54,则程序转向FH(返回主程 序)。 程序如下: CJNE A,55H,LOOP1 ;Ta ≠T55,转向LOOP1 AJMP FH ;Ta=T55,返回 LOOP1:JNC JW ;若C=0,表明Ta>T55,转降温程序 CJNE A,54H,LOOP2 ;Ta ≠T54,转向LOOP2 AJMP FH ; Ta=T54,返回 LOOP2:JC SW ;若C=1,表明Ta<T54,转升温程序 FH: RET

单片机及应用_第四章_80C51单片机汇编语言程序设计

单片机及应用_第四章_80C51单片机汇编语言程序设计
第4章
80C51单片机汇编语言程序设计
主要内容: 4.1 单片机程序设计语言概述 4.2 汇编语言程序的基本结构形式 4.3 80C51 单片机汇编语言程序设计举例 4.4 单片机汇编语言源程序的编辑和汇编 4.5 80C51 单片机汇编语言伪指令
4.1 单片机程序设计语言概述
4.1.1 机器语言和汇编语言 1、机器语言:直接用二进制代码指令表达的计算 机语言。计算机可以直接识别,不需要进行任 何翻译。每台机器的指令,其格式和代码所代 表的含义都是硬性规定的 。机器语言是其它各 种程序设计语言的基础,但难记、难用、已出 错。
符(ASCII码0DH)比较的方法。同时在程序中还应设置一个
字符串指针以顺序定位字符,设置一个字符长度计数器以累 计字符个数。
4.2.3 循环程序结构
MOV R2, #0FFH ;设置长度计数器初值 MOV R0, #3FH ;设置字符串指针初值 LOOP: INC R2 INC R0 CJNE @R0, #0DH, LOOP
4.1.1 机器语言和汇编语言
2、汇编语言:用助记符和专门的语言规则表示指令的功 能和特征的面向机器的程序设计语言。汇编语言是对 机器语言的改进,比机器语言高级。汇编语言的最大 优点是助记符与机器指令一一对应。用汇编语言编写 的程序占用存储空间小,运行速度快,程序效率高。 此外,汇编语言能直接管理和控制硬件资源。
4.2 汇编语言程序的基本结构形式

四种基本结构形式:顺序程序结构、分支程 序结构、循环程序结构、子程序。
4.2.1 顺序程序结构 顺序结构程序是最简单的程序结构。程序既 无分支、循环,也不调用子程序,程序执行 时一条接一条地按顺序执行指令。
4.2.1 顺序程序结构
例1 3字节无符号数的加法运算。其中被加数在 内部RAM的50H、51H和52H单元中;加数 在内部RAM的53H、54H和55H单元中;要 求把相加之和存放在50H、51H和52H单元中, 进位存放在位寻址区的20H位中。

第4章 80C51单片机汇编语言程序设计(新)

第4章 80C51单片机汇编语言程序设计(新)

(1003H)=78H,
(100AH)=-2=0FEH
(1004H)=35H(5的ASCII码),
7
定义数据字命令 DW (Define Word)
在程序存储器中定义16位的数据字。
存放时,数据字的高8位在低地址,低8位在后
高地址。
DW
通常,DB用来定义<数Y1据,Y,2,D…W,Y用n>来定义地址。
机器编辑→交叉汇编→串行传送
*.ASM
地址 8000
8002
机器码 7820
7F07
标号 助记符指令
SORT: MOV R0,#20H
MOV 3
编辑、汇编
编辑:
编写程序的过程称为编辑。 机器编辑指借助于微型机进行单片机的程序设计,通常都是使用编
辑软件进行源程序的编辑。 编辑完成后,生成一个由汇编指令和伪指令构成的扩展名
一般用汇编语言编写的程序需要 预留存放数据的空间用伪指令定义好
然后编写程序代码 最后用原地踏步或返回起始位置循环作为结束。
【例】程序格式如下:
ORG … … SJMP $ END
14
汇编语言程序的基本结构形式
分支结构
使用条件转移指令对程序的执行结果进行判断
教学内容及要求
教学内容
汇编语言程序的基本结构形式、子程序结构形式 80C51单片机汇编语言伪指令 80C51单片机汇编语言程序设计举例
教学要求
掌握顺序结构程序、分支程序、循环程序和子程序等 结构程序的设计等
熟悉单片机汇编程序常用的伪指令 了解汇编语言程序的格式
汇编语言源程序的编辑和汇编
[<标号:>] DS <16位数表>
【例】ADDRTAB:DS 20 ;从标号ADDRTAB代表的地址开始,预留20个 ;连续的地址单元。

80C51汇编语言程序设计

80C51汇编语言程序设计

课程名称:单片机及应用第四章第四章80C51汇编语言程序设计一、基本要求1.1.了解汇编语言源程序的格式2.熟悉常用的伪指令3.掌握简单程序、分支程序、循环程序、查表程序和子程序等结构程序的设计二、知识点导学4.3 汇编语言程序举例用汇编语言进行程序设计的过程跟用高级语言进行程序设计很相似。

对于比较复杂的问题可以先根据题目的要求作出流程图,然后再根据流程图来编写程序。

对于比较简单的问题则可以不用流程图而直接编程。

当然,两者的差别还是很大的。

一个很重要的差别就在于用汇编语言编程时,对于数据的存放位置,以及工作单元的安排等都要由编程者自己安排。

而用高级语言编程时,这些问题都是由计算机安排的,编程者则不必过问。

例如MCS-51中有八个工作寄存器R0-R7,而只有R0和R1可以用于变址寻址指令。

因此,编程者就要考虑哪些变量存放在哪个寄存器,以及R0和R1这样可变址寻址的寄存器若不够用又如何处理等等。

这些问题的处理和掌握,将是编程的关键之一。

希望通过实践注意掌握。

这一节中将介绍一些汇编语言设计的实例及一些程序设计的方法。

一、简单程序简单程序是指一种无分支的直接程序,即从第一条指令开始依次执行每一条指令,直到最后一条,程序就算完毕。

这种程序虽然比较简单,但也能完成一定的功能,并且往往也是构成复杂程序的基础。

例1 将一个字节内的两个BCD十进制数拆开并变成相应的ASCII码,存入两个RAM单元。

解:设两个BCD数已放在内部RAM的20H单元,变换后的ASCII码放在21H和22H单元并让高位十进制BCD数存放在21H单元。

在上一章中曾举例用SW AP指令来将两个BCD数合在一个字节内。

拆字时也可以用SW AP 指令,并且借助于半字节交换指令XCHD,就不难完成所规定的功能。

数字0~9的ASCII码为30H~39H。

完成拆字转换只需将一个字节内的两个BCD数拆开放到另两个单元的低4位,并在其高4位赋以0011即可。

第3章80C51的汇编语言与程序设计.

第3章80C51的汇编语言与程序设计.

10
3 立即寻址
指令码中直接给出操作数的寻址方式。 立即数前必须加“#”标记。指令中的立即数有 8位立即数和16位立即数。
通用符号:#data (8位),#data16(16位)
【例】执行指令 MOV A,#50H和MOV DPTR,#3050H ,A值 分别是多少? 注意区别这个指令:MOV A, 50H
思考:MOV、MOVC、MOVX指令的区别?
2018/10/10
29
堆栈操作指令PUSH和POP
堆栈是一片存储区,遵循“后进先出”原则,栈顶由SP指 示。主要用于系统发生中断时保存中断现场信息。 入栈指令PUSH PUSH direct ;SP←(SP)+1,(SP)←(direct) 出栈指令POP POP direct ;(direct)←((SP)),SP ←(SP)-1
小结:立即数与地址的区别是什么?
2018/10/10Leabharlann 114 寄存器间接寻址
在这种寻址方式中,操作数项中的工作寄存器中存放的不是真正 的数据,而是操作数的地址。间接寻址要在工作寄存器前加 @表示间 址操作。
符号 ― @R0和@R1
【例】若(R0)=30H,(30H)=5AH 执行MOV A,@R0后,(A)=?
第3章 80C51的指令系统
3.1
3.2 汇编语言概述 80C51的指令系统
数据传送指令 (29条) 算数运算指令 (24条) 逻辑运算与循环类指令(24条) 控制转移类指令 (17条) 位操作类指令 (17条) 伪操作类指令
3.3
80C51汇编语言的编程方法
2018/10/10
1
3.1 汇编语言概述
2018/10/10
14
7 位寻址

(参考资料)80C51指令集

(参考资料)80C51指令集

代码 E8--EF
E5 E6--E7
74 F8--FF A8--AF 78--7F
F5 88—8F
85 86;87
75 F6;F7 A6;A7 76;77
90 A2 92 93 83 E2;E3 E0 F2;F3 F0 C0 D0 C8—CF C5 C6;C7 D6;D7
2.逻辑运算指令 助记符
ANL A,Rn ANL A,data ANL A,@Ri ANL A,#data ANL data,A ANL data,#data ANL C,bit ANL C,/bit ORL A,Rn ORL A,data ORL A,@Ri ORL A,#data ORL data,A ORL data,#data ORL C,bit ORL C,/bit XRL A,Rn XRL A,data XRL A,@Ri XRL A,#data XRL data,A XRL data,#data SETB C SETB bit CLR A CLR C CLR bit CPL A CPL C CPL bit RL A RLC A
助记符 AJMP addr 11 LJMP addr 16 SJMP rel
A 右移一位 A 带进位右移一位 A 半字节交换
说明 寄存器加到 A 直接字节加到 A 间接 RAM 加到 A 立即数加到 A 寄存器带进位加到 A 直接字节带进位加到 A 间接 RAM 带进位加到 A 立即数带进位加到 A 从 A 中减去寄存器和进位 从 A 中减去直接字节和进位 从 A 中减去间接 RAM 和进位 从 A 中减去立即数和进位 A加1 寄存器加 1 直接字节加 1 间接 RAM 加 1 数据指针加 1 A减1 寄存器减 1 直接字节减 1 间接 RAM 减 1 A乘B A被B除 A 十进制调整

第5章80C51单片机汇编语言程序的设计

第5章80C51单片机汇编语言程序的设计

LP0: MOV DPTR, #TAB ;
MOV A, R0 ADD A, R0
; R0内容乘以2
JNC LP1
;
INC DPH
;
LP1: JMP A+DPTR;

TAB: AJMP PR0
AJMP PR1

2019/10/11
AJMP PRN
第5章 汇编语言程序设计简介
• 练习
把内部RAM起始地址为data的数据串传送 到外部RAM以LOOP为首地址的区域,直到发 现“$”字符的ASCⅡ码为止,同时规定数据 串的最大长度为32个字节。
2019/10/11
第5章 汇编语言程序设计简介
BIT 位地址符号命令
• 格式:字符名 BIT 位地址 • 功能:把BIT后的位地址值赋给字符名。其中字符名不
是标号,其后没有冒号,但字符名是必须的。 例如:A1 BIT P1.0
A2 BIT 02H • 汇编后,P1口第0位的位地址90H就赋给了A1,而A2
2019/10/11
第5章 汇编语言程序设计简介
程序如下:
START: CLR C
; 将Cy
MOV R0, #41H ; 将被加数地址送数据指针R0
MOV R1, #51H ; 将加数地址送数据指针R1
AD1: MOV A, R0 ; 被加数低字节的内容送入A
ADD A,R1
;
MOV R0, A
;
2019/10/11
第5章 汇编语言程序设计简介
例 5 根据工作寄存器R0 内容的不同, 使程序转入相应 的分支。
(R0)=0 对应的分支程序标号为PR0; (R0)=1 对应的分支程序标号为PR1;

第5章80C51单片机汇编语言程序设计

第5章80C51单片机汇编语言程序设计

08.08.2021
最新课件
23
第5章 汇编语言程序设计简介 5.2 汇编语言基本结构
08.08.2021
最新课件
24
5.2.1 顺序程序设计
例 1 两个无符号双字节数相加。 设被加数存放于内部RAM的40H(高位字节), 41H(低位字节), 加数存放于50H(高位字节), 51H(低位字节), 和数存入 40H和41H单元中。
14
(2)等值指令EQU
指令格式: 字符名称 EQU
例: PA8155 EQU 8001H ;即给标号PA8155赋值为8001H
使指令中的字符名称等价于给定的数字或汇编符号。
如果在程序中要多次使用到某一地址,由EQU指令将 其赋值给一个字符名称, 一旦需要对其进行变动, 只要改 变EQU命令后面的数字即可。 注意:由 EQU等值的字符名称必须先赋值后使用, 且在 同一个源程序中, 同一个标号只能赋值一次。
是一个标号, 其地址与前一条伪指令连续 , 即1003H,
1004H地址单元中依次存放 45H, 66H。
08.08.2021
最新课件
17
(4)定义字指令DW
指令格式:
[标号:] DW 16
该指令的功能与DB相似, 区别仅在于从指定地址开 始存放的是指令中的 16 位数据, 而不是字节串。每个 16 位数据要占两个存储单元, 高8 位先存, 低 8 位后存, 这和 MCS -51指令中的16位数据存放顺序是一致的。
单片机推出时,都有相配套的C编译器加以支持。 高级语言编写程序的缺点是实时性不高,结构不 紧凑,编译后占用存储空间比较大,这一点在存 储器有限的单片机应用系统中没有优势。
08.08.2021
最新课件
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

22
DW DW DW DW PP0:MOV 元
PP1 PP2 PP3 PP4 30H,#0
;转移序号为0时,置功能号“0”于30H单
RET PP1:MOV

30H,#
;转移序号为1时,置功能号“1”于30H单
RET PP2:MOV
元 RET PP3:MOV 元 RET PP4:MOV 元
2013-7-19
C源文件 .C
.LST
库文件 .LIB
映像文件
2013-7-19
9
4.2.1 源程序的编辑和汇编
源程序的编辑
依据汇编语言规则 用好伪指令 ORG LJMP ORG MAIN:MOV MOV MOV LOOP:MOV INC DJNZ SJMP END
10
符号不用中文
SJMP $ 用于调试
以 .ASM存盘
该伪指令位于源程序的最后一行。
2013-7-19 12
定义字节数据表伪指令DB
[标号:] DB 字节数据表
1000H 1001H
FEH
FCH
FAH 08H
如: ORG 1000H DB -2,-4,-6,8,10,18
0AH
12H
定义字数据表伪指令DW
[标号:] DW 字数据表 ORG 1400H DATA1:DW 324AH,3CH … …
+、- *、/、MOD
+、- SHL、SHR
AND、OR、XOR <、>、=、<>、 <=、>=
加、减 左移、右移
与、或、异或 比较运算符
5+4 即 9; 5-4 =即1 2 SHL 2即8;8 SHR 2 即 2
45H AND 0FH即05H
MOV A,X>8; 若X>8为真,则为MOV A,01H 若X>8为假,则为MOV A,00H
2013-7-19 20
;取x至累加器 ;x = 0,转NEXT ;否,保留符号位 ;x >0,转结束 ;x <0处理 ;X+05H送Y ;x = 0,20H送Y
【例4-3】根据R7的内容x(转移序号)转向相应的处理程序。 设R7内容为0~4,对应的处理程序入口地址分别为PP0~PP4。
取分支号,乘2
循环结束? Y 结束处理
MAIN:MOV MOV MOV LOOP:MOV INC DJNZ SJMP
R0,#30H A,#00H R7,#16 @R0,A R0 R7,LOOP $
;置初值 ; ; ;循环处理 ; ;循环修改,判结束 ;结束处理
结束
2013-7-19
24
【例4-5】将内部RAM起始地址为60H的数据串传送到外部RAM中 起始地址为1000H的存储区域,直到发现‘$ ‟字符停止传送。
2013-7-19 13
1400H 1401H 1402H 1403H
32H
4AH
00H 3CH
大端模式
定义常值为符号名伪指令EQU
符号名 EQU 常值表达式 LEN SUM BLOCK EQU EQU EQU CLR MOV MOV LOOP:ADD INC DJNZ MOV 10 21H 22H A R7,#LEN R0,#BLOCK A,@R0 R0 R7,LOOP SUM,A
指令助记符
是指令功能的英文缩写。
6
2013-7-19
操作数
数据:二进制(B) 十进制(D或省略D) 十六进制(H),注意A~F开头时要加“0” ASCII码,如 „A‟,‘1245‟ 符号:符号名、标号或“$”(PC的当前值) 表达式:由运算符和数据构成(见表4.1)
注释
英文分号“;”开头
5
2013-7-19
4.1.3 汇编语言的语句格式
Keil的汇编器A51可以识别的语句形式为:
[标号:] 指令助记符 [操作数1,] [操作数2,] [操作数3,] [;注释]
标号(即符号地址)
非数字字符开头,后跟字母、数字、“-”、“?” 等 不能用已定义的保留字(指令助记符、伪指令等) 后跟英文冒号“:”
30H,#2
;转移序号为2时,置功能号“2”于30H单
30H,#3
;转移序号为3时,置功能号“3”于30H单
30H,#4
;转移序号为4时,置功能号“4”于30H单
23
4.3.3 循环程序
(2种:先执行,后判断;先判断,后执行)
【例4-4】将内部RAM的30H至3FH单元初始化为00H。
开始
置初值
循环处理 循环修改 N
7
2013-7-19
表4.1
优先级
运 算 符


表达式及其结果示例 4*(5+6)即44 NOT 55H 即AAH; HIGH 1234H 即12H +5、-6 17 / 5 即3; 17 MOD 5 即2
() NOT、HIGH、 LOW
高 ↓ ↓ ↓ ↓ ↓ ↓ ↓ 低·
括号 取反、取高字节、取低 字节 正号、负号 乘、除(取商)、取余 数
2013-7-19
15
4.3 基本程序结构
一般不影响标志寄存器PSW的状态。
传送类指令有两大类
一般传送( MOV ) 特殊传送,如: MOVC MOVX PUSH、POP XCH、XCHD SWAP
2013-7-19
16
4.3 基本程序结构
4.3.1 顺序程序
(无分支、无循环)
开始
【例4-1】片内RAM的21H单
2013-7-19
2
4.1 程序编制的方法和技巧
4.1.1 程序编制的步骤 任务分析
明确任务:功能要求、技术指标 运行环境调研
算法设计
将实际问题转化为计算机处理的程序算法 算法比较与优化(内存需求与运行速度)
2013-7-19
3
流程描述
流程图符号
开始或结束符号 判断分支符号
“超级循环”框架
开始
初始化
2013-7-19
0040H A,21H A,#0FH A 20H,A A,22H A,#0FH 20H,A $
;取十位ASCII码 ;保留低半字节 ;移至高半字节 ;存于20H单元 ;取个位ASCII码 ;保留低半字节 ;合并到结果单元
18
4.3.2 分支程序
(单分支、双分支、多分支)
开始
【例4-2】设变量x以补码 的形式存放在片内RAM的 30H单元,变量y与x的关 系是:当x大于0时,y=x;当 x=0时,y=20H;当x小于0 时,y=x+5。编制程序,根 据x的大小求y并送回原单 元。
2013-7-19
R7,#3 JPNUM START DPTR,#TAB A,R7 A,R7 R3,A A,@A+DPTR A,R3 A A,@A+DPTR DPL,A DPH,R3 A @A+DPTR
;以转移序号3为例
;置分支入口地址表首址 ;乘2,调整偏移量
;取地址高字节,暂存于R3
;取地址低字节 ;处理程序入口地址低8位送DPL ;处理程序入口地址高8位送DPH
2013-7-19
8
4.2 源程序的编辑和汇编
目标程序的产生过程如下图:
汇编源文件 .ASM
汇编器 A51.EXE
目标文件 (浮动地址) .OBJ
调试目标文件 (绝对地址) 无扩展名
可烧写 目标文件 .HEX
.LST
连接器 BL51.EXE
转换器 OH51.EXE
编译器 C51.EXE .M51
写入芯片 仿真调试
工作任务符号 程序连接符号
循环扫描、处理
程序流向符号 程序流向符号
2013-7-19
4
4.1.2 程序编制的方法和技巧 强化模块观念
程序模块(主程序模块、各种子程序模块) 模块化优点:分块设计、便于阅读、调试方便
采用循环和子程序
使程序占用空间减少、结构清晰 循环初值和结束条件,避免“死机”现象 子程序的现场保护(注意栈平衡、寄存器内容) 对中断子程序还有注意保护PSW的内容
11
2013-7-19
4.2.2 伪指令
伪指令,也叫汇编命令。仅对汇编过程进行指示 伪指令无对应的单片机可执行代码
起始地址设定伪指令ORG
ORG 8000H 表达式通常为十六进制地址,例: START:MOV A,#30H ORG可多次使用,但地址值的顺序要由小到大 … … ORG 表达式
结束汇编伪指令END END
2013-7-19
26
4.4.1 现场保护与恢复 在主程序中实现(结构灵活)
PUSH 号) PUSH PUSH MOV LCALL POP POP POP PSW
ACC B PSW,#10H addr16 B ACC PSW
;保护现场( 含当前工作寄存器组
; ; ;切换当前工作寄存器组 ;子程序调用, ;恢复现场 ; ;含当前工作寄存器组切换
2013-7-19
27
在子程序中实现(程序规范、清晰)
SUB1:PUSH 号) PUSH PUSH MOV … … POP POP POP RET PSW ;保护现场( 含当前工作寄存器组
ACC ; B ; PSW,#10H ;切换当前工作寄存器组
B ACC PSW
;恢复现场 ; ;内含当前工作寄存器组切换
符号名为: 地址 常数 段名 字符串 寄存器名 位名 比较:标号只能是地址
2013-7-19 14
定义位地址为符号名伪指令BIT
符号名 BIT 位地址表达式 P1.0 0D7H ;将P1.0的位地址赋给符号名ST ;将位地址为D7H的位定义为符号名 如: ST BIT CF BIT
相关文档
最新文档