第3章80C51单片机C语言程序设计

合集下载

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

第三章 80C51单片机汇编语言程序设计(本科)
返回
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中间字节带低字节和进位相加

第3章 80C51单片机指令系统及程序设计

第3章 80C51单片机指令系统及程序设计
sjmploop313寻址方式313寻址方式符号含义rn表示当前选定寄存器组的工作寄存器r0r7ri表示作为间接寻址的地址指针r0r1data表示8位立即数即00hffh表示16位立即数即0000hffffhdata161符号约定addr16表示16位地址用于64k范围内寻址addr11表示11位地址用于2k范围内寻址direct8位直接地址可以是内部ram区的某单元或某专用功能寄存器的地址rel带符号的8位偏移量128127bit位寻址区的直接寻址位xx地址单元中的内容或x作为间接寻址寄存器时所指单元的内容将将后面的内容传送到前面去2寻址方式取得操作数的地址的方法叫做寻址方式
PUSH direct POP direct PUSH 0E0H POP 0D0H
直接地址
PUSH Acc POP PSW
第3章 80C51单片机指令系统及程序设计
单片机原理与应用
3.2.2 算术运算类指令(24条)
——普通加法指令(4条)
Rn ADD A , direct
@Ri #data
ADD ADD ADD ADD
#data16
addr16 addr11 direct Rel
Bit
(X) ←
位寻址区的直接寻址位
X地址单元中的内容,或X作为间接寻址寄存器时所指单元的内容 将 ← 后面的内容传送到前面去
第3章 80C51单片机指令系统及程序设计
单片机原理与应用
2、寻址方式
取得操作数的地址的方法叫做寻址方式。寻址 方式与计算机的存储空间结构是密切相关的。灵活运 用各种寻址方式,可以大大的提高程序的运行效率。 直接寻址 立即寻址 寄存器寻址 寄存器间接寻址 相对寻址 变址寻址 位寻址
位操作指令:2 17 条 四周期指令: 条

第3章 80C51单片机的指令系统及编程

第3章 80C51单片机的指令系统及编程

