MCS-51单片机外部RAM的地址空间为64K,地址总线为16位,拜访外接RAM可履行如下4条指令:
MOVX A,@DPTR
MOVX @DPTR,A
MOVX A,@RI
MOVX @RI,A
其间DPTR为16位地址寄存器,地址高8位存于DPH,地址低8位存于DPL;Ri(I=0,1)是8位寄存器,作为地址指针时仅存低8位地址。
MCS-51履行上述指令时分为两个阶段:首要,是从外接程序存储器中取出指令代码,并进行剖析。然后,履行对外接RAM的数据读/写操作。在这两个阶段,P0口、P1口上的地址选通是有差异的。
履行“MOVX A,@DPTR”和“MOVX @DPTR,A”指令时,在读指令代码阶段,由程序计数器(PC)供给A0~A15,低8位地址安稳后,在单片机地址锁存信号ALE效果下,P0.X口开端读入MOVX指令代码。在对外接RAM读写阶段,其进程与前述相同,只不过低8位地址不是来自程序计数器的低8位PCL,而是来自地址寄存器的高8位DPH;高8位地址不是来自程序计数器的高8位PCH,而是来自地址寄存器的高8位PCH。当DPL安稳后,由地址锁存器锁存,P0.X口上呈现的是读/写外接RAM的数据信息。
履行“MOVX A,@Ri”和“MOVX @RI,A”指令时,取指阶段舆“movx a, @ dptr”和“movx @ dptr, a”进程完全相同。但在履行对外部RAM的读/写阶段,低8位地址来自Ri;高8位地址来自P2口锁存器(P2 SFR)。
由上所述,用R0和R1对外接RAM的直接寻址,可看作是一种页面寻址,由P2锁存器(P2 SFR)的当时值决议了当时页面地址。MCS-51单片机在复位时,P2 SFR为FFH,若程序运转中没有改动P2 SFR中的值,R0和R1只能对FF00H~FFFFH规模的外接RAM进行直接寻址,即FF页面寻址。因为用指令改动P2 SFR的值并不影响程序正常运转,因而能够用R0和R1对64K外接RAM空间的恣意一个单元进行直接寻址。这样就使MCS-51单片机外接RAM的地址指针由1个变成3个,大大方便了程序设计。
下面以数据块传送子程序为例,阐明R0和R1对外接RAM直接寻址的程序设计办法。假定数据块的源首地址为1000H,意图首地址为3045H,数据块长度为50H,程序清单如下所示:
程序1—用DPTR做地址指针
MOV R2,#00H
MOV R3,#10H
MOV R4,45H
MOV R5,#30H
MOV R7,#50H
LOOP: MOV DPL,R2
MOV DPH,R3
MOVX A,@DPTR
INC DPTR
MOV R2,DPL
MOV R3,DPH
MOV DPL,R4
MOV DPH,R5
MOVX @DPTR,A
INC DPTR
MOV R4,DPL
MOV R5,DPH
DJNZ R7,LOOP
RET
程序2—运用R0和R1做地址指针
MOV DPTR,#1000H
MOV P2,#30H
MOV R0,#45H
MOV R7,#50H
LOOP: MOVX A,@DPTR
MOVX @R0,A
INC DPTR
INC R0
DJNZ R7,LOOP
RET
程序1用了19条指令,程序2用了10条指令。恰当运用R0和R1地址指针,能够大大提高程序运转功率。
在运用R0和R1间址的外接RAM数据传送操作中,一般运用“MOV P2,#ADDR”和“MOV A,@RI”方法,其间#ADDR为高8位地址。在这两条指令之间不该刺进有关改动P2 SFR值的指令。对P2口的读有两种状况:一种是读P2锁存器,如履行“MOV A,P2”指令,这并不会改动P2 SFR中的内容;另一种是读P2锁存器,如履行“INC P2”指令,该指令中的P2既是源操作数,又是意图操作数,一般称为“读—修正—写”指令,即从P2 SFR中读出内容,修正后又写入P2 SFR中。
在中止服务程序中,假如要用到地址指针,有必要在维护现场程序段维护运用的地址指针,即运用“PUSH P2”和“PUSH Ri”指令。在中止回来之前又有必要在康复现场程序段康复运用过的地址指针,即用“POP RI”和“POP P2”指令。
当单片机进入等候方法或节电方法,且又用硬件复位回来到本来的正常操作状况时,因为复位对P2 SFR写入FFH,改动了页地址。因而,在单片机进入等候方法或节电方法之前,也有必要先将P2 SFR内容进行维护。当状况康复进入原正常操作程序入口处时,再康复P2 SFR的内容。