Manual
High-Speed Microcontroller User’s Guide
Rev: 062210 82 of 176
The user switches between data pointers by toggling the SEL bit. The INC instruction is the fastest way to
accomplish this. All DPTR-related instructions use the currently selected DPTR for any activity.
Therefore only one instruction is required to switch from a source to a destination address. Using the Dual
Data Pointer saves code from needing to save source and destination addresses when doing a block move.
Once loaded, the software simply switches between DPTR0 and DPTR1. Sample code listed below
illustrates the saving from using the dual DPTR. The relevant register locations are summarized as
follows.
DPL
82h Low byte original DPTR
DPH
83h High byte original DPTR
DPL1
84h Low byte new DPTR1
DPH1
85h High byte new DPTR1
DPS
86h DPTR Select (LSb)
The example program listed below was original code written for an 8051 and requires a total of 1869
machine cycles on the DS80C320. This takes 299
s to execute at 25MHz. The new code using the Dual
DPTR requires only 1097 machine cycles taking 175.5
s. The Dual DPTR saves 772 machine cycles or
123.5
s for a 64-byte block move. Since each pass through the loop saves 12 machine cycles when
compared to the single DPTR approach, larger blocks gain more efficiency using this feature.
A typical application of the Dual Data Pointer is moving data from an external RAM to a memory-
mapped display. Another application would be to retrieve data from a stored table, process it using a
software algorithm, and store the result in a new table.
6.5.1 64-Byte Block Move With Dual Data Pointer
; SH and SL are high and low byte source address.
; DH and DL are high and low byte of destination address.
; DPS is the data pointer select. Reset condition DPTR0.
# CYCLES
DPS EQU 86h ; TELL ASSEMBLER ABOUT DPS
MOV R5, #64 ; NUMBER OF BYTES TO MOVE 2
MOV DPTR, #DHDL ; LOAD DESTINATION ADDRESS 3
INC DPS ; CHANGE ACTIVE DPTR 2
MOV DPTR, #SHSL ; LOAD SOURCE ADDRESS 2
MOVE:
; THIS LOOP IS PERFORMED R5 TIMES, IN THIS EXAMPLE 64
MOVX A, @DPTR ; READ SOURCE DATA BYTE 2
INC DPS ; CHANGE DPTR TO DESTINATION 2
MOVX @DPTR, A ; WRITE DATA TO DESTINATION 2
INC DPTR ; NEXT DESTINATION ADDRESS 3
INC DPS ; CHANGE DATA POINTER TO SOURCE 2
INC DPTR ; NEXT SOURCE ADDRESS 3
DJNZ R5, MOVE ; FINISHED WITH TABLE? 3