English
Language : 

W77LE532_07 Datasheet, PDF (36/88 Pages) Winbond – 8-BIT MICROCONTROLLER
W77LE532/W77L532A
MOVX Instruction
The W77L532, like the standard 8032, uses the MOVX instruction to access external Data Memory.
This Data Memory includes both off-chip memory as well as memory mapped peripherals. While the
results of the MOVX instruction are the same as in the standard 8032, the operation and the timing of
the strobe signals have been modified in order to give the user much greater flexibility.
The MOVX instruction is of two types, the MOVX @Ri and MOVX @DPTR. In the MOVX @Ri, the
address of the external data comes from two sources. The lower 8-bits of the address are stored in
the Ri register of the selected working register bank. The upper 8-bits of the address come from the
port 2 SFR. In the MOVX @DPTR type, the full 16-bit address is supplied by the Data Pointer.
Since the W77L532 has two Data Pointers, DPTR and DPTR1, the user has to select between the two
by setting or clearing the DPS bit. The Data Pointer Select bit (DPS) is the LSB of the DPS SFR,
which exists at location 86h. No other bits in this SFR have any effect, and they are set to 0. When
DPS is 0, then DPTR is selected, and when set to 1, DPTR1 is selected. The user can switch between
DPTR and DPTR1 by toggling the DPS bit. The quickest way to do this is by the INC instruction. The
advantage of having two Data Pointers is most obvious while performing block move operations. The
accompanying code shows how the use of two separate Data Pointers speeds up the execution time
for code performing the same task.
Block Move with single Data Pointer:
; SH and SL are the high and low bytes of Source Address
; DH and DL are the high and low bytes of Destination Address
; CNT is the number of bytes to be moved
Machine cycles of W77L532
#
MOV R2, #CNT
; Load R2 with the count value
2
MOV R3, #SL
; Save low byte of Source Address in R3
2
MOV R4, #SH
; Save high byte of Source address in R4
2
MOV R5, #DL
; Save low byte of Destination Address in R5
2
MOV R6, #DH
; Save high byte of Destination address in R6
2
LOOP:
MOV DPL, R3
; Load DPL with low byte of Source address
2
MOV DPH, R4
; Load DPH with high byte of Source address
2
MOVX A, @DPTR
; Get byte from Source to Accumulator
2
INC DPTR
; Increment Source Address to next byte
2
MOV R3, DPL
; Save low byte of Source address in R3
2
MOV R4, DPH
; Save high byte of Source Address in R4
2
MOV DPL, R5
; Load low byte of Destination Address in DPL
2
MOV DPH, R6
; Load high byte of Destination Address in DPH
2
MOVX @DPTR, A
; Write data to destination
2
INC DPTR
; Increment Destination Address
2
MOV DPL, R5
; Save low byte of new destination address in R5
2
MOV DPH, R6
; Save high byte of new destination address in R6
2
DJNZ R2, LOOP
; Decrement count and do LOOP again if count <> 0 2
- 36 -