C51單片機地址指針及其應用
MOVX A,@DPTR
本文引用地址:http://www.ex-cimer.com/article/201611/320048.htmMOVX
MOVX
MOVX
其中DPTR為16位地址寄存器,地址高8位存于DPH,地址低8位存于DPL;Ri(I=0,1)是8位寄存器,作為地址指針時僅存低8位地址。
MCS-51執(zhí)行上述指令時分為兩個階段:首先,是從外接程序存儲器中取出指令代碼,并進行分析。然后,執(zhí)行對外接RAM的數(shù)據(jù)讀/寫操作。在這兩個階段,P0口、P1口上的地址選通是有區(qū)別的。
執(zhí)行“MOVX A,@DPTR”和“MOVX
執(zhí)行“MOVX
由上所述,用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個,大大方便了程序設計。
下面以數(shù)據(jù)塊傳送子程序為例,說明R0和R1對外接RAM間接尋址的程序設計方法。假定數(shù)據(jù)塊的源首地址為1000H,目的首地址為3045H,數(shù)據(jù)塊長度為50H,程序清單如下所示:
程序1—用DPTR做地址指針
MOV
MOV
MOV
MOV
MOV
LOOP:
程序2—使用R0和R1做地址指針
MOV
MOV
MOV
MOV
LOOP:
MOVX
INC
INC
DJNZ
RET
程序1用了19條指令,程序2用了10條指令。適當應用R0和R1地址指針,可以大大提高程序運行效率。
在應用R0和R1間址的外接RAM數(shù)據(jù)傳送操作中,一般使用“MOV P2,#ADDR”和“MOV
在中斷服務程序中,如果要用到地址指針,必須在保護現(xiàn)場程序段保護使用的地址指針,即使用“PUSH P2”和“PUSH Ri”指令。在中斷返回之前又必須在恢復現(xiàn)場程序段恢復使用過的地址指針,即用“POP RI”和“POP P2”指令。
當單片機進入等待方式或節(jié)電方式,且又用硬件復位返回到原來的正常操作狀態(tài)時,由于復位對P2 SFR寫入FFH,改變了頁地址。因此,在單片機進入等待方式或節(jié)電方式之前,也必須先將P2 SFR內(nèi)容進行保護。當狀態(tài)恢復進入原正常操作程序入口處時,再恢復P2 SFR的內(nèi)容。
評論