学习情景二AT89S52系列单片机寻址方式及指令系统.docx
- 文档编号:8462987
- 上传时间:2023-01-31
- 格式:DOCX
- 页数:26
- 大小:103.24KB
学习情景二AT89S52系列单片机寻址方式及指令系统.docx
《学习情景二AT89S52系列单片机寻址方式及指令系统.docx》由会员分享,可在线阅读,更多相关《学习情景二AT89S52系列单片机寻址方式及指令系统.docx(26页珍藏版)》请在冰豆网上搜索。
学习情景二AT89S52系列单片机寻址方式及指令系统
学习情景二AT89S52系列单片机寻址方式及指令系统
学习目标:
Ø熟练掌握MCS-51单片机的寻址方式和指令系统
Ø能编写简单完整的程序
Ø掌握标志位
技能目标:
Ø能够对工作任务进行分析,找出相应算法,绘制流程图。
Ø能够根据流程图编写程序。
Ø会使用KeilC51μVision2集成开发环境,观察与修改存储器。
项目一片内存储器及特殊功能寄存器
第一部分项目要求
在KeilC51μVision2集成开发环境下,在编辑窗口编辑给定程序,观察片内RAM工作寄存器区、内部RAM位寻址区、RAM间接与直接寄存器区、内部RAM间接寻址区、内部RAM特殊功能寄存器区、外部RAM区(XRAM)的数据,并根据要求进行修改,说明每条指令的寻址方式。
第二部分相关知识
一、AT89S52单片机寻址方式
寻址方式是指CPU寻找操作数或操作数地址的方法。
具体来说寻址方式就是如何找到存放操作数的地址,把操作数提取出来的方法,它是计算机的重要性能指标之一,也是汇编语言程序设计中最基本的内容之一。
比如完成“5+8=13”的简单运算,在计算机中加数和被加数存放在什么地方?
CPU如何得到它们?
运算结果存放在什么地方?
这些就是寻址问题。
实际上计算机执行策划能够寻址的过程是不断地寻找操作数并进行操作的过程。
一般来讲,寻址方式越多,计算机的寻址能力就越强,但指令系统也就越复杂。
AT89S52寻址方式共有7种:
立即寻址、直接寻址、寄存器寻址、寄存器间接寻址、相对寻址、基寄存器加变址寄存器间接寻址和位寻址。
二、AT89S52单片机指令寻址
存放指令代码的地址称指令地址。
指令存放是在程序存储器中,是按顺序存放的,执行时也是按指令地址顺序执行,除非是转移。
存放数据的地址称操作数地址。
数据的存放是任意的,无规律。
操作数的来源为:
A.操作数在指令中
B.操作数在存储器中
C.操作数在寄存器中
D.操作数在I/O端口中
因为AT89S52与MCS-51单片机指令系统兼容,故下面介绍MCS-51单片机的指令及寻址方式。
(一)立即寻址
立即寻址是指操作数在指令操作数域直接给出,因此也称为立即数,指令操作码后面紧跟的是一字节或两字节操作数,用“#”号表示,以区别直接地址。
【例2.1】MOVA,25H;A←(25H)
MOVA,#25H;A←25H
前者表示把片内RAM中25H这个单元的内容送累加器A,而后者则是把25H这个数本身送累加器A,如图2.1所示。
请注意注释字段中加圆括号与不加圆括号的区别。
MCS-51有一条指令要求操作码后面紧跟的是2个字节立即数,即
【例2.2】MOVDPTR,#DATA16
MOVDPTR,#1856H;DPTR←1856H
因为这条指令包括2个字节立即数,所以它是三字节指令,如图2.2所示。
图2.1立即寻址(MOVA,#25H)
图2.2立即寻址(MOVDPTR,#1856H)
(二)直接寻址
直接寻址是指操作数的地址直接在指令操作数域给出。
直接寻址可访问的存储空间如下。
1.内部RAM低128单元,在指令中直接以单元地址形式给出,地址范围00H~7FH。
【例2.3】MOVA,3CH;A←(3CH)
其中3CH为直接地址。
指令功能就是把内部RAM中3CH这个单元的内容送累加器A。
其示意如图2.3所示。
2.特殊功能寄存器SFR。
直接寻址是SFR惟一的寻址方式。
SFR可以以单元地址给出,也可用寄存器符号形式给出(A,AB,DFTR除外)。
【例2.4】MOVA,P1;A←(P1口)
这是把SFR中P1口内容送A,它又可写成:
MOVA,90H
其中,90H是P1口的地址。
图2.3直接寻址(MOVA,3CH)
3.211个位地址空间。
即内部RAM中可位寻址的20H~2FH单元对应的128个位地址空间和11个SFR中83个可用的位地址空间。
【例2.5】MOVA,30H;A←(30H)
MOVC,30H;Cy←(30H)
前一条指令为字节操作指令,机器码为E530H,30H为字节地址;后一条指令为位操作指令,机器码为A230H,30H为位地址。
显然两条指令的含义和执行结果是完全不同的。
直接寻址的地址占1B,所以,一条直接寻址方式的指令至少占内存两个单元。
(三)寄存器寻址
就是由指令指出“寄存器”的内容作为操作数。
操作数存放在寄存器中,并且寻址的寄存器已隐含在指令的操作码中,寄存器用符号表示。
寄存器寻址的寻址范围如下。
1.四组工作寄存器R0~R7共32个工作寄存器,当前工作寄存器组的选择是通过程序状态字PSW中的RS1、RS0的设置来确定。
【例2.6】MOVA,R1;A←(R1)
操作数存放在寄存器R1中。
指令功能是把寄存器R1中的内容送入累加器A,其示意图2.4所示。
图2.4寄存器寻址(MOVA,R1)
(四)寄存器间接寻址
寄存器间接寻址是指操作数存放在以寄存器内容为地址的单元中。
寄存器中的内容不再是操作数,而是存放操作数的地址。
此时,操作数不能从寄存器直接得到,而只能通过寄存器间接得到。
寄存器间接寻址用符号“@”表示。
MCS-51单片机用于间接寻址的寄存器有R0、R1、堆栈指针SP以及数据指针DPTR。
寄存器间接寻址可寻址范围如下。
1.内部RAM低128单元,地址范围00H~7FH,用Ri(i=0,1)和SP作为间址寄存器;
2.与P2口配合使用,用Ri指示低8位地址,可寻址片外数据存储器或I/O口的64KB区域;
3.DPTR间接寻址寄存器,可寻址片外程序存储器或数据存储器包括I/O口的各自的64KB区域。
【例2.7】MOVA,@R1;A←((R1))
设(R1)=60H,(60H)=50H,执行结果(A)=50H。
该指令执行过程如图2.5所示。
图2.5寄存器间接寻址(MOVA,@R1)
注意:
特殊功能寄存器只能直接寻址,寄存器间接寻址无效。
(五)变址寻址
是指操作数存放在变址寄存器和基址寄存器的内容相加,形成的数为地址的单元中。
其中累加器A作为变址寄存器,程序计数器PC或数据指针寄存器DPTR作基址寄存器。
【例2.8】MOVCA,@A+DPTR;A←((A)+(DPTR))
指令功能为DPTR中的内容与A中的内容相加,其和所指示的单元的数送入累加器A,如图2.6所示。
对MCS-51指令系统变址寻址方式说明如下。
1.变址寻址方式只能对程序存储器进行寻址,因此只能用于读区数据,而不能用于存放数据,它主要用于查表性质的访问。
2.变址寻址指令有:
MOVCA,@A+PC
MOVCA,@A+DPTR
JMP@A+DPTR
前两条指令是在程序存储器中寻找操作数,指令执行完毕PC当前值不变,后一条指令是要获得程序的跳转地址,执行完毕PC值改变。
图2.6变址寻址(MOVCA,@A+DPTR)
(六)相对寻址
相对寻址只出现在相对转移指令中,它是为了实现程序的相对转移而设置的。
相对寻址是将程序计数器PC的当前值与第二字节给出的偏移量相加,从而形成转移的目的地址,这个偏移量是相对PC当前值而言,故称为相对寻址。
PC的当前值是指取出该指令后的PC值,即下一条指令地址。
因此,转移目的地址可用如下公式表示:
转移目的地址=下一条指令地址+rel
偏移量rel是一个带符号的8位二进制数,表示范围为–128~+127。
目的地址=源地址+2+rel
新的程序寄存器PC的地址=当前PC+2+偏移量
偏移量可为正,可为负,范围–128~+127。
偏移量为正:
当前(PC)+2+偏移量
偏移量为负:
当前(PC)+2+2n+(-偏移量)
【例2.9】JC80H
若进位标志Cy=0,则PC值不变;若进位位Cy=1,则以PC当前值加偏移量80H后所得的值作为转移目的地址,其示意如图2.7所示。
这里转移指令在1000H单元,偏移量在1001H单元,指令取出后PC的当前值为1002H。
1002H与偏移量80H相加得到转移地址0F82H(80H表示-128,补码运算后结果为0H82H)。
图2.7相对寻址(JC80H)
(七)位寻址
位寻址是指对一些内部RAM和特殊功能寄存器进行位操作时的寻址方式。
(是指对片内RAM中20H~2FH中的128个位地址以及SFR中的11个可进行位寻址的寄存器中的位地址寻址)在进行位操作时,借助于进位位Cy作为位操作累加器。
指令操作数域直接给出该位的地址,然后根据操作码的性质对其进行位操作。
位地址与字节直接寻址中的字节地址形式一样,主要由操作码来区分,指令中的地址是位地址而不是存储器单元地址,使用时需予以注意。
位寻址方式是MCS—51单片机的特有功能。
因为MCS-51设有独立的位处理器,又称为布尔处理器,可对位地址空间的211个位地址进行运算和传送操作。
位寻址范围如下。
利用位寻址指令可使单片机方便地进行位逻辑运算,给控制系统带来了诸多方便。
1.内部RAM的位寻址地区,共16个单元的128位,单元地址为20H~2FH,位地址为00H~7FH,位地址的表示方法可用直接位地址或单元地址加位的表示方法。
【例2.10】MOVC,7AH
或MOVC,2FH.2
2.特殊功能寄存器SFR可供位寻址的专用寄存器共11个,实有位地址位83位。
以上介绍了80C51单片机的7种寻址方式,如表2.1所列。
表2.1概括了每种寻址方式可涉及的存储器空间。
表2.1操作数寻址方式和有关空间
序号
寻址方式
使用的变量
寻址空间
1
立即寻址
程序存储器ROM
2
直接寻址
内部RAM低128B和SFR
3
寄存器寻址
R0~R7,A,B,C,DPTR
内部RAM低128B
4
寄存器间址
@R0,@R1,SP(仅PUSH,POP)
内部RAM
5
@R0,@R1,@DPTR
外部RAM
6
变址寻址
@A+PC,@A+DPTR
程序存储器
7
相对寻址
PC+偏移量
程序存储器256B范围
位寻址
内部RAM和SFR的位地址
三、AT89S52单片机标志位
程序状态字(ProgramStatusWord,PSW)寄存器共有8位,全部用作程序运行的状态标志,其格式如下:
PSW
Cy
AC
F0
RS1
RS0
OV
—
P
位地址
D7H
D6H
D5H
D4H
D3H
D2H
D1H
D0H
字节地址D0H
P:
奇偶标志位。
当累加器中1的个数为奇数时,P置1,否则清0。
在MCS-51单片机的指令系统中,凡是改变累加器内容的指令均影响奇偶标志位P。
OV:
溢出标志。
当执行算术运算时,最高位和次高位的进位(或借位)相异时,有溢出,OV置1;否则,没有溢出,OV清0。
RS1和RS0:
寄存器工作区选择。
这两位的值决定选择哪一组工作寄存器为当前工作寄存器组。
由用户通过软件改变RS1和RS0值的组合,以切换当前选用的工作寄存器组。
其组合关系如表2.2所列。
表2.2RS1、RS0的组合关系
RS1
RS0
寄存器组
片内RAM地址
0
0
第0组
00H~07H
0
1
第1组
08H~0FH
1
0
第2组
10H~17H
1
1
第3组
18H~1FH
F0:
用户标志位。
AC:
辅助进位标志位。
算术运算时,若低半字节向高半字节有进位(或借位)时,AC置1,否则清0。
Cy:
最高进位标志位。
算术运算时,若最高位有进位(或借位)时,Cy置1,否则清0。
D1:
保留。
四、MSC-51单片机指令系统简介
通过学习,我们已经了解了AT89S52的内部结构,并且已经知道,要控制单片机,让它完成特定的任务,必须使用指令。
(一)指令及程序的概念
指令是指单片机执行某种操作的命令。
指令系统(或指令集)是指单片机能够识别和执行的全部指令。
一条指令可用两种语言形式表示,即机器语言和汇编语言指令。
机器语言指令是单片机能直接识别、分析和执行的二进制码,用机器语言写的程序称为目标程序。
汇编语言是由一系列描述计算机功能及寻址方式的助记符构成,与机器码一一对应,用汇编语言编写的程序必须经汇编后才能生成目标码,被单片机识别。
用汇编语言编写的程序称为源程序。
为完成某项任务,人们按要求编排的指令操作序列称为程序。
【例2.11】要做“10+20”的加法,可写成:
汇编语言程序机器语言程序
MOVA,#0AH740AH
ADDA,#14H2414H
(二)指令格式
包括汇编语言指令格式和机器语言指令格式。
1.汇编语言指令格式
[标号]:
操作码[目的操作数],[源操作数];[注释]
例如:
Loop:
ADDA,R0;A+(R0)→(A)
操作码:
规定了指令所实现的操作功能。
操作数:
部分指出了参与操作的数据的来源和操作结果存放在什么空间单元。
操作数可以是一个数(立即数),或者是一个数据所在的空间地址,即在执行指令时从指定的地址空间取出操作数。
2.机器语言指令格式
要想要计算机完成某项任务,就要向它发出指令,而计算机只能识别二进制代码,而不能识别其他语言。
因此机器语言是计算机能识别的唯一语言。
机器语言指令格式如图2.8所示。
图2.8机器语言指令格式
例如:
ADDA,#10H
00100100
00010000
(三)指令系统中使用的常用符号
了解一些常用符号,对程序的理解和编写非常有用。
●Rn:
表示当前工作寄存器R0~R7中的一个。
它在片内数据存储器中的地址由PSW中RS1、RS0确定,可以是00H~07H(第0组)、08H~0FH(第1组)、10H~17H(第2组)、18H~1FH(第3组)。
●Ri:
(i=0,1)代表R0和R1寄存器中的一个。
地址:
01H、02H;08H、09H;10H、11H;18H、19H。
可作为地址指针的二个工作寄存器R0和R1。
●#data:
表示8位立即数,即8位常数。
取值范围为#00H~#FFH(0~256)
●#data16:
表示16位立即数,即16位常数。
取值范围为0000H~0FFFH(0~65536)
●direct:
8位片内RAM单元(包括SFR)的直接地址,对于SFR可使用它的物理地址,也可直接使用它的名字。
●addr11:
表示11位地址。
211=2048=2KB
●addr16:
表示16位地址。
216=65536=64KB
addr11、addr16的区别:
在无条件转移指令中
短转移2KB(AJMP)
长转移64KB(LJMP)
在子程序调用指令中
短调用2KB(ACALL)
长调用64KB(LCALL)
●rel:
用补码形式表示的地址偏移量,取值范围为-128~127
●bit:
片内RAM或SFR的直接地址位地址。
SFR中的位地址可以直接出现在指令中。
为了阅读方便,往往也可用SFR的名字和所在的数位表示。
例如:
表示PSW中的奇偶校验位,可写成D0H,也可写成PSW.0的形式出现在指令中。
●@:
表示间接寻址寄存器或基址寄存器的前缀符号。
●/:
位操作指令中,表示该位先取反再参与操作,但不影响该位原值。
●(x):
x中的内容。
●((x)):
由×指出的地址单元中的内容。
(内容的内容)
●→:
指令操作流程,将箭头左边的内容送入箭头右边的单元。
●$:
$表示当前指令的地址。
(四)MSC-51指令系统助记符
MSC-51指令系统有42种助记符,代表了33种功能,指令助记符与各种可能的寻址方式相结合,共构成111条指令。
按指令的功能可分为五大类。
为了便于理解,加强记忆,给出每个助记符的解释。
对于具体指令祥见附录。
1.数据传送类指令(7种助记符,28条指令)
●MOV:
对内部数据寄存器RAM和特殊功能寄存器SFR的数据进行传送。
●MOVC:
读程序存储器数据表格的数据传送。
●MOVX:
对外部RAM的数据传送。
●XCH:
字节交换。
●XCHD:
低半字节交换。
●PUSH:
入栈。
●POP:
出栈。
2.算术运算类指令(8种助记符,24条指令)
●ADD:
加法。
●ADDC:
带进位加法。
●SUBB:
带借位减法。
●DA:
十进制调整。
●INC:
加1。
●DEC:
减1。
●MUL:
乘法。
●DIV:
除法。
3.逻辑运算及位移类指令(10种助记符,17条指令)
●ANL:
逻辑与。
●ORL:
逻辑或。
●XRL:
逻辑异或。
●CRL:
清0。
●CPL:
取反。
●RL:
循环左移。
●RLC:
带进位循环左移。
●RR:
循环右移。
●RRC:
带进位循环右移。
●SWAP:
低4位与高4位交换。
4.控制转移类指令(18种助记符,17条指令)
●ACALL:
子程序绝对调用。
●LCALL:
子程序长调用。
●RET:
子程序返回。
●RETI:
中断返回。
●AJMP:
绝对转移。
●LJMP:
长转移。
●SJMP:
短转移。
●JMP:
转移。
●CJNE:
比较不相等则转移。
●DJNZ:
减1后不为0则转移。
●JZ:
结果为0则转移。
●JNZ:
结果不为0(结果为1)则转移。
●JC:
有进位位则转移。
●JNC:
无进位位则转移。
●JB:
位为1则转移。
●JNB:
位为0则转移。
●JBC:
位为1则转移,并清除该位。
●NOP:
空操作。
5.位操作指令(1种助记符,17条指令)(布尔操作)
●SETB:
位置1。
第三部分项目实施
一、项目实施要求
(一)项目设备要求
1.装有KeilC51μVision2集成开发环境、编程器软件、在线下载软件的计算机。
2.单片机最小系统开发平台。
3.通用编程器
(二)项目实施步骤
1.断电,连接计算机、实验板
2.给计算机、单片机最小系统开发平台通电。
3.打开计算机,进入KeilC51开发环境。
4.正确设置通信口,连接好开发环境和实验板。
5.新建一个项目,并将该项目建立在指定的文件下。
6.新建一个文件,存储器的路径与刚才建的项目相同。
7.将新建的文件添加到项目中,保存项目,观察项目窗口和编辑窗口的内容。
8.在编辑窗口编辑如下程序,观察结果填入下表2.3。
表2.3机器码表
程序
在ROM中的地址
机器码
ORG0000H
LIMPMAIN
ORG0100H
MAIN:
MOVR0,#78H
MOVRl,#65H
LIMPMAIN
END
9.对程序进行汇编,观察信息窗口的信息,如果正确,执行下一步;否则检查修改程序错误,重新汇编。
10.生成目标代码,观察消息窗口的信息,如果正确,执行下一步;否则检查修改程序错误,重新生成目标代码。
11.按照要求观察寄存器数据并记录在表中。
(1)片内RAM工作寄存器区的观察与修改
内部RAM工作寄存器区地址为00H~1FH
●打开寄存器窗口、RAM窗口和SFR窗口观察。
●把观察结果填入表2.4。
●在RAM区直接修改00H和01H单元内容为99H、78H,观察并记录寄存器R0,R1的变化,说明原因。
表2.4寄存器窗口和RAM窗口内容观察结果
程序
寄存器窗口
RAM窗口
SFR一8051窗口
执行前
执行后
执行前
执行后
执行前
执行后
LJMPMAIN
(R0)=
(R1)=
(R0)=
(R1)=
(00H)=
(01H)=
(00H)=
(01H)=
(PC)=
(PC)=
MAIN:
MOVR0,#78H
(R0)=
(R1)=
(R0)=
(R1)=
(00H)=
(0lH)=
(00H)=
(01H)=
(PC)=
(PC)=
MOVRl,#59H
(R0)=
(R1)=
(R0)=
(R1)=
(00H)=
(01H)=
(00H)=
(0lH)=
(PC)=
(PC)=
SJMPMAIN
(R0)=
(R1)=
(R0)=
(R1)=
(00H)=
(01H)=
(00H)=
(01H)=
(PC)=
(PC)=
END
●在MOVR0,#78H指令前加入2条指令,观察变化情况,填入表2.5。
表2.5工作寄存器区观察结果
程序
寄存器窗口
RAM窗口
执行前
执行后
执行前
执行后
执行前
执行后
MAIN:
SETBRSO
(R0)=
(R1)=
(R0)=
(R1)=
(00H)=
(01H)=
(00H)=
(01H)=
(08H)=
(09H)=
(08H)=
(09H)=
CLRRSl
(R0)=
(R1)=
(R0)=
(R1)=
(00H)=
(01H)=
(00H)=
(0lH)=
(08H)=
(09H)=
(08H)=
(09H)=
MOVR0,#45H
(R0)=
(R1)=
(R0)=
(R1)=
(00H)=
(01H)=
(00H)=
(01H)=
(08H)=
(09H)=
(08H)=
(09H)=
MOVRl,#67H
(R0)=
(R1)=
(R0)=
(R1)=
(00H)=
(01H)=
(00H)=
(01H)=
(08H)=
(09H)=
(08H)=
(09H)=
LJMPMAIN
(2)内部RAM位寻址区的观察结果与内容修改
内部RAM位寻址区的地址为20H~2FH
●建一个新项目,建一个新文件放在项目的目录中。
按表2.6输入程序、编译,打开寄存器窗口、RAM窗口和SFR窗口观察。
●观察结果,将结果填入表2.6中
●执行MOVR0,20H前,将RAM窗口直接将20H单元内容修改为05H,在执行该指令,结果怎样?
表2.6位寻址区观察表结果
程序
RAM区预期结果
RAM区实际观察结果
寻址方式
执行前
执行后
位寻址
字节寻址
ORG0000H
LJMPMAIN
0RG0100H
MAIN:
MOV20H,#00H
(20H)=
(20H)=
(20H)=
MOV21H,#00H
(21H)=
(21H)=
(21H)=
SETB20H.0
(20H)=
(20H)=
(20H)=
CLR20H.0
(20H)=
(20H)=
(20H)=
SETB00H
(20H)=
(20H)=
(20
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 学习 情景 AT89S52 系列 单片机 寻址 方式 指令系统