MCS-51單片機地址指針及其應用
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的內容。
評論