学习情景二 AT89S52系列单片机寻址方式及指令系统
学习目标:
? 熟练掌握MCS-51单片机的寻址方式和指令系统 ? 能编写简单完整的程序 ? 掌握标志位 技能目标:
? 能够对工作任务进行分析,找出相应算法,绘制流程图。 ? 能够根据流程图编写程序。
? 会使用Keil C51 μVision2集成开发环境,观察与修改存储器。
项目一 片内存储器及特殊功能寄存器
第一部分 项目要求
在Keil C51 μVision2集成开发环境下,在编辑窗口编辑给定程序,观察片内RAM工作寄存器区、内部RAM位寻址区、RAM间接与直接寄存器区、内部RAM间接寻址区、内部RAM特殊功能寄存器区、外部RAM区(XRAM)的数据,并根据要求进行修改,说明每条指令的寻址方式。
第二部分 相关知识
一、AT89S52单片机寻址方式
寻址方式是指CPU寻找操作数或操作数地址的方法。具体来说寻址方式就是如何找到存放操作数的地址,把操作数提取出来的方法,它是计算机的重要性能指标之一,也是汇编语言程序设计中最基本的内容之一。比如完成“5+8=13”的简单运算,在计算机中加数和被加数存放在什么地方?CPU如何得到它们?运算结果存放在什么地方?这些就是寻址问题。实际上计算机执行策划能够寻址的过程是不断地寻找操作数并进行操作的过程。一般来讲,寻址方式越多,计算机的寻址能力就越强,但指令系统也就越复杂。
AT89S52寻址方式共有7种:立即寻址、直接寻址、寄存器寻址、寄存器间接寻址、相对寻址、基寄存器加变址寄存器间接寻址和位寻址。
1
二、AT89S52单片机指令寻址
存放指令代码的地址称指令地址。指令存放是在程序存储器中,是按顺序存放的,执行时也是按指令地址顺序执行,除非是转移。
存放数据的地址称操作数地址。数据的存放是任意的,无规律。 操作数的来源为: A.操作数在指令中 B.操作数在存储器中 C.操作数在寄存器中 D.操作数在I/O端口中
因为AT89S52与MCS-51单片机指令系统兼容,故下面介绍MCS-51单片机的指令及寻址方式。
(一) 立即寻址
立即寻址是指操作数在指令操作数域直接给出,因此也称为立即数,指令操作码后面紧跟的是一字节或两字节操作数,用“#”号表示,以区别直接地址。
【例2.1】 MOV A, 25H ;A←(25H)
MOV A, #25H ;A←25H
前者表示把片内RAM中25H这个单元的内容送累加器A,而后者则是把25H这个数本身送累加器A,如图2.1所示。请注意注释字段中加圆括号与不加圆括号的区别。
MCS-51有一条指令要求操作码后面紧跟的是2个字节立即数,即 【例2.2】 MOV DPTR, #DATA16
MOV DPTR, #1856H ;DPTR←1856H
因为这条指令包括2个字节立即数,所以它是三字节指令,如图2.2所示。
M
01110100操作码 PC→
00100101 立即数 PC+1→
A 0010010
图2.1 立即寻址(MOV A,#25H)
2
M PC→ PC+1→
10010000 00011000 01010110
操作码
立即数高位→ 00011000 立即数低位→ DPH DPL
01010110 图2.2 立即寻址(MOV DPTR, #1856H)
(二) 直接寻址
直接寻址是指操作数的地址直接在指令操作数域给出。直接寻址可访问的存储空间如下。
1.内部RAM低128单元,在指令中直接以单元地址形式给出,地址范围00H~7FH。 【例2.3】 MOV A, 3CH ;A←(3CH) 其中3CH为直接地址。指令功能就是把内部RAM中3CH这个单元的内容送累加器A。其示意如图2.3所示。
2.特殊功能寄存器SFR。直接寻址是SFR惟一的寻址方式。SFR可以以单元地址给出,也可用寄存器符号形式给出(A,AB,DFTR除外)。
【例2.4】 MOV A, P1 ;A←(P1口) 这是把SFR中P1口内容送A,它又可写成: MOV A, 90H
其中,90H是P1口的地址。
M
RAM
A PC→ 11100101 操作码 3CH 01010101 → 01010101 00111100 PC+1→ 直接地址
图2.3 直接寻址(MOV A,3CH)
3.211个位地址空间。即内部RAM中可位寻址的20H~2FH单元对应的128个位地址空间和11个SFR中83个可用的位地址空间。
【例2.5】 MOV A, 30H ;A←(30H)
MOV C, 30H ;Cy←(30H)
前一条指令为字节操作指令,机器码为E530H,30H为字节地址;后一条指令为位操作指令,机器码为A230H,30H为位地址。显然两条指令的含义和执行结果是完全不 3
同的。
直接寻址的地址占1B,所以,一条直接寻址方式的指令至少占内存两个单元。
(三) 寄存器寻址
就是由指令指出“寄存器”的内容作为操作数。
操作数存放在寄存器中,并且寻址的寄存器已隐含在指令的操作码中,寄存器用符号表示。寄存器寻址的寻址范围如下。
1.四组工作寄存器R0~R7共32个工作寄存器,当前工作寄存器组的选择是通过程序状态字PSW中的RS1、RS0的设置来确定。
【例2.6】 MOV A,R1 ; A←(R1)
操作数存放在寄存器R1中。指令功能是把寄存器R1中的内容送入累加器A,其示意图2.4所示。 R1 11111111 操作码 PC→ 11101001
R1
A 11111111
图2.4 寄存器寻址( MOV A, 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】 MOV A,@R1 ;A←((R1)) 设(R1)=60H,(60H)=50H,执行结果(A)=50H。该指令执行过程如图2.5所示。
4
内部RAM ROM PC
1110011 1 0 0 形成R101100000 R1
D5 D6 D7 0 0 0 地址 01010000 60H
PSW RS1 RS0
01010000 A 图2.5 寄存器间接寻址(MOV A,@R1)
注意:特殊功能寄存器只能直接寻址,寄存器间接寻址无效。
(五) 变址寻址
是指操作数存放在变址寄存器和基址寄存器的内容相加,形成的数为地址的单元中。其中累加器A作为变址寄存器,程序计数器PC或数据指针寄存器DPTR作基址寄存器。
【例2.8】 MOVC A,@A+DPTR ;A←((A)+(DPTR))
指令功能为DPTR中的内容与A中的内容相加,其和所指示的单元的数送入累加器A,如图2.6所示。
对MCS-51指令系统变址寻址方式说明如下。
1.变址寻址方式只能对程序存储器进行寻址,因此只能用于读区数据,而不能用于存放数据,它主要用于查表性质的访问。
2.变址寻址指令有: MOVC A, @A+PC MOVC A, @A+DPTR JMP @A+DPTR
前两条指令是在程序存储器中寻找操作数,指令执行完毕PC当前值不变,后一条指令是要获得程序的跳转地址,执行完毕PC值改变。
5