第4章 MCS-51程序设计
微机原理与应用-04 汇编语言
例:把片外RAM2200H单元中的数送入片内70H单元中。
BEGIN:MOV
MOV MOVX MOV
13
DPTR,#2200H ;(DPTR)=2200H
R0,#70H A,@DPTR @R0,A
南京航空航天大学机电学院机械电子工程系 2005年
《微机原理及应用》课件
1、标号字段
后必跟“ :”号; 首字符必是字母,由1~8个ASCII 码 字符组成; 同一标号在一个程序中只能定义一次; 不能使用指令助记符、伪指令、寄存器 的符号名称; 一条语句的标号可有可无,取决于本程 序的其他语句是否访问该条语句。
《微机原理及应用》课件
(2) 机器汇编
汇编语言 源程序
汇编
机器语言 目标程序
汇编程序
用机器汇编,方便快捷,并能在汇 编过程中发现语法错误。
8
南京航空航天大学机电学院机械电子工程系 2005年
《微机原理及应用》课件
Medwin汇编环境示例
9
南京航空航天大学机电学院机械电子工程系 2005年
《微机原理及应用》课件
《微机原理及应用》课件
2. 汇编语言
面向机器的符号语言,指令用助记符表示; 指令直接访问CPU的寄存器、存储单元和 I/O端口,响应速度快,程序的存储空间 利用较高; 汇编语言是面向机器的语言,因此使用者 必须对机器的硬件结构和指令系统比较熟 悉。
5
南京航空航天大学机电学院机械电子工程系 2005年
33
南京航空航天大学机电学院机械电子工程系 2005年
《微机原理及应用》课件
(2)子程序的参数传递
a. 利用寄存器(R0~R7和A)传递参数
MCS-51单片机的指令系统
整理ppt
12
4.2 寻址方式
51汇编语言有42种操作码助记符,用来描述33种操作功 能。一种操作码可以使用一种以上的数据类型,又由于 助记符规定了其访问的存储器空间,所以一种功能可能 有几个助记符(如MOV、MOVX、MOVC)。功能助记 符与寻址方式组合,得到111条指令。
整理ppt
13
4.2 寻址方式
1)无操作数单字节指令
这类指令只有操作码字段,操作数隐含在操作码中。
例如:INC DPTR
指令码为 :
数据指针隐含其中
整理ppt
6
指令的组成及字节数
2)含有操作数寄存器号的单字节指令 单字节的指令码由操作码字段和指示操作数所 在寄 存器号的字段组成。 例如;MOV A,Rn 指令码为:
其中,rrr为寄存器Rn的编号
整理ppt
2
4.1 指令和指令程序
“指令”: CPU能直接识别和执行的命令。 指令系统:CPU所能执行的全部指令的集合。
与CPU的能力、使用的方便灵活性密切相关。 指令的记忆问题?指令本身是二进制代码。
例如以下的51单片机指令:
把10放到累 740AH 加器A中 为பைடு நூலகம்便于记忆 指令助
A加20,结 果仍在A中
整理ppt
8
指令的组成及字节数
3.三字节指令(17条)
这条指令的指令码的第1字节为操作码;第2和第3字节为 操作数或操作数地址,有如下3类。 1)16位数据 例如:MOV DPTR,#26ABH 指令码为:
整理ppt
9
指令的组成及字节数
2)8位地址和8位数据 例如:MOV 74H,#0FFH 指令码为:
在MCS-51指令中,若操作数是以R0~R7来表示操作数时, 就属于寄存器寻址方式。
单片机原理及应用教程(C语言版)-第4章 单片机C语言及程序设计
4.3.2 C51变量的存储类型
三、外部存储
外部(存储)变量:用extern声明的变量为外 部变量,是在其它文件定义过的全局变量。 用 extern声明后,便可以在所声明的文件中使用。
需要注意的是:在定义变量时,即便是全局变 量,也不能使用extern修饰。
4.3.2 C51变量的存储类型
四、寄存器存储
动态(存储)变量:用auto定义的为动态变量, 也叫自动变量。
作用范围:在定义它的函数内或复合语句内部 当定义它的函数或复合语句执行时,C51才为 变量分配存储空间,结束时所占用的存储空间释放。 定义变量时,auto可以省略,或者说如果省略 了存储类型项,则认为是动态变量。动态变量一般 分配使用寄存器或堆栈。
“C51”概念:为了与ANSI C区别,把“单片 机C语言”称为“C51”,也称为“Keil C”。
4.1.1 C语言编程的优势
在编程方面,使用C51较汇编语言有诸多优势: 1)编程容易 2)容易实现复杂的数值计算 3)容易阅读与交流 4)容易调试与维护 5)容易实现模块化开发 6)程序可移植性好
本 无符号整型 unsigned int 2字节 0~65535 有符号整型 signed int 2字节 -32768~32767
类 无符号长整型 unsigned long 4字节 0~4294967295
型 有符号长整型 signed long 4字节 -2147483648~2147483647
MCS-51单片机有四个存储空间,分成三类, 它们是片内数据存储空间、片外数据存储空间和 程序存储空间。
MCS-51单片机有更多的存储区域:由于片内 数据存储器和片外数据存储器又分成不同的区域, 所以单片机的变量有更多的存储区域。
第四章 单片机C51简介
五、C51常用运算符
赋值运算符、算数运算符、关系运算符、 逻辑运算符、位运算符、条件运算符….
位运算符 位运算是按位对变量进行运算的,但并不改变参与 运算的变量的值。 C51 中位运算符只能对整数进行操作,不能对浮点 数进行操作。C51中的位运算符有: & 按位与 ︱ 按位或 ∧ 按位异或 ~ 按位取反 << 左移 >> 右移
//声明单个位
2. C51数据存储类型
存储类型 data 与存储空间的对应关系 直接寻址片内数据存储区,访问速度快(128字节) 可位寻址片内数据存储区,允许位与字节混合访问(16字 节) 间接寻址片内数据存储区,可访问片内全部RAM地址空 间(256字节) 分页寻址片外数据存储区(低256字节) 寻址片外数据存储区(64K字节) 寻址代码存储区(64K字节)
bit bdata flags;
float idata x,y,z;
unsigned int pdata dimension; unsigned char xdata vector[10][4][4];
unsigned char code a[]={0x00,0x01};
P78 例4-2、4-3(自行看书)
•sfr16 16位特殊功能寄存器
sfr16占用两个内存单元,值域为 0~65535。sfr16和sfr 一样用于操作特殊功能寄存 器,不同的是它用于操作占两 个字节的寄存器,如定时器T2。 sfr16 T2=0xCC; //定义8052定时器2,低8位地址为
// T2L=CCH,高8位T2H=CDH
指针
当定义一个指针变量时,若未指定它所指向的 对象的存储类型,则该指针变量被认为是一般 指针; 指定了它所指对象的存储类型,则该指针被认 为是基于存储器的指针。
单片机原理与接口技术第版李晓林
30.06.2020 单片机原理与接口技术(第3版).李晓林.电子工业出版社
返回目录
3
本章目录
4.4 C51结构化程序设计 4.4.1 顺序结构程序 4.4.2 选择结构程序 4.4.3 循环结构程序
4.5 C51程序设计实例 4.5.1 查表程序 4.5.2 单片机内/外部资源应用
程序设计 4.5.3 C51语言和MCS-51汇编
2) 程序由若干函数组成,具有良好的模块化结构、可移植 性好、便于项目维护管理;
3) 有丰富的子程序库可直接引用,从而大大减少用户编程 工作量,提高编程效率;
4) 与汇编语言交叉编程。用汇编语言编写与硬件有关的程 序,用C51编写与硬件无关的运算程序,充分发挥两种语言的长 处,提高开发效率。
30.06.2020 单片机原理与接口技术(第34.2.1 标识符和关键字
----关键字列表
30.06.2020 单片机原理与接口技术(第3版).李晓林.电子工业出版社
返回目录
13
4.2.2 数据类型
----C51的数据类型
C51具有ANSI C的所有标准数据类型。
其基本数据类型包括:char、int、short、 long、float和double。
关键字则是编程语言保留的特殊标识符,它们具有固定的 名称和含义,在程序编写中不允许将关键字另做他用。C51中的 关键字除了有ANSI C标准的32个关键字外,还根据MCS-51单 片机的特点扩展了相关的关键字。C51关键字如表5-1所示。
在C51的文本编辑器中编写C程序,系统可以把保留关键字 以不同颜色显示,如int关键字的默认颜色为天蓝色。
30.06.2020 单片机原理与接口技术(第3版).李晓林.电子工业出版社
第四章-汇编语言程序的设计
第四章汇编语言程序设计本章的汇编语言程序设计的主要容有:汇编语言程序设计概述、汇编语言程序的结构形式、汇编语言的伪指令。
(一个单片机应用系统和其它计算机系统一样,在完成一项具体工作的时候,它要按照一定的次序,去执行操作,这些操作实际上就是由设计人员,以单片机能够接受的指令编制的程序,那么无论计算机也好,单片机也好,实际上编制程序的过程,就是用计算机来反映设计者的编程思想,那么这一章中,我们将向大家介绍怎样使用单片机指令系统来编制一些应用程序。
在介绍之前,我们还是来学习汇编语言的一些基础知识)4.1 汇编语言程序设计概述1、计算机的汇编语言以助记符表示的指令,每一条指令就是汇编语言的一条语句。
(汇编语言程序设计实际上就是使用汇编指令来编写计算机程序。
汇编语言的语句有严格的格式要求)2、汇编语言的语句格式MCS-51汇编语言的语句格式表示如下:[<标号>]: <操作码> [<操作数>]; [<注释>]标号:指令的符号地址,有了标号,程序中的其它语句才能访问该语句。
①标号是由1~8个ASCII字符组成,但头一个字符必须是字母,其余字符可以是字母、数字或其它特定字符。
②不能使用汇编语言已经定义了的符号作为标号,如指令助记符、伪指令记忆符以及寄存器的符号名称等。
(同一个标号在程序中只能定义一次,不能重复定义;一条语句可以有标号,也可以没有标号,所以是否有标号,取决于程序中是否需要访问该语句。
)操作码:规定语句执行的操作容,操作码是以指令助记符表示的,是汇编指令格式中唯一不能空缺的部分。
操作数:给指令的操作提供数据或地址。
注释:是对语句或程序段的解释说明。
(在单片机中,这四个部分怎么加以区分呢?使用分界符)分界符(分隔符):用于把语句格式中的各部分隔开,以便于编译程序区分不同的指令段。
冒号(:)用于标号之后空格()用于操作码和操作数之间逗号(,)用于操作数之间,分割两个以上的操作数分号(;)用于注释之前。
第4章 MCS-51单片机汇编语言程序设计
程序清单:
送转移地址序号
A,R3 ;取序号 A ;序号乘2 DPTR, #JTAB ;32个子程序 首地址送DPTR JMP @A+DPTR ;根据序号转移 JTAB: AJMP ROUT00 ;32个子程序首地址 AJMP ROUT01 … MP: MOV RL MOV AJMP ROUT31
第 四 章 MCS-51 单 片 机 汇 编 语 言 程 序 设 计
【例4-1】
双字节二进制数求补。
程序说明:对R3(高8位)、R2(低8位)中的二进制定 点数取反加1即可得到其补码。
开始
程序清单:
BINPL:MOV A,R2 CPL A ADD A,#01H MOV R2,A MOV A,R3 CPL A ADDC A,#00H MOV R3,A RET ;低位字节取反 ;加1 ;低位字节补码送R2 ;高位字节取反 ;加进位 ;高位字节补码送R3
散转生成正确偏移号
置换指令地址表首址
转入R3指示的程序
AJMP
……
AJMP
第 四 章 MCS-51 单 片 机 汇 编 语 言 程 序 设 计
3.循环程序
包括:循环初始化、循环处理、循环控制
开始 置初值 循环体 循环结束? Y 循环修改 N 循环体 循环结束? N Y 结束 循环修改 结束 开始 置初值
;调用查表子程序 ; 暂存R1中 ;调查表子程序 ;平方和存A中 ;等待
取第一个数→A 调查表子程序 结果存入R1 取下一个数→A 调查表子程序 两数平方相加 存结果
子程序清单:
SQR: INC A ;加RET占的一个字节 MOVC A,@A+PC ;查平方表 RET TAB: DB 0,1,4,9,16 DB 25,36,49,64,81 END
MCS-51汇编语言程序设计
01:31
单片机原理与接口技术(第2版).李晓林.电子工业出版社
返回目录
2
本章目录
4.2.1 顺序结构程序 4.2.2 分支结构程序 4.2.3 循环结构程序 4.2.4 查表程序 4.2.5 子程序 4.3 汇编语言程序设计实例 习题与思考题
4.1 程序设计概述 4.1.1 程序设计的步骤 4.1.2 程序设计的方法 4.1.3 汇编语言的规范 4.1.4 汇编语言程序编辑和 汇编 4.2 结构化程序设计方法
01:31
单片机原理与接口技术(第2版).李晓林.电子工业出版社
返回目录
15
4.1.3 汇编语言的规范
(5)定义字伪指令 )定义字伪指令DW
[标号:] 标号: DW 16位二进制数表 16位二进制数表
---伪指令 伪指令DW 伪指令
功能: DW 指令是在程序存储器 ( ROM ) 中 , 从指定的 指令是在程序存储器( 功能 : DW指令是在程序存储器 ROM) 地址单元开始,定义若干个16位数据 一个16位数 位数据。 地址单元开始,定义若干个16位数据。一个16位数 要占两个存储单元,其中高8位存入低地址单元, 要占两个存储单元, 其中高 8位存入低地址单元, 位存入高地址单元。 低8位存入高地址单元。 例如: 例如: ORG 1100H 1100H TAB : DW 1234H, 0ABH 10 1234H, 以上伪指令经汇编以后, 将对从1100H 以上伪指令经汇编以后 , 将对从 1100H 开始的若 干内存单元赋值。 干内存单元赋值。
01:31
单片机原理与接口技术(第2版).李晓林.电子工业出版社
返回目录
16
4.1.3 汇编语言的规范
例如:ORG 1100H 例如: TAB :DW 1234H, 0ABH 10 (1100H)=12H (1101H)=34H (1102H)=00H (1103H)=ABH (1104H)=00H (1105H)=0AH
第4章 MCS-51汇编语言程序设计
n
第4章 MCS-51汇编语言程序设计
当i=n时,yn+1即为所求n个数据之和y。这种形式的 公式叫递推公式。在用单片机的汇编程序实现时,yi 是一个变量,这可用式(4-3)表示:
0 y 1 i y xi yi i 1 i
in
根据这个公式,可以画出程序框图,如图4.1所示。
第4章 MCS-51汇编语言程序设计
4.3.1 程序总体结构 • MCS-51单片机的汇编程序由主程序、若干个子程序、中 断服务程序等组成。 • 由于MCS-51单片机复位后PC=0000H,也就是程序从程 序存储器的0000H开始执行,由于MCS-51单片机程序存 储器的0003H、000BH、0013H、001BH、0023H分别是 外部中断0、定时器0、外部中断1、定时器1、串行口的中 断入口地址,所以主程序开始的地址一般安排在0030H之 后的程序存储器中。一般在程序存储器的0000H开始放一 条无条件转移指令(AJMP、LJMP、SJMP)转到主程序的 开始处。如果要使用某些中断,则在相应的中断入口地址 也放一条无条件转移指令,多数情况下用LJMP指令,这 是因为使用LJMP指令可使中断服务程序在单片机程序存 储器中的任意位置编写。图4.3是MCS-51单片机的程序总 体结构图。
第4章 MCS-51汇编语言程序设计
2. 汇编 • 汇编语言必须经过机器汇编或人工汇编才能得到相应的机 器程序,即目标程序,以供单片机识别和执行。由于人工 汇编工作量大,容易出错,现已不用。机器汇编一般是在 PC上利用一些汇编软件进行。目前几乎所有的单片机仿 真器配的开发软件都有汇编程序,在源程序编写完成后使 用汇编功能菜单即可进行对源程序汇编。在汇编时若发现 源程序有语法错误或跳转超出范围等情况,系统会将错误 显示给用户。用户在改正错误后,需再对源程序进行汇编, 直到源程序完全没有语法错误。此时汇编程序会生成与其 对应的目标文件。一般情况下是生成HEX(十六进制)和 BIN(二进制)文件。没有语法错误并不等于程序开发成功, 一般来说还要对程序进一步调试、修改,运行无误后,程 序才算最终完成。这时才可将目标文件写入到程序存储器 中。
51单片机汇编语言程序设计
单片机原理与接口技术
中北大学电子科学技术专业
返回目录
8
4.1.3 汇编语言的规范
2.伪指令
---伪指令 伪指令ORG 伪指令
MCS-51系列单片机的常用伪指令有 ORG、 MCS-51系列单片机的常用伪指令有:ORG、 系列单片机的常用伪指令有: END、EQU、DB、DW、DS和BIT等 END、EQU、DB、DW、DS和BIT等。
23:24
单片机原理与接口技术
中北大学电子科学技术专业
返回目录
9
4.1.3 汇编语言的规范
(2)汇编结束伪指令END 汇编结束伪指令END
格式:[标号:] 格式: 标号:] END [表达式] [表达式 表达式]
---伪指令 伪指令END 伪指令
功能:结束汇编。汇编程序遇到END伪指令后即结束汇 功能:结束汇编。汇编程序遇到END伪指令后即结束汇 编。处于END之后的程序,汇编程序不予处理。 处于END之后的程序 汇编程序不予处理。 之后的程序, ORG 2000H 如: START: MOV A, #00H … END START ;表示标号START开始的程序段结束。 表示标号START开始的程序段结束 开始的程序段结束。
以上伪指令经汇编以后, 以上伪指令经汇编以后,将从 1010H开始的若干内存单元赋值。 1010H开始的若干内存单元赋值。 开始的若干内存单元赋值
23:24
单片机原理与接口技术
中北大学电子科学技术专业
返回目录
12
4.1.3 汇编语言的规范
(5)定义字伪指令 )定义字伪指令DW
[标号:] 标号: DW 16位二进制数表 16位二进制数表
(7)位定义伪指令BIT 位定义伪指令BIT
第4章 MCS-51单片机汇编语言程序设计(2)
XCH A,R3 INC A MOVC A,@A+DPTR MOV DPL,A MOV DPH,R3 CLR A JMP @A+DPTR TAB DW DW A0 A1
…………. DW AN
INC
DPTR
MOVX A,@DPTR SUBB A,R7 JNC XCH BIG1 A,R7
BIG0:INC DPTR
实现程序如下: 实现程序如下
START:CLR C : MOV DPTR,#ST1 , MOVX A,@DPTR , MOV R7,A
MOVX @DPTR,A RET BIG1:MOVX A,@DPTR SJMP BIG0
实现程序如下: 实现程序如下 MOV 30H, 20H ANL 30H,#00011111B MOV A,21H SWAP A RL A ANL A,#11100000B ORL 30H,A
第4章 MCS-51单片机汇编语言程序设计
实现程序如下: 实现程序如下 例 A,@R1 ADDC4.3 做3个字节的 无符号的加法. 无符号的加法.设一个加 MOV R0,#52H , MOV @R0,A 数存放在内部RAM 50H、 RAM的 数存放在内部RAM的50H、 MOV R1,#55H , DEC R0 51H、52H单元中 单元中, 51H、52H单元中,另一 DEC R1 RAM的53H、 MOV A,@R0 个加数存放在RAM 个加数存放在RAM的53H、 MOV A,@R0 54H、55H单元中 单元中, 54H、55H单元中,相加 ADD A,@R1 结果存内部RAM的50H、 结果存内部RAM的50H、 RAM ADDC A,@R1 51H、52H单元 单元, 51H、52H单元,均从高 MOV @R0,A 字节开始存放, 字节开始存放,进位存放 MOV 00H,C 在位寻址区的00H位中。 00H位中 在位寻址区的00H位中。 MOV @R0,A DEC DEC R0 R1
MCS51单片机指令系统与汇编语言程序设计
MCS51单片机指令系统与汇编语言程序设计MCS-51是一种非常常见的8位单片机系列,该系列包括了多种型号的单片机,如Intel 8051、8031、8052等。
MCS-51单片机指令系统是一组用于驱动该系列单片机的指令集,汇编语言程序设计是利用这些指令来编写程序。
MCS-51单片机指令系统包含了多种指令,可以执行诸如数据传输、算术逻辑运算、控制和数据访问等功能。
这些指令通过各种不同的寻址模式来操作数据,包括立即寻址、寄存器寻址、直接寻址、间接寻址和寄存器间接寻址等。
不同的寻址模式和指令组合可以实现不同的功能。
汇编语言程序设计通过将人类可读的汇编指令翻译成机器可执行的二进制指令来编写程序。
在MCS-51单片机中,汇编指令由操作码和操作数组成。
操作码指定了所执行的操作,如数据传输、算术运算或控制指令。
操作数则指定了指令要操作的数据。
下面以一个简单的例子来说明MCS-51单片机指令系统和汇编语言程序设计的基本原理。
假设我们要编写一个程序,将两个寄存器中的数据相加,并将结果存储到第三个寄存器中。
首先,我们需要将第一个寄存器的值加载到累加器A中,这可以通过MOV指令实现。
MOV指令的操作码为01,操作数为两个寄存器的地址。
例如,MOVA,R0将R0的值加载到A中。
接下来,我们需要将第二个寄存器的值加载到B寄存器中,同样可以使用MOV指令。
MOVB,R1将R1的值加载到B中。
然后,我们可以使用ADD指令将A和B中的值相加,并将结果存储到A中。
ADD指令的操作码为04,操作数为A的地址。
例如,ADDA将累加器中的值与A寄存器中的值相加,并将结果存储到A中。
最后,我们可以使用MOV指令将A中的结果移动到第三个寄存器中,例如,MOVR2,A将A的值移动到R2中。
通过组合使用这些指令,我们可以实现将两个寄存器中的值相加并存储到第三个寄存器中的功能。
总结来说,MCS-51单片机指令系统和汇编语言程序设计是一种用于编程控制该系列单片机的方式。
内容4_MCS-51汇编语言程序设计
DA A
A.A=21 CY=1 OV=0
B.A=21 CY=1 OV=1
C.A=21 CY=0 OV=0
D.以上都不对
30
MCS—51指令系统中,执行下列指令后,结果为:()。
ORG 40H
DS 10H
A.将40H存入10H
B.从40H地址单元开始空10H个连续存储单元
C.将40H地址的内容存入10H
ADD A,#02H
MOV DPDR,#0050H
MOVC A,@A+DPDR
MOV @R0,A
SJMP $
ORG 0050H
BAO:DB 00H,0888H,0BH,6H,09H,0CH
END
A.00H
B.0BH
C.06H
D.0CH
29
MCS—51指令系统中,执行下列指令后,其结果为()。
MOV A,#68
47
假定(A)=83H,(R0)=17H,(17H)=34H,执行以下程序段:
ANL A,#17H
ORL A,17H
XRL A,@R0
CPL A
后,A的内容为:()。
A. 0FCH
B. 03H
C. 7AH
D. C8H
48
执行返回指令时,返回的断点是:()
A.调用指令的首地址
B.调用指令的末地址
C.调用指令下一条指令的首地址
C、计算机中的机器码就是如干二进制数。
D、机器语言是单片机可执行的语言。
3
设累加器A中为无符号数,B中数为2,下列指令中作用相同的是:()。
A. ADD A,0E0H
Bห้องสมุดไป่ตู้ MUL AB
mcs-51第四章答案汇编语言程序设计
mcs-51第四章答案汇编语言程序设计第四章汇编语言程序设计1 题若晶振为12MHz,试编制延时2ms和1s子程序。
答:延时2ms:DELY: MOV R7, #10DLY0: MOV R6, #98NOPDLY1: DJNZ R6, DLY1DJNZ R7, DLY0RET延时1s:DELY: MOV R0, #50LP11: MOV R1, #100LP22: MOV R2, #100LP33: DJNZ R2, LP33DJNZ R1, LP22DJNZ R0, LP11RET4 题试求20H和21H单元中16位带符号二进制补码数的绝对值,并送回20H和21H单元,高位在先,低位在后。
答:方法一:先判断符号位,若为0则不作任何处理(因为正数的补码数与原数相同,而0的补码数就是0)。
若符号位为1,则用0减去该数即可。
编程如下:ORG 1000HMOV A, 20HJNB ACC.7, DONECLR CCLR ASUBB A, 21HMOV 21H, ACLR ASUBB A, 20HMOV 20H, ADONE: SJMP $END方法二:可用变反加“1”来完成。
ORG 1000HMOV A, 20HJNB ACC.7, DONECPL AMOV 20H, AMOV A, 21HCPL AMOV 21H, ACLR CMOV A, 21HADD A, #1MOV 21H, AMOV A, 20HADDC A, #0MOV 20H, ADONE: SJMP $END5题试求内部RAM 30~37H单元8个无符号数的算术平均值,结果存入38H单元。
答:方法一:相加后和放在R3:38H中,然后将结果整体右移3位,得数放在38H单元中。
ORG 1000HSTART: MOV R7, #07HMOV R3, #00HMOV A, 30HMOV R0, #31HLOOP: ADD A, @R0JNC NEXTINC R3NEXT: INC R0DJNZ R7, LOOPMOV 38H, AMOV R7, #3LOOP1: CLR CMOV A, R3RRC AMOV R3, AMOV A, 38HRRC AMOV 38H, ADJNZ R7, LOOP1SJMP $END方法二:相加后和放在R3:38H中,然后将R3中的数乘以25,将38H中的数除以23,然后将两个结果相加,放入38H单元中。
单片机原理及应用 第4章 MCS-51单片机系统的扩展技术
2.数据存储器典型扩展电路
6264的地址范围为:0000H~1FFFH。
[例题] 在上页图的数据存储器扩展电路中,将片内RAM 以50H单 元开始的16个数据,传送片外数据存储器0000H开始的单元中。
程序如下:
ORG 1000H MOV R0, #50H MOV R7, #16 MOV DPTR, #0000H AGAIN: MOV A, @R0 MOVX @DPTR, A INC R0 INC DPTR DJNZ R7, AGAIN RET END ; 数据指针指向片内50H单元 ; 待传送数据个数送计数寄存器 ; 数据指针指向数据存储器6264的0000H单元 ; 片内待输出的数据送累加器A ; 数据输出至数据存储器6264 ; 修改数据指针 ; 判断数据是否传送完成
4.2.1
程序存储器扩展
单片机内部没有ROM,或虽有ROM但容量太小时,必须扩 展外部程序存储器方能工作。最常用的ROM器件是EPROM 1. 常用EPROM程序存储器 EPROM主要是27系列芯片,如:2764(8K)/27128(16K) /27256(32K)/27040(512K)等,一般选择8KB以上的芯片作为 外部程序存储器。
4.2.3 MCS-51对外部存储器的扩展
下图所示的8031扩展系统中,外扩了16KB程序存储器(使用两片 2764芯片)和8KB数据存储器(使用一片6264芯片)。采用全地址译码方 式,P2.7用于控制2―4译码器的工作,P2.6, P2.5参加译码,且无悬空地 址线,无地址重叠现象。 1# 2764, 2# 2764, 3# 6264的地址范围分别为:0000H~1FFFH, 2000H~3FFFH, 4000~5FFFH。
MOV DPTR, #7FFFH ; 数据指针指向74LS377 MOV A, 60H ; 输出的60H单元数据送累加器A MOVX @DPTR, A ; P0口将数据通过74LS377输出
第4章 单片机汇编语言程序设计
功能:从标号指定的地址单元开始,将8位二进制 数据按顺序依次存入形成数据表。数据表可以是 一个或多个字节数据、字符串或表达式,各项数 据用“,”分隔,一个数据项占一个字节单元。
ORG 1000H
TAB:DB -2,-4,100,30H,‘A’, ‘C’
用单引号括起来的字符存其ASCII码,负数存其 补码。
第4章 单片机汇编语言程序设计
4.1.2 伪指令
1.设置起始地址伪指令 ORG 格式: [标号:] ORG nn 该指令总是出现在每段源程序或数据块的开始。
汇编时,nn确定了后面第一条指令或数据的地 址,此后的源程序或数据块就依次连续存放在 以后的地址内,直到遇到另一个ORG指令为止。 如:
第4章 单片机汇编语言程序设计
第4章 单片机汇编语言程序设计
第4章 单片机汇编语言程序设计
4.1 汇编语言程序设计的基础知识 4.2 汇编程序设计方法 4.3 综合编程举例
第4章 单片机汇编语言程序设计
4.1 汇编语言程序设计的基础知识
4.1.1 汇编语言的语句格式
MCS-51单片机汇编语言的语句格式表示如下: [标号:] <操作码> [操作数] [;注释]
MOV A, R4 MOV R0, A M1: RET
第4章 单片机汇编语言程序设计
多分支程序,还可根据运算结果或输入数据将程 序转入不同的分支。
在多分支程序中,因为可能的分支会有 N个,若 采用多条 CJNE 指令逐次比较,程序的执行效率 会降低很多,特别是分支较多时更加明显。
一般采用跳转表的方法,通过两次转移来实现多 分支结构。
第4章 单片机汇编语言程序设计
ORG 2500H BR2: MOV R0, #00H MOV A, R1 ACALL COMP ;R0 清零 ;第一个数(R1)送A ; 比较(R1)与(R0)大小
第四章 51汇编语言程序设计
DPH, A A, B ;乘积的低8位 @A+DPTR;间接转移 CASE_0 CASE_1
CASE_N
例、设a存放在累加器A中,b存放在寄存器B中,要求
按下式计算Y值,并将结果Y存于累加器A 中,试编写
程序。(同学先做)
a-b Y = a+b (a < 0 ) (a≥0)
解:本题关键是判a是正数,还是负数;由ACC.7便知。
·逻辑运算
包括逻辑或、与、异或和非,分别用符号OR、
AND、XOR和NOT表示,实现的是按位运算; ·特殊运算 包括SHR、SHL、HIGH、LOW、(),分别表示 右移、左移、取高字节、取低字节和优先求值;
·关系运算
关系运算符有EQ、NE、LT、LE、GT和GE,也 不等、小于、小于或等于、大于、大于或等于;
机器语言
·二进制编码的指令 ·74H 34H 24H 45H F5H 09H 74H 12H 34H 23H F5H 08H ·如果不对照指令系统的机器码,很 难看出这段程序要实现什么功能
汇编语言
·使用助记符、符号地址、标号等符
号来编写程序的系统
RES_LOW DATA RES_HIGH DATA MOV ADD MOV MOV ADDC MOV 09H 08H A, #34H A, #45H RES_LOW, A A, #12H A, #23H RES_HIGH, A
要求某程序段多次重复执行,需要采用循环
结构。
循环结构不但使程序简练,而且大大节省存储空间。 循环程序包含四部分: 1、初始化部分 (循环计数器、变量置初值)
第四章 51单片机程序设计
4.1 4.2 4.3 4.4 51单片机程序设计概述 51汇编语言 汇编语言基本程序设计 数制转化程序
单片机原理及接口技术4(邱彬老师)
第4章 MCS-51汇编语言程序设计
(1)标号字段 是语句所在地址的标志符号 ★标号后边必须跟以冒号“:” ★由1-8个ASCII字符组成 ★同一标号在一个程序中只能定义一次 ★不能使用汇编语言已经定义的符号作为标号。 (2)注释字段 必须以“;”开头,可换行书写,但必须注意也要以 分号“;”开头。 汇编时,注释字段不会产生机器代码。 (3)操作码字段 是汇编语言指令中唯一不能空缺的部分。汇编程序就 是根据这一字段来生成机器代码的。
+
A
PC
单片机原理及接口技术——自动化系
第4章 MCS-51汇编语言程序设计
例:根据R7的内容,转向各自对应的操作程序,(R7)=0 转入OPR0;(R7)=1转入OPR1 … (R7)=n转入OPRn
JMP1: MOV DPTR , #TAB1 MOV A , R7 ADD A , R7 JNC NOAD INC DPH NOAD: JMP @A+DPTR TAB1: AJMP OPR0 AJMP OPR1 . . . AJMP OPRn ;转移表首地址送入DPTR ;键号送入A ;R7×2→A(修正变址值) ;判断是否有进位 ;有进位则加到高字节地址 ;转向形成散转地址入口
散转程序
★散转程序是指通过修改某个参数以后,程序可以有三个 以上的流向,多用于键盘程序。 ★常用的指令是:JMP @ A+DPTR,该指令是把16位数 据指针DPTR的内容与累加器A的8位无符号数相加,形 成地址,装入程序计数器PC,形成散转的目的地址。 A中内容为8位 无符号数 16位地址 DPTR
单片机原理及接口技术——自动化系
第4章 MCS-51汇编语言程序设计
数据比较大小程序 方法一:两个数据做减法SUBB,可根据借位CY来判断两 个数的大小。 方法二:两个数据做比较CJNE,再根据是否相等和借位CY来 判断两个数的大小。 例题:设内部RAM的20H、30H单元中分别存放两个8 位的无符号数X、Y,若X≥Y则让P1.0管脚连接的LED亮;若X <Y则让P1.1管脚连接的LED亮。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
单片机技术及应用
• 【例4-3】拆字程序。 • ORG 0000H • START: MOV R1,#40H • MOV A,@R1 • MOV B,A • ANL A,#0FH • INC R1 • MOV @R1,A • MOV A,B • SWAPA • ANL A,#0FH • INC R1 • MOV @R1,A • SJMP $ • END
;暂存B中 ;取第一个半字节 ;存放第一个半字节
;取第二个半字节 ;存放第二个半字节
单片机技术及应用
4.1.2 分支程序 • 分支程序比顺序程序的结构复杂得多,其主要特 点是程序的流向有两个或两个以上的出口,根据 指定的条件进行选择确定。编程的关键是如何确 定供判断或选择的条件以及选择合理的分支指令。 • 通常根据分支程序中出口的个数,分为单分支结 构程序(两个出口)和多分支结构程序(3个或3个以 上出口)。 • 在处理实际事务中,只用简单程序设计的方法是 不够的,因为大部分程序总包含有判断、比较等 情况。根据判断、比较的结果转向不同的分支。
单片机技术及应用
2. 多重循环程序 • 如果在一个循环体中又包含了其他的循环程序,即循环中还套着循环, 这种程序称为多重循环程序。 【例4-9】10秒延时程序。 • 延时程序与MCS-51执行指令的时间有关,如果使用6MHz晶振,一个 机器周期为2μs,计算出执行一条指令以至一个循环所需要的时间, 给出相应的循环次数,便能达到延时的目的。 • 程序如下: • DEL: MOV R5,#100 • DEL0: MOV R6,#100 • DEL1: MOV R7,#249 • DEL2: DJNZ R7,DEL2 ;248*2+4 • DJNZ R6,DEL1 ;(248*2+4)*200+4 • DJNZ R5,DEL0 ;(248*2+4)*200+4)*100+4 • RET
单片机技术及应用
4.2.1 工作寄存器或累加器传递参数 • 此方法是把入口参数或出口参数放在工作 寄存器或累加器中的方法。使用这种方法 可使程序最简单,运算速度也最高。它的 缺点是:工作寄存器数量有限,不能传递 太多的数据;主程序必须先把数据送到工 作寄存器;参数个数固定,不能由主程序 任意设定。
单片机技术及应用
单片机技术及应用
第4章 MCS-51程序设计
单片机技术及应用
教学提示 • 本章重、难点在于单片机MCS-51汇编语言 程序的3种基本结构形式、常用汇编语言程 序设计。 教学目标 • 掌握汇编语言程序基本结构。 • 掌握程序设计的步骤和方法。 • 学会具体程序的应用。
单片机技术及应用
单片机技术及应用
• 循环程序一般由4个部分组成: (1) 置循环初值,即确立循环开始时的状态。 (2) 循环体(工作部分),要求重复执行的部分。 (3) 循环修改,循环程序必须在一定条件下结束,否则就 要变成死循环。 (4) 循环控制部分,根据循环结束条件,判断是否结束循 环。 • 循环程序的结构一般有两种形式: (1) 先进入处理部分,再控制循环理部分。即先根据判断结果, 控制循环的执行与否,有时可以不进入循环体就退出循环 程序
单片机技术及应用
【例4-8】外部RAM单元清零。 • 要求:设有40个外部RAM单元要清“0”,即为循环次数存 放在R2寄存器中,其首地址存放在DPTR中,设为3000H。 • 解:方法一: • 程序如下: • ORG 0000H • MOV DPTR,#3000H • CLEAR: CLR A • MOV R2,#28H ;置计数值 • LOOP: MOVX@DPTR,A • INC DPTR ;修改地址指针 • DJNZ R2,LOOP ;控制循环 • END
单片机技术及应用
• 使用多重循环程序时,必须注意以下几点: (1) 循环嵌套,必须层次分明,不允许产生 内外层循环交叉。 (2) 外循环可以一层层向内循环进入,结束 时由里往外一层层退出。 (3) 内循环体可以直接转入外循环体,实现 一个循环由多个条件控制的循环结构方式。
单片机技术及应用
4.2 子程序和参数传递方法 • 在实际程序中,常常会多次进行一些相同的计算和操作, 如数制转换、函数式计算等。如果每次都从头开始编制一 段程序,不仅麻烦,而且浪费存储空间。因此对一些常用 的程序段,以子程序的形式,事先存放在存储器的某一区 域。当主程序运行过程中需要用子程序时,只要执行调用 子程序的指令,使程序转至子程序即可。子程序处理完毕, 返回主程序,继续进行以后的操作。 • 调用子程序有以下优点: • (1) 避免对相同程序段的重复编制。 • (2) 简化程序的逻辑结构,同时也便于子程序调试。 • (3) 节省存储器空间。
单片机技术及应用
【例4-5】两个无符号数比较大小。 • 解:设两个连续外部RAM单元ST1和ST2中存放不带符号的二进制数,找出 其中的大数存入ST3单元中。 • 程序如下: • ORG 8000H • ST1 EQU 8040H • START1: CLR C ;进位位清零 • MOV DPTR,#ST1 ;设数据指针 • MOVX A,@DPTR ;取第一个数 • MOV R2,A ;暂存R2 • INC DPTR • MOVX A,@DTPR ;取第二个数 • SUBB A,R2 ;两数比较 • JNC BIG1 • XCH A,R2 ;第一个数大 • BIG0: INC DPTR • MOVX @DPTR,A ;存大数 • SJMP $ • BIG1: MOVX A,@DPTR;第二个数大 • SJMP BIG0
单片机技术及应用
1. 单循环程序 【例4-6】多个单字节数据求和。 • 已知有10个单字节数据,依次存放在以内部RAM的50H单元开始的连 续单元中。要求把计算结果存入R2、R3中(高位存R2,低位存R3)。
单片机技术及应用
• • • • • • • • • • • • • • •
解:程序如下: ORG 8000H SAD: MOV R0,#50H ;设数据指针 MOV R5,#0AH ;计数值0AH→R5 SAD1: MOV R2,#0 ;和的高8位清零 MOV R3,#0 ;和的低8位清零 LOOP: MOV A,R3 ;取加数 ADD A,@R0 MOV R3,A ;存和的低8位 JNC LOP1 INC R2 ;有进位,和的高8位+1 LOP1: INC R0 ;指向下一个数据地址 DJNZ R5,LOOP SJMP $ END
单片机技术及应用
方法二: • 此程序也可写成通用子程序的形式: • CLEAR: CLR A • LOOP: MOVX @DPTR,A • INC DPTR ;修改地址指针 • DJNZ R2,LOOP ;控制循环 • RET • 使用时只要给定入口参数及被清零单元个数,再调用此子程序即可: • ORG 0000H • MOV DPTR,#3000H • MOV R2,#40 • ACALL CLEAR • SJMP $ • CLEAR: CLR A • LOOP: MOVX @DPTR,A • INC DPTR ;修改地址指针 • DJNZ R2,LOOP ;控制循环 • RET • END
【例4-1】已知16位二进制负数存放在R1、R0中,试求其补码,并将结 果存放在R3、R2中。 • 解:二进制负数的求补方法可归结为“求反加1”,符号位不变。利用 CPL指令实现求反;加1时,则应低8位先加1,高8位再加上低位的进 位。注意这里不能用INC指令,因为INC指令不影响标志位。 • 程序如下: • CONT: MOV A,R0 ;读低8位 • CPL A ;取反 • ADD A,#1 ;加1 • MOV R2,A ;存低8位 • MOV A,R1 ;读高8位 • CPL A ;取反 • ADDC A,#80H ;加进位及符号位 • MOV R3,A ;存高8位 • RET ;返回
单片机技术及应用
4.1.3 循环程序 • 在程序设计中,只有简单程序和分支程序是不够的。因为 简单程序的每条指令只执行一次,而分支程序则根据条件 的不同,会跳过一些指令,执行另一些指令。它们的特点 是,每一条指令至多执行一次。在处理实际事务时,有时 会遇到多次重复处理的问题,用循环程序的方法来解决就 比较合适。循环程序中的某些指令可以反复执行多次。采 用循环程序,可使程序缩短,从而节省存储单元。重复次 数越多,循环程序的优越性就越明显。但是程序的执行时 间并不节省。由于要有循环准备、结束判断等指令,其速 度要比简单程序稍慢些。
单片机技术及应用
【例4-7】内部RAM单元清零。要求:将60H为起点的9个单 元清“0”。 • 解:程序如下: • ORG 0000H • CLEAR: CLR A ;A清0 • MOV R0,#60H ;确定清0单元起始地址 • MOV R6,#09 ;确定要清除的单元个数 • LOOP: MOV @R0,A ;清单元 • INC R0 ;指向下一个单元 • DJNZ R6,LOOP ;控制循环 • SJMP $ • END
单片机技术及应用
【例4-4】求单字节有符号二进制数的补码。 • 解:正数的补码是其本身,负数的补码是其反码加1。因 此,程序首先判断被转换数的符号,负数进行转换,正数 即为补码。设二进制数放在累加器A中,其补码放回到A 中。 程序如下: • ORG 0000H • CMPT: JNB ACC.7,NCH ;(A)>0,不需转换 • CPL A • ADD A,#1 • SETB ACC.7 ;保存符号 • NCH: SJMP $ • END
4.1 三种基本程序结构 • 程序设计是为了解决某一个问题,将指令有序地组合在一 起。程序有简有繁,有些复杂程序往往是由简单的基本程 序所构成。本章将通过一些基本程序,介绍部分常用程序 设计方法。 • 程序设计的过程大致可以分为以下几个步骤: (1) 编制说明要解决问题的程序框图。 (2) 确定数据结构、算法、工作单元、变量设定。 (3) 根据所用计算机的指令系统,按照已编制的程序框图, 用汇编语言编制出源程序。 (4) 将编制出的程序在计算机上调试,直至实现预定的功 能。