单片机.docx
- 文档编号:27074332
- 上传时间:2023-06-26
- 格式:DOCX
- 页数:48
- 大小:125.39KB
单片机.docx
《单片机.docx》由会员分享,可在线阅读,更多相关《单片机.docx(48页珍藏版)》请在冰豆网上搜索。
单片机
第3章 MCS-51指令系统
程序由一条条指令组成,所有指令的集合称为指令系统,它是表征计算机性能的重要指标之一。
每台计算机都有其特有的指令系统。
MCS-51单片机的指令系统包括30多种功能,共计111条指令。
本章通过实训,对指令的格式、功能和应用有一个基本认识,然后详细介绍MCS-51单片机的寻址方式和指令系统。
实训3 指令的应用
1. 实训目的
(1)掌握指令格式及表示方法:
助记符表示和机器码表示。
(2)了解人工汇编与机器汇编的方法。
(3)了解寻址方式的概念。
(4)掌握常用指令的功能及应用。
2.实训设备和器件
(1)实训设备:
单片机开发系统,微机等。
(2)实训器件与电路:
与实训1相同。
3.实训步骤与要求
(1)将表3.1中的指令翻译成机器码。
(2)将机器码分别输入到单片机开发系统中,或机器汇编后分别下载到单片机开发系统中,单步运行,观察并记录实验板上8个发光二极管的亮灭状态及相关单元的数据,填入表3.1中。
表3.1 实验表格
题号
助记符指令
机器码指令
检查数据
发光二极管状态
①
MOV P1,#55H
————
②
MOV 20H,#0F0H
(20H)=
MOV P1,20H
————
③
MOV A,#0F0H
A=
MOV P1,A
————
④
MOV R4,#0FH
R4=
MOV P1,R4
————
⑤
MOV 20H,#0AAH
(20H)=
MOV R0,#20H
R0=
MOV P1,@R0
————
⑥
MOV A,#55H
A=
MOV P1,A
————
AND A,#0FH
A=
MOV P1,A
————
OR A,#0F0H
A=
MOV P1,A
————
⑦
CLR A
A=
MOV P1,A
————
CPL A
A=
MOV P1,A
————
⑧
MOV A,#01H
A=
MOV P1,A
————
RL A
A=
MOV P1,A
————
RL A
A=
MOV P1,A
————
4.实训分析与总结
1)指令形式
从实训中可以看出,指令有两种形式:
助记符指令和机器码指令(机器指令)。
助记符指令只有翻译成机器码后,单片机才能直接执行。
机器码指令分为以下三种:
单字节指令:
机器码只有一个字节的指令称为单字节指令。
例如单字节指令CLR A的机器码是E4H。
双字节指令:
机器码包括两个字节的指令称为双字节指令。
例如双字节指令MOV A,#55H的机器码是74H 55H。
三字节指令:
机器码包括三个字节的指令称为三字节指令。
例如三字节指令MOV P1,#55H的机器码是75H 90H 55H。
单片机指令系统中,大多数指令是单字节指令和双字节指令。
2)指令分析
(1)MOV P1,#55H:
将常数55H送入P1口,在助记符指令中,常数称为立即数。
立即数55H:
0 1 0 1 0 1 0 1
对应P1口各位:
P1.7 P1.6 P1.5 P1.4 P1.3 P1.2 P1.1 P1.0
相应的LED状态:
亮 灭 亮 灭 亮 灭 亮 灭
参照实训1的电路图,P1口的某一位输出0(低电平),经过反相后变为高电平,由外部电源Vcc驱动发光二极管处于点亮状态,否则二极管处于熄灭状态。
(2)MOV 20H,#0F0H:
将立即数0F0H送到内部RAM的20H单元中。
MOV P1,20H:
将20H单元的内容,即0F0H送到P1口。
发光二极管的状态为:
0F0H:
1 1 1 1 0 0 0 0
P1口:
P1.7 P1.6 P1.5 P1.4 P1.3 P1.2 P1.1 P1.0
LED状态:
灭 灭 灭 灭 亮 亮 亮 亮
(3)MOV A,#0F0H:
将立即数0F0H送到累加器A中。
MOV P1,A:
将累加器A的内容,即0F0H送到P1口。
发光二极管的状态同
(2)。
(4)MOV R4,#0FH:
将立即数0FH送到寄存器R4中。
MOV P1,R4:
将寄存器R4的内容,即0FH送到P1口。
发光二极管的状态如下:
0FH:
0 0 0 0 1 1 1 1
P1口:
P1.7 P1.6 P1.5 P1.4 P1.3 P1.2 P1.1 P1.0
LED状态:
亮 亮 亮 亮 灭 灭 灭 灭
(5)MOV 20H,#0AAH:
将立即数0AAH送到内部RAM的20H单元中。
MOV R0,#20H:
将立即数20H送到R0寄存器中。
MOV P1,@R0:
将R0所指向的存储单元20H的内容,即0AAH送到P1口中,二极管的状态如下:
0AAH:
1 0 1 0 1 0 1 0
P1口:
P1.7 P1.6 P1.5 P1.4 P1.3 P1.2 P1.1 P1.0
LED状态:
灭 亮 灭 亮 灭 亮 灭 亮
(6)MOV A,#55H:
将立即数0F0H送到累加器A中。
MOV P1,A:
将累加器A的内容,即55H送到P1口。
发光二极管的状态同
(1)。
AND A,#0FH:
累加器A的内容55H与立即数0FH进行逻辑“与”操作,结果为05H,再送回累加器A中。
MOV P1,A:
将累加器A的内容,即05H送到P1口。
发光二极管的状态如下:
05H:
0 0 0 0 0 1 0 1
P1口:
P1.7 P1.6 P1.5 P1.4 P1.3 P1.2 P1.1 P1.0
LED状态:
亮 亮 亮 亮 亮 灭 亮 灭
OR A,#0F0H:
累加器A的内容05H与立即数0F0H进行逻辑“或”操作,结果为0F5H,再送回累加器A中。
MOV P1,A:
将累加器A的内容,即0F5H送到P1口。
发光二极管的状态如下:
0F5H:
1 1 1 1 0 1 0 1
P1口:
P1.7 P1.6 P1.5 P1.4 P1.3 P1.2 P1.1 P1.0
LED状态:
灭 灭 灭 灭 亮 灭 亮 灭
(7)CLR A:
累加器清0
MOV P1,A:
将累加器A的内容,即00H送到P1口。
发光二极管的状态是全亮。
CPL A:
将A的内容00H按位取反,结果为0FFH。
MOV P1,A:
将累加器A的内容,即0FFH送到P1口。
发光二极管的状态是全灭。
(8)MOV A,#01H:
将立即数01H送到累加器A中。
MOV P1,A:
将累加器A的内容,即01H送到P1口。
发光二极管的状态如下:
01H:
0 0 0 0 0 0 0 1
P1口:
P1.7 P1.6 P1.5 P1.4 P1.3 P1.2 P1.1 P1.0
LED状态:
亮 亮 亮 亮 亮 亮 亮 灭
RL A:
移位指令,将A的内容01H循环左移一位,结果为02H。
MOV P1,A:
将累加器A的内容,即02H送到P1口。
发光二极管的状态如下:
02H:
0 0 0 0 0 0 1 0
P1口:
P1.7 P1.6 P1.5 P1.4 P1.3 P1.2 P1.1 P1.0
LED状态:
亮 亮 亮 亮 亮 亮 灭 亮
RL A:
A的内容02H左移一位,结果为04H。
MOV P1,A:
将累加器A的内容,即04H送到P1口。
发光二极管的状态如下:
02H:
0 0 0 0 0 1 0 0
P1口:
P1.7 P1.6 P1.5 P1.4 P1.3 P1.2 P1.1 P1.0
LED状态:
亮 亮 亮 亮 亮 灭 亮 亮
3)现象分析
在实训中看到以下现象:
往P1口传送数据的指令中,数据的来源不尽相同。
数据是指令的操作对象,叫做操作数。
指令必须给出操作数所在的地方,才能进行数据传送。
寻找操作数地址的方法,称为寻址方式。
下面是在实训中遇到的采用了不同寻址方式的指令:
MOV P1,#55H ;把操作数直接写在指令中,称为立即数寻址
MOV P1,20H ;把存放操作数的内存单元的地址直接写在指令中,称为直接寻址
MOV P1,A ;把操作数存放在寄存器中,称为寄存器寻址
MOV P1,@R0 ;把存放操作数的内存单元的地址放在寄存器R0中,这种寻址方式称为寄存器间接寻址
除了以上四种寻址方式之外,MCS-51单片机还有变址寻址方式、相对寻址方式和位寻址方式等。
思考:
指出表3.1中每一条指令的寻址方式。
注意:
P1与寄存器R0~R7、累加器A不同,它是内部RAM单元90H的符号地址,只能作为内存单元直接寻址。
3.1简介
3.1.1 指令概述
通过实训我们了解到,计算机能够按照人们的意愿工作,是因为人们给了它相应命令。
这些命令是由计算机所能识别的指令组成的,指令是CPU用于控制功能部件完成某一指定动作的指示和命令。
一台微机所具有的所有指令的集合,就构成了指令系统。
指令系统越丰富,说明CPU的功能越强。
例如,Z80单板机中,没有乘法和除法指令,乘法和除法运算必须用软件来实现,因此执行速度相对较慢;而MCS-51单片机提供了乘法和除法指令,实现乘法和除法运算时就要快很多。
一台微机能执行什么样的操作,是在微机设计时确定的。
一条指令对应着一种基本操作。
由于计算机只能识别二进制数,所以指令也必须用二进制形式来表示,称为指令的机器码或机器指令。
MCS-51单片机指令系统共有33种功能,42种助记符,111条指令。
3.1.2 指令格式
在实训中看到,不同指令翻译成机器码后字节数也不一定相同。
按照机器码个数,指令可以分为以下三种:
MCS-51单片机指令系统包括49条单字节指令、46条双字节指令和16条三字节指令。
采用助记符表示的汇编语言指令格式如下:
标号是程序员根据编程需要给指令设定的符号地址,可有可无;标号由1~8个字符组成,第一个字符必须是英文字母,不能是数字或其它符号;标号后必须用冒号。
操作码表示指令的操作种类,如MOV表示数据传送操作、ADD表示加法操作等。
操作数或操作数地址表示参加运算的数据或数据的有效地址。
操作数一般有以下几种形式:
没有操作数项,操作数隐含在操作码中,如RET指令;只有一个操作数,如CPL A指令;有两个操作数,如MOV A,#00H指令,操作数之间以逗号相隔;有三个操作数,如CJNE A,#00H,NEXT指令,操作数之间也以逗号相隔。
注释是对指令的解释说明,用以提高程序的可读性;注释前必须加分号。
3.2寻址方式
从指令格式知道,操作数是指令的重要组成部分,指出了参与操作的数据或数据的地址。
寻找操作数地址的方式称为寻址方式。
一条指令采用什么样的寻址方式,是由指令的功能决定的,寻址方式越多,指令功能就越强。
MCS-51指令系统共使用了7种寻址方式,包括寄存器寻址、直接寻址、立即数寻址、寄存器间接寻址、变址寻址、相对寻址和位寻址等。
实训中,我们初步接触了寄存器寻址、立即数寻址、直接寻址和寄存器间接寻址等四种寻址方式。
1.寄存器寻址
寄存器寻址是指将操作数存放于寄存器中,寄存器包括工作寄存器R0~R7、累加器A、通用寄存器B、地址寄存器DPTR等。
例如:
指令MOV R1,A的操作是把累加器A中的数据传送到寄存器R1中,其操作数存放在累加器A中,所以寻址方式为寄存器寻址。
如果程序状态寄存器PSW的RS1RS0=01(选中第二组工作寄存器,对应地址为08H——0FH),设累加器A的内容为20H,则执行MOV R1,A指令后,内部RAM09H单元的值就变为20H,如图3.1所示。
实训3中,采用寄存器寻址的指令如下:
MOV P1,A ;将累加器A的内容送到P1口
MOV P1,R4 ;将寄存器R4的内容送到P1口
CLR A ;将累加器A清0
CPL A ;将累加器A中的内容取反
RL A ;将累加器A的内容循环左移
图3.1 寄存器寻址示意图
2.直接寻址
直接寻址是指把存放操作数的内存单元的地址直接写在指令中。
在MCS-51单片机中,可以直接寻址的存储器主要有内部RAM区和特殊功能寄存器SFR区。
例如:
指令MOV A,3AH执行的操作是将内部RAM中地址为3AH的单元内容传送到累加器A中,其操作数3AH就是存放数据的单元地址,因此该指令是直接寻址。
设内部RAM3AH单元的内容是88H,那么指令MOVA,3AH的执行过程如图3.2所示。
图3.2 直接寻址示意图
实训3中,采用直接寻址的指令如下:
MOV P1,20H ;将20H单元的内容传送到P1口
3.立即数寻址
立即数寻址是指将操作数直接写在指令中。
例如:
指令MOVA,#3AH执行的操作是将立即数3AH送到累加器A中,该指令就是立即数寻址。
注意:
立即数前面必须加“#”号,以区别立即数和直接地址。
该指令的执行过程如图3.3所示。
实训3中,采用立即数寻址的指令如下:
MOV P1,#55H ;将立即数55H送P1口
MOV 20H,#55 ;将立即数55H送20H单元
MOV A,#0F0H ;将立即数0F0H送累加器A
MOV R4,#0FH ;将立即数0FH送寄存器R4中
MOV R0,#20H ;将立即数20H送寄存器R0口
AND A,#0FH ;累加器A的内容与立即数0FH进行逻辑与操作
OR A,#0F0H ;累加器A的内容与立即数0F0H进行逻辑或操作
MOV A,#01H ;将立即数01H送累加器A中
MOV A,#55H ;将立即数55H送累加器A中
图3.3 立即数寻址示意图
4.寄存器间接寻址
寄存器间接寻址是指将存放操作数的内存单元的地址放在寄存器中,指令中只给出该寄存器。
执行指令时,首先根据寄存器的内容,找到所需要的操作数地址,再由该地址找到操作数并完成相应操作。
在MCS-51指令系统中,用于寄存器间接寻址的寄存器有R0、R1和DPTR,称为寄存器间接寻址寄存器。
注意:
间接寻址寄存器前面必须加上符号“@”。
例如:
指令MOVA,@R0执行的操作是将R0的内容作为内部RAM的地址,再将该地址单元中的内容取出来送到累加器A中。
设R0=3AH,内部RAM3AH中的值是65H,则指令MOVA,@R0的执行结果是累加器A的值为65H,该指令的执行过程如图3.4所示。
图3.4 寄存器间址寻址示意图
实训3中,采用寄存器间接寻址的指令如下:
MOV P1,@R0 ;将R0所指的存储单元的内容送P1口
5.变址寻址
变址寻址是指将基址寄存器与变址寄存器的内容相加,结果作为操作数的地址。
DPTR或PC是基址寄存器,累加器A是变址寄存器。
该类寻址方式主要用于查表操作。
例如:
指令MOVC A,@A+DPTR执行的操作是将累加器A和基址寄存器DPTR的内容相加,相加结果作为操作数存放的地址,再将操作数取出来送到累加器A中。
设累加器A=02H,DPTR=0300H,外部ROM(0302H)=55H,则指令MOVCA,@A+DPTR的执行结果是累加器A的内容为55H。
该指令的执行过程如图3.5所示。
图3.5 变址寻址示意图
6.相对寻址
相对寻址是指程序计数器PC的当前内容与指令中的操作数相加,其结果作为跳转指令的转移地址(也称目的地址)。
该类寻址方式主要用于跳转指令。
例如:
指令SJMP 54H执行的操作是将PC当前的内容与54H相加,结果再送回PC中,成为下一条将要执行指令的地址。
设指令SJMP 54H的机器码80H 54H存放在2000H处,当执行到该指令时,先从2000H和2001H单元取出指令,PC自动变为2002H;再把PC的内容与操作数54H相加,形成目标地址2056H,再送回PC,使得程序跳转到2056H单元继续执行。
该指令的执行过程如图3.6所示。
图3.6 相对寻址示意图
7.位寻址
位寻址是指按位进行的操作,而上述介绍的指令都是按字节进行的操作。
MCS-51单片机中,操作数不仅可以按字节为单位进行操作,也可以按位进行操作。
当我们把某一位作为操作数时,这个操作数的地址称为位地址。
位寻址区包括专门安排在内部RAM中的两个区域:
一是内部RAM的位寻址区,地址范围是20H~2FH,共16个RAM单元,位地址为00H~7FH;二是特殊功能寄存器SFR中有11个寄存器可以位寻址,可以参见前面有关章节中位地址定义。
例如:
指令SETB 3DH执行的操作是将内部RAM位寻址区中的3DH位置1。
设内部RAM27H单元的内容是00H,执行SETB3DH后,由于3DH对应着内部RAM27H的第5位,因此该位变为1,也就是27H单元的内容变为20H。
该指令的执行过程如图3.7所示。
图3.7 位寻址示意图
3.3指令系统
MCS-51单片机指令系统包括111条指令,按功能可以划分为以下五类:
数据传送指令(28条)
算术运算指令(24条)
逻辑运算指令(25条)
控制转移指令(17条)
位操作指令(17条)
3.3.1 指令系统中的符号说明
指令的书写必须遵守一定的规则,为了叙述方便,我们采用表3.2的约定。
表3.2 指令描述约定
符号
含 义
Rn
表示当前选定寄存器组的工作寄存器R0~R7
Ri
表示作为间接寻址的地址指针R0~R1
#data
表示8位立即数,即00H~FFH
#data16
表示16位立即数,即0000H~FFFFH
addr16
表示16位地址,用于64K范围内寻址
addr11
表示11位地址,用于2K范围内寻址
direct
8位直接地址,可以是内部RAM区的某一单元或某一专用功能寄存器的地址
Rel
带符号的8位偏移量(-128~+127)
Bit
位寻址区的直接寻址位
(X)
X地址单元中的内容
((X))
将X地址单元中的内容作为地址,该地址单元中的内容
←
将←后面的内容传送到前面去
3.3.2数据传送类指令
数据传送指令是MCS-51单片机汇编语言程序设计中使用最频繁的指令,包括内部RAM、寄存器、外部RAM以及程序存储器之间的数据传送。
数据传送操作是指把数据从源地址传送到目的地址,源地址内容不变。
目的地址 源地址
1.内部8位数据传送指令
内部8位数据传送指令共15条,主要用于MCS-51单片机内部RAM与寄存器之间的数据传送。
指令基本格式:
MOV <目的操作数>,<源操作数>
1)以累加器A为目的地址的传送指令(4条)
助记符格式
机器码
相应操作
指令说明
机器周期
MOVA,Rn
11101rrr
A←Rn
n=0~7 rrr=000~111
1
MOVA,direct
11100101direct
A←direct
1
MOVA,@Ri
1110011i
A←(Ri)
i=0,1
1
MOVA,#data
01110100#data
A←#data
1
注意:
以上传送指令的结果影响程序状态字寄存器PSW的P标志。
例3.1已知相应单元的内容,请指出每条指令执行后相应单元内容的变化。
累加器A
40H
寄存器R0
50H
内部RAM:
40H
30H
内部RAM:
50H
10H
①MOVA,#20H
②MOVA,40H
③MOVA,R0
④MOVA,@R0
解:
①MOV A,#20H执行后A=20H
②MOV A,40H执行后A=30H
③MOV A,R0执行后A=50H
④MOV A,@R0执行后A=10H
2)以Rn为目的地址的传送指令(3条)
助记符格式
机器码(B)
相应操作
指令说明
机器周期
MOVRn,A
11111rrr
Rn←A
N=0~7 rrr=000~111
1
MOVRn,direct
10101rrrdirect
Rn←direct
N=0~7 rrr=000~111
1
MOVRn,#data
01111rrr#data
Rn←#data
N=0~7 rrr=000~111
1
注意:
以上传送指令的结果不影响程序状态字寄存
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机