三、指令系统 ~
(1) 数据传送类指令(28条)
数据传送类指令是数据处理的最基本操作,在80C51 单片机中,数据传送类指令占得比重比较大。这类指 令一般不影响程序状态字寄存器PSW的状态。 数据传送类指令可分为:一般传送类指令、查表指
令、片外RAM访问指令、堆栈操作指令和交换指令。 片外RAM访问指令 RAM
CLR C CLR bit CPL C CPL bit SETB C SETB bit 对全部可位寻址区的每一位, 对全部可位寻址区的每一位, 均可直接进行清0、 均可直接进行清 、取反及 置1操作 操作
三、指令系统 ~
(5)位操作类指令(17条)
(3)位逻辑运算指令 条) )位逻辑运算指令(4条
1、无条件转移指令(4条) 无条件转移指令( 2、条件转移指令(8条) 条件转移指令( 3、子程序调用与返回指令(4条) 子程序调用与返回指令( 4、空操作指令(1条) 空操作指令(
三、指令系统 ~
(4)控制转移类指令(17条)
1、无条件转移指令(4条) 无条件转移指令(
三、指令系统 ~
(4)控制转移类指令(17条)
2、条件转移指令(8条) 条件转移指令( (1)累加器判0转移指令(2条) 累加器判0转移指令(
三、指令系统 ~
(2) 比 较 不 相 等 转 移 指 令 条 (4 条)
(4)控制转移类指令(17条)
三、指令系统 ~
(4)控制转移类指令(17条)
2、条件转移指令(8条) 条件转移指令( (3)减1不为0转移指令(2条) 不为0转移指令(
二、寻址方式 ~ 3、寄存器寻址
二、寻址方式 ~ 4、寄存器间接寻址
二、寻址方式 ~ 5、变址寻址
二、寻址方式 ~ 6 、相对寻址

80C51单片机的程序设计(完整版)

80C51单片机的程序设计(完整版)
助记符指令与机器指令是一一对应的所以用汇编语言编写的程序效率高占用存储空间小运行速度快而且能反映计算机的实际运行情况所以用汇编语言能编写出最优化的程序
第四章 80C51单片微机的程序设计 单片微机的程序设计
4.1概述 概述
4.1.1 汇编语言格式
1. 计算机语言 计算机语言——机器语言、汇编语言与高级语言 机器语言、 机器语言 程序就是为计算某一算式或完成某一工作的若干指令的有序 集合。计算机的全部工作概括起来, 集合。计算机的全部工作概括起来,就是执行这一指令序列的 过程。这一指令序列称为程序。为计算机准备这一指令前的过 过程。这一指令序列称为程序。 程称为程序设计。目前, 程称为程序设计。目前,可用于程序设计的语言基本上可分为 三种:机器语言、汇编语言和高级语言。 三种:机器语言、汇编语言和高级语言。 ⑴ 机器语言 在计算机中,所有的数符都是用二进制代码来表示的, 在计算机中,所有的数符都是用二进制代码来表示的,指令 也是用二进制代码来表示。这种用二进制代码表示的指令系统 也是用二进制代码来表示。 称为机器语言系统,简称为机器语言。 称为机器语言系统,简称为机器语言。直接用机器语言编写的 程序称为手编程序或机器语言程序。 程序称为手编程序或机器语言程序。
两种语句都由四个部分组成。其中每一部分称为域也称为字段, 两种语句都由四个部分组成。其中每一部分称为域也称为字段, 各字段之间用一个空格或字段定界符分隔, 各字段之间用一个空格或字段定界符分隔,常用的字段定界符有 冒号“ ”“逗号 逗号“ 和分号“ 冒号“:”“逗号“,”和分号“;”。其中方括号括起来的是 可选择部分。 可选择部分。
标号(也称为名字 标号 也称为名字) 域: 也称为名字 用来说明指令的地址。标号可以作为LJMP、AJMP、 用来说明指令的地址。标号可以作为 、 、 LCALL及ACALL等指令的操作数。 等指令的操作数。 及 等指令的操作数 • 在指令语句中,标号位于一个语句的开头位置,由字母和数 在指令语句中,标号位于一个语句的开头位置, 符组成, 字母打头,冒号“ 结束。 符组成 , 字母打头 , 冒号 “ : ” 结束 。 在 80C51单片微机的汇编 单片微机的汇编 语言中,标号中的字符个数一般不超过8个 若超过8个 语言中,标号中的字符个数一般不超过 个,若超过 个,则以前 面的8个为有效 后面字符不起作用。 个为有效, 面的 个为有效,后面字符不起作用。 • 不能使用本汇编语言中已经定义了的符号作标号, 不能使用本汇编语言中已经定义了的符号作标号,比如指令 助记符(如 及寄存器符号名称(如 助记符 如ADD) 、伪指令 (如END) 及寄存器符号名称 如PC) 。 如 • 一条语句可以有标号,也可以没有标号, 一条语句可以有标号,也可以没有标号,标号的有无取决于 程序中的其它语句是否需要访问该条语句。 程序中的其它语句是否需要访问该条语句。 伪指令语句与指令语句主要不同是在其名字后面没有冒号。 伪指令语句与指令语句主要不同是在其名字后面没有冒号。

第三章80C51单片机的程序设计

第三章80C51单片机的程序设计

程序设计概述
一、计算机程序及编程语言 3. 高级语言: 高级语言是一种面向问题或者面向过程的 语言。它不受具体机器的限制,近年来发展很 快,其中C语言尤为突出,在单片机与嵌入式 系统中得到了广泛应用。
§3.1
ቤተ መጻሕፍቲ ባይዱ程序设计概述
一、计算机程序及编程语言 3. 高级语言: 和汇编语言相比,用C语言来编程有很多优势。 比如对CPU的基本结构和指令集无须做过多的了 解,寄存器的分配和数据的寻址都由编译器去完 成,移植性好,有许多函数可供调用。
§3.2 汇编语言及其程序设计
一、 汇编语言 1.汇编语言语句的种类和格式 (2) 汇编语言语句的格式 ③ 第三字段是操作数域,是参与运算或进行 其它操作的数据或这些数据的地址。操作数 与操作码之间用空格分隔。 若操作数域是数据的直接或间接地址,则 必须满足寻址方式的规定。
§3.2 汇编语言及其程序设计
§3.1
程序设计概述
二、程序设计及程序结构 程序设计有时可能是一件很复杂的工作,需要 条理化,要有相应的步骤和方法。一般按以下三 步进行:
§3.1
程序设计概述
二、程序设计及程序结构 程序设计步骤: ① 分析题意,确定算法: 对复杂的问题进行具体的分析,找出合理 的计算方法及适当的数据结构,从而确定解题 步骤。这是能否编制出高质量程序的关键。
§3.2 汇编语言及其程序设计
一、 汇编语言 1.汇编语言语句的种类和格式 (2) 汇编语言语句的格式 伪指令语句的格式: 名字 定义符 参数 ;注释 两种语句都由四个部分组成,每一部分称为 域或字段,各字段之间用一个空格或字段定界符 分隔,常用的字段定界符有冒号“:”、逗号 “,”和分号“;”。
§3.2 汇编语言及其程序设计

第3讲 80C51的汇编语言程序设计

第3讲 80C51的汇编语言程序设计
;转移序号为4时,置功能号“4”于30H单元
22
3.3.3 循环程序
(2种:先执行,后判断;先判断,后执行)
【例3-4】将内部RAM的30H至3FH单元初始化为00H。 ORG 0040H 开始 MAIN:MOV R0,#30H ;置初始地址值 置初值 MOV A,#00H ; 循环处理 MOV R7,#16 ; 循环修改 LOOP:MOV @R0,A ;循环处理 N INC R0 ; 循环结束? Y DJNZ R7,LOOP ;循环修改,判结束 结束处理 SJMP $ ;结束处理 结束 END
5
2016/3/9
3.1.3 汇编语言的语句格式
Keil的汇编器A51可以识别的语句形式为:
[标号:] 指令助记符 [操作数1,] [操作数2,] [操作数3,] [;注释]
LOOP:MOV
A,#0DFH
;将DFH放入A中
◆ 标号(即符号地址)
▲非数字字符开头,后跟字母、数字、“ -” 、“?” 等 ▲不能用已定义的保留字(指令助记符、伪指令等) ▲后跟英文冒号“:”
2016/3/9
PP0 PP1 PP2 PP3 PP4 30H,#0 30H,#1 30H,#2
;转移序号为0时,置功能号“0”于30H单元 ;转移序号为1时,置功能号“1”于30H单元 ;转移序号为2时,置功能号“2”于30H单元
30H,#3
30H,#4
;转移序号为3时,置功能号“3”于30H单元
+、- *、/、MOD
+、- SHL、SHR
AND、OR、XOR <、>、=、<>、 <=、>=
加、减 左移、右移
与、或、异或 比较运算符
5+4 即 9; 5-4 =即1 2 SHL 2即8;8 SHR 2 即 2

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
这个过程实际上是设计数据结构的问题

第3章 80C51系列单片机指令系统

第3章  80C51系列单片机指令系统

变址寻址示图
内部ROM 内部RAM
3AH 0046H 65H
操作数
寄存器
目的地
3AH 0046H
A
DPTR PC
基址寄存器 0012H
变址寄存器 34H
MOVC A, @A+DPTR
• 6.位寻址方式

80C51具有位处理功能,可以对数据位进行操作。 位寻址指令中应直接使用位地址,它属于直接寻址方式, 因此与直接寻址执行过程基本相同,但参与操作的数据 是1位,而不是8位。
指令一般由两部分组成,即操作码(表示指令的操作功能)和 操作数(参加操作的数据或数据地址)。 •由于计算机只能识别二进制数,所以计算机的指令均由二进制 代码组成。为了阅读和书写方便,常把它写成十六进制形式, 通常称这样的指令为机器指令。
• 机器语言级指令格式: • 1、单字节指令:对于单字节指令有两种情况:一种是 操作码、操作数均包含在这一个字节之内;另一种情况 是只有操作码无操作数;格式为: • 操作码 • 如:“MOV A,R0”所对应的机器语言指令为“E8H”。 • 2、双字节指令:对于双字节指令,均为一个字节是操 作码,一个字节是操作数;格式为: • 操作码 操作数 • 如:“MOV A,20H”所对应的机器语言指令为“E520H”。 • 3、三字节指令:对于三字节指令,一般是一个字节为 操作码,二个字节为操作数;格式为: • 操作码 第一操作数 第二操作数 • 如:“MOV 20H,#46H”所对应的机器语言指令为 “E52046H”。()
• 为了便于记忆和使用,制造厂家对指令系统的每一条指令都 给出了助记符。助记符是根据机器指令不同的功能和操作对 象来描述指令的符号。由于助记符是用英文缩写来描述指令 的特征,因此它不但便于记忆,也便于理解和分类。这种用 助记符形式来表示的机器指令称为汇编语言指令。计算机的 指令一般用汇编语言指令来表示。 • 80C51汇编语言指令格式如下: • [标号:] 操作码 [目的操作数]

第3章+80C51单片机指令系统

第3章+80C51单片机指令系统

课程:单片机技术 教材:单片机基础
内部RAM单元地址为3AH中的内容65H(操作数)送A中。 指令执行过程: A←((R0))或 A←(3AH) 指令执行结果:(A)=((R0))=(3AH)=65H。 b)间址寄存器:R0、R1、DPTR、SP。 指令中应在间址寄存器名之前加前缀,SP除外。 c)寻址范围: 1)内部RAM低128单元,可使用R0,R1作间址寄存器,其
[标号:] 操作码助记符 [目的操作数],[源操作数] [;注释] (1)一条指令中标号、操作数、注释部分可有可无,但操作码 部分必不可少。 (2)标号是程序员根据编程需要给指令设定的符号地址,标号 由1~8个字符组成,不能用系统规定的寄存器名,也不能用指令 系统中的助记符名称,它的第一个字符必须是英文字,不能是数 字或其它符号,标号后必须用冒号“:”。
(5)变址寻址方式 a)变址寻址用于访问程序存储器中的常数或数据表格。 变址寻址即是以DPTR或PC作为基址寄存器,以累加器A为
变址寄存器,并以两者的内容相加形成16位地址作为目的操作数 地址,以达到访问程序存储器中的常数或数据表格的目的。
b)寻址范围:程序存储器空间。 c)指令数目:三条,均为一字节指令
课程:单片机技术 教材:单片机基础
MCS-51系列单片机的汇编语言指令系统共有111条指令,其中49 条为单字节指令,45条为双字节指令,17条为三字节指令。
从指令执行的时间来看,单机器周期指令64条,双机器周期指令 45条,四机器周期指令2条。
MCS-51单片机的指令系统共有33个功能,用汇编语言编程时,只 需44个助记符。
课程:单片机技术 教材:单片机基础
第3章 80C51单片机指令系统
教学基本要求: (1)、了解单片机的指令系统、编程语言等基本概念; (2)、熟悉单片机汇编语言指令格式中符号的意义; (3)、熟悉单片机汇编语言指令系统每条指令的功能; (4)、掌握单片机指令系统的7种寻址方式; (5)、掌握单片机指令系统每类指令的用法。

第三章 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

8 80C51的C语言程序设计

8 80C51的C语言程序设计
{ EA = 1; //开总中断 EX0 = 1; //开外部中断0 IT0 = 1; //选择电平负跳变触发方式, while(1)
{}
}
//外部中断T0中断函数 void int0(void) interrupt 0 using 0 {
P10=~P10; }
2019/10/7
29
定时计数器编程示例
R6、R7 R4、R5 R2、R3
long、float R4~R7 R4~R7
一般指针
R1、R2、R3 R1、R2、R3 R1、R2、R3
2019/10/7
26
固定存储器位置参数传递
SMALL模式下,在内部RAM中完成 COMPACT模式下,在外部RAM中完成 LARGER模式下,在外部RAM中完成
80C51单片机不采用堆栈传递参数。但C51提供一种模拟堆栈,从而支持可重 入函数的递归调用。
5.3 C51的库函数
常用的C51库函数参见C51的帮助文件
2019/10/7
27
6 C51编程实例
6.1 80C51内部资源的编程
中断服务函数示例
中断函数的定义形式 void 函数名(void)interrupt n [using m] { 函数体 }
C51程序开发过程
编写源程序 建立工程,加入源程序 编译生产目标程序 仿真调试、写存储器
2019/10/7
2
系统库
2019/10/7
C51源程序 C51编译器 浮动目标码模块
连接器 绝对定位目标码文件
编程器
列表文件 用户库
映像文件 硬件仿真器
3
1.2 C51程序结构
#include <reg52.h> #include <stdio.h> void delayms(unsigned); void main(void) { unsigned char i; P1=0x01; do { for (i=0;i<=7;i++)

单片机原理与接口技术第3章80C51系列单片机指令系统

单片机原理与接口技术第3章80C51系列单片机指令系统

寻址方式与相应的存储器空间
寻址方式 立即寻址 直接寻址 寄存器寻址 寄存器间接寻址 变址寻址 相对寻址 位寻址 程序存储器ROM 片内RAM低128字节,特殊功能寄存器SFR,程序存储器ROM 工作寄存器R0~R7,A,AB,DPTR,Cy 片内RAM低128字节(@R0、@R1、SP),片外RAM(@R0、 @R1、@DPTR) 程序存储器(@A+PC,@A+DPTR) 程序存储器当前PC−128 B~+127 B(字节)范围(PC+rel) 片内RAM的20H~2FH字节地址中的所有位和SFR中字节地址 能被8整除单元的位 存储器空间
6.相对寻址
相对寻址一般用于相对转移指令,程序转移目的地址=当 前PC值+相对偏移量rel。rel是一个带符号的8位二进制数, 用补码表示,其范围为−128B~+127B。
图3-5 SJMP 08H 相对寻址示意图
7.位寻址
位寻址是对内RAM和特殊功能寄存器中的可寻址位进行操作的寻址方式。 位寻址区包括专门安排在内部RAM中的两个区域,一是内部RAM的位寻 址区,地址范围是20H~2FH,共16个RAM单元,位地址为00H~7FH;二是 特殊功能寄存器SFR中有11个寄存器可以位寻址。
[注释]
1.标号:指令的符号地址 (1)标号不属于指令的必需部分,一般用于一段功能 程序的识别标记或控制转移地址。 (2)指令前的标号代表该指令的地址,是用符号表示 的地址。
一般用英文字母和数字组成,但不能用指令助记符、伪指令、特殊功能 寄存器名、位定义名和80C51在指令系统中用的符号“#”、“@”等,长度 以2~6个字符为宜,第一个字符必须是英文字母。
第三章 80C51系列单片机指令系统

第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 位寻址

第3章 80C51单片机的寻址方式和指令系统

第3章 80C51单片机的寻址方式和指令系统
(1)数据传送类指令(29条);
(2)算术运算类指令(24条);
(3)逻辑运算及移位类指令(24条); (4)控制转移类指令(17条); (5)位操作类指令(17条)。
6
本节内容
3.1.1 汇编语言指令格式 3.1.2 机器码的三种格式 3.1.3 指令中常用符号说明
7
3.1.1 汇编语言指令格式
3.4.1 加法指令 3.4.2 减法指令 3.4.3 乘、除法指令
3.5 逻辑运算及移位类指令(24条)
3.5.1 逻辑与运算指令 3.5.2 逻辑或运算指令
3
第2章:80C51系列单片机基本结构及原理
3.5.3 逻辑异或运算指令 3.5.4 累加器清零、取反指令 3.5.5 循环移位指令
目录
3.6 控制转移类指令(17条)
解:指令执行过程如图3-3,结果:(A)= 60H 。 指令在ROM中的机器码为E8H,指令对应的机器码是:E8H=1110 1000B,二进 制的后三位000就是隐含的R0寄存器的编码,如果是R7其编码为111。 由于寄存器在CPU内部,所以采用寄存器寻址可以获得较高的运算速度。
31
32
能实现这种寻址方式的寄存器有: (1)工作寄存器 R0~R7 (4组工作寄存器均可) (2)累加器A (注:使用A为寄存器寻址,使用ACC为直接寻址) (3)寄存器B (注:以AB寄存器对的形式出现时为寄存器寻址,单独出现
一条完整的汇编语言指令通常由标号、操作码、操作数 (一般包括目的操作数和源操作数)及指令的注释构成。 指令格式: [标号:] <操作码> [操作数] [,操作数][;注释]
说明:
①在一条指令中,方括号中的内容可有可无,尖括号中的内容 必须有。

(完整版)单片机,第三章答案

(完整版)单片机,第三章答案

思考题:【3-1】汇编语言与C语言哪种语言的可读性和可移植性强?在对速度和时序敏感的场合应该使用什么语言?对于复杂的单片机系统一般采用C与汇编混合编程的形式这句话对吗?【3-2】二进制机器语言与C和汇编语言两者之间是什么关系?用C或汇编编制的程序在ROM中是以编译后的二进制代码的形式存放这句话对吗?【3-3】80C51系列单片机指令的格式包含哪几个部分?各部分之间的间隔符是什么?四个部分中哪个部分是必须存在的,哪几个部分是可有可无的?标号的格式和代表的意义是?【3-4】80C51系列单片机有哪几种寻址方式?【3-5】80C51单片机中立即数是存放在ROM中还是RAM中?【3-6】判断下列说法是否正确。

(1)立即数寻址方式是被操作的数据本身就在指令中,而不是它的地址在指令中。

()(2)指令周期是执行一条指令的时间。

()(3)指令中直接给出的操作数称为直接寻址。

()(4)内部寄存器Rn(n=0~7)可作为间接寻址寄存器。

()【3-7】80C51单片机可以进行直接寻址的区域是?【3-8】80C51单片机可以进行寄存器寻址的范围是?【3-9】80C51单片机可以进行寄存器间接寻址的寄存器是?寻址的范围是?【3-10】在寄存器间接寻址方式中,其“间接”体现在指令中寄存器的内容不是操作数,而是操作数的()。

【3-11】80C51单片机变址寻址方式中可以作基址的寄存器是?可以作变址的寄存器是?@A+PC,@A+DPTR所找到的操作数是在ROM中对吗?【3-12】80C51单片机相对寻址改变的是PC的当前值,即改变的CPU执行指令的顺序这句话对否?【3-13】若访问特殊功能寄存器,只可以采用那种寻址方式?【3-14】若访问外部RAM单元,只可以使用哪种寻址方式?【3-15】若访问内部RAM单元,可使用哪些寻址方式?【3-16】若访问内外程序存储器,可使用哪些寻址方式?【3-17】80C51单片机可以进行位寻址的字节单元范围除11个可位寻址的特殊功能寄存器外还包括哪个区域?分别找出位地址是00H、08H、22H、7FH、D0H、E0H对应的字节地址?【3-18】已知(30H)=40H,(40H)=10H,(10H)=32H,(P1)=0EFH,试写出执行以下程序段后有关单元的内容。

第3章80C51指令系统

第3章80C51指令系统
第3章 80C51系列单片机指令系统
本章要点
❖ 80C51指令的基本格式 ❖ 80C51指令功能分类 ❖ 指令系统中的常用符号 ❖ 80C51指令系统的七种寻址方式 ❖ 数据传送类指令 ❖ 算术运算类指令 ❖ 逻辑运算及移位指令 ❖ 位操作类指令 ❖ 控制转移类指令
51系列单片机指令集含有111条指令
继续
功能
操作码助记符 操作数
备注
1. 数据
内部传送
MOV
传送
2.数 据交 换 3.栈 操作
外部数据 传送 程序存储 器传送 查表
字节交换 半字节交换
压入堆栈 弹出堆栈
MOVX MOVC
XCH XCHD PUSH POP
4 . A A高低4位互 SWAP
交换 换
data,Rn,@Ri,A #data DPTR #data ARn,@Ri,data data Rn,@Ri,data
这里,DPTR提供平方表的基地址,A的内容为偏移量。
【思考题】:为什么程序中将一些数据、常数存放在ROM中 ?这些数据是什么时候放到ROM中?
变址寻址示意图
累加器A
DPTR
ROM
02H
0300H
81
64
0300H (DPTR)
49
ALU
+ 02H (A)
36
0302H
25
16
9
0302H 4
1
MOVC A,@A+DPTR 0300H 0
在实际编程中,“rel” 通常用标号代替
例:2000H:SJMP 08H ;
原PC值为2000H;执行这条指令后的当前PC 值为2002H,rel为08H。2002H+08H=200AH,转 移目的地址为200AH,程序就跳转至200AH去执行 了。

80C51单片机汇编语言程序设计PPT

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 分支程序结构
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

interrupt n 定义中断函数
常用的中断源对应的中断号
中断源 中断号 外中断0 0 定时器0 1 外中断1 2 定时器1 3 串行口 4 定时器2 5
using
ห้องสมุดไป่ตู้
n确定中断服务函数所使用的工作寄存器组
【例3-3】中断函数定义示例
#include <reg51.h> sbit P10 = P1^0; void IntSrv(void)interrupt 0 { if(INT0==0) //测开关状态 { P10=!P10; while(INT0==0); } }
-128~127 0~255
-32768~32767 0~65535 -21474883648~21474883647 0~4294967295 ±1.75494E-38~±3.402823E+38
长整型
浮点型
位 型
访问SFR
bit
sbit sfr sfr16
1
1 8 16
0, 1
0, 1 0~255 0~65535
2016/6/27
3
含义:赋值
几点说明:
bit flag1 = 0;
bit定义位变量名字,编译器在位寻址区自 动分配该位变量; Sbit 声明位变量的名字和地址,地址是确 定的( SFR 区确定位、位寻址区变量的某确定 位 )。
sbit CY = 0xD7; 含义:声明
2016/6/27 4
数据起始字节置于高地址端
2016/6/27 2
C51数据类型表
数据类型 长度(位) 取值范围
字符型
整 型
signed char unsigned char
signed int unsigned int signed long unsigned long float
8 8
16 16 32 32 32
xdata 0x01
pdata 0xfe
code 0xff
2016/6/27
12
通用指针定义示例: 指针分区
指针
char型数据 char *xdata strptr; // 指针本身存于xdata 空间,它指向char型数据
int *data number; // 指针本身存于data 空间,它指向int型数据
3.1.3
C51的编译模式
编译模式默认的变量存储分区
编译模式 SMALL COMPACT LARGE 默认 存储分区 data pdata xdata 特 点
小模式。 变量默认在片内RAM。空间小,速度块。
紧凑模式。变量默认在片外RAM的页(256字节,页号 由P2口决定)。
大模式。 变量默认在片外RAM的64KB范围。空间大, 速度慢。
从而使DBYTE用于以字节形式对data区访问,可以写成:
与此类似: CBYTE用于以字节形式对code区进行访问; PBYTE用于以字节形式对pdata区进行访问; XBYTE用于以字节形式对xdata区进行访问。
CWORD、DWORD、PWORD和XWORD用于以字形式对 code区、data区、pdata区和xdata区进行访问。
3.3.2
C51函数定义的选项
编译模式
SMALL模式:变量默认在片内RAM; COMPACT模式:变量默认在片外RAM的页内; LARGE模式:变量默认在片外RAM的64KB范围。
reentrant定义为重入函数
ANSI C中,函数默认都是可重入的 C51函数默认是不可重入的,使用可重入函数会消耗较 多的存储器资源,应该尽量少用。
2016/6/27
7
未对变量存储分区定义时,C51编译器采用默 认存储分区。例如:
char var; //SMALL模式时,var定位于data存储区 //COMPACT模式时,var定位于pdata存储区 //LARGE模式时,var定位于xdata存储区
3.1.4
用_at_定义变量绝对地址
用关键字“_at_”定义变量存放的首地址 例如:
反汇编如下:
C:0x0000 C:0x0003 C:0x0004 C:0x0005 C:0x0007 C:0x0008 C:0x0009 C:0x000B C:0x000C C:0x000F C:0x0011 C:0x0013 C:0x0014 C:0x0015 C:0x0017 C:0x001A 020011 E4 FF 7430 2F F8 7655 0F BF10F6 80FE 787F E4 F6 D8FD 758107 020003 LJMP CLR MOV MOV ADD MOV MOV INC CJNE SJMP MOV CLR MOV DJNZ MOV LJMP C:0011 A 编译系统自动连接了 R7,A startup.a51生成代码 A,#0x30 一是将内部RAM的 A,R7 00H~7FH清0; R0,A 二是设置堆栈指针SP。 @R0,#0x55 R7 R7,#0x10,C:0005 C:000F 另:全局变量赋值时 R0,#0x7F 编译系统会自动连接 A init.a51生成代码 @R0,A R0,C:0014 SP,#0x07 C:0003
unsigned char bdata ibase; sbit mybitf = ibase^0;
3.1.2
C51数据的存储分区
对应单片机存储器
位寻址区,共128位。(亦能字节访问)
存储器类型 长度(位) bdata data idata pdata xdata code 1 8 8 8 16 16 片内 RAM 片外 RAM ROM
C51编译器提供了一组宏定义实现对80C51绝对地址的访问。 这组宏定义原型放在absacc.h文件中,形如: #define DBYTE ((unsigned char volatile data *(DBYTE)=0x55H;或 DBYTE[0]=0x55H;
2016/6/27 14
*) 0)
第3章 80C51单片机C语言程序设计
3.1 3.2
3.3 3.4
C51对标准C的扩展 C51的指针 C51的函数 C51与汇编程序的接口
2016/6/27
1
3.1 C51对标准C的扩展
C51扩展了ANSI C,以适应单片机的结构和特点。
3.1.1
C51的数据类型
数据是计算机操作的对象,包含常量和变量。 数据类型就是数据的格式,它决定数据的值域 范围、占用存储单元的个数及能参与哪种运算。 编写C51程序,先要确定数据类型、储存分区 应尽可能采用无符号格式(unsigned) C51中,多字节数据采用“大端对齐”格式
9
3.2 C51的指针
对于一个变量a,利用&a表示变量a的地址。则语句
p = &a;
表明把a的地址赋给了指针变量p,则“p指向了变量a”。 可以用*P表示变量a
指针变量
*P
指针变量的定义 数据变量 char *p; // 定义指针变量P p = 30H ; // 指针变量赋值,30H为片内RAM地址 x = *p; // 30H单元的内容送给变量x
直接寻址,共128字节。 间接寻址,共256字节。 分页间址,共256字节。(MOVX @Ri) 间接寻址,共64k字节。(MOVX @DPTR) 间接寻址,共64k字节。(MOVC A,@A+DPTR)
经常使用的变量应该置于片内RAM中,要用bdata、data、 idata来定义 不常使用的变量或规模较大的变量应该置于片外 RAM中, 要用pdata、xdata来定义
由于指向对象的存储空间在编译时无法确定(运行时确 定),因此必须生成通用代码以保证对任意空间的对象进 行存取。所以通用指针生成的代码速度较慢。
2016/6/27
13
3.2.3
例如:
利用指针进行绝对地址访问
unsigned char data *p; p=0x40 ; *p=0x55; //数据0x55送入内部RAM的0x40单元
3.3.3
C51的库函数
常用的C51库函数参见附录B.2
【例3-4】C51库函数调用示例。 #include “intrins.h” //在intrins.h中有对函数_nop_( )的定义 void { Delay(void) int i=5000; while(i--)_nop_( ); }
【例3-5】C51标准输入输出函数调用示例。 在调试状态: #include <reg51.h> View #include <stdio.h> Serial Windows void InitSPort(void) UART #1 { SCON=0x50; //串口方式1,允许接收 TMOD=0x20; //T1方式2(自动重装) TH1= 0xFD; //波特率9600 void main(void) TR1 =1; //启动T1 { TI =1; //发送中断置1 InitSPort(); } printf("Hello World \n"); while(1); 标准I/O的重定向! }
2016/6/27
19
【例3-2】延时nMs函数示例(晶振11.0592MHz)。
void DelayMs( unsigned int n ) //延时函数 { unsigned char j; while (n- -) { for (j = 0; j < 113; j++); } } 调试:Registers窗口中的sec值。
3.2.2
未定义数据存储分区的指针---通用指针
通用指针。
定义时未指定所指向的数据的存储分区 。也称
通用指针占3个字节 第一字节存放该指针的默认存储器类型编码(见表) 第二字节存放该指针的高位地址偏移量 第三字节存放该指针的低位地址偏移量 存储器类型编码
相关文档
最新文档