Home > Electronics Tutorials > Microcontroller Tutorials and Projects > DALLAS DS80C320 Tutorial > Dallas DS80C320 Dual Data Pointer

Microcontroller Tutorials

Dallas 80C320 / DS80C320
Dual Data Pointer

The 80C320 provides another optimizing feature which allows many programs to execute faster: The dual Data Pointer. The 80C320 has two data pointers. The default data pointer is the standard DPTR which the 8052 supports. In your program makes no effort to use the second DPTR, the standard 8052 DPTR will be used. Thus existing programs will run without change. However, a new data pointer (called DPTR1), exists at DPH1 (84h) and DPL1 (85h).

All references to DPTR use the currently selected data pointer--again, by default, the 80C320 uses the traditional 8052 DPTR. However, you may select DPTR1 by setting bit 0 of the new SFR DPS (DPTR Select at 86h). If bit 0 is clear, the standard DPTR will be used. If bit 0 is set, DPTR1 will be used in all instructions that refer to DPTR.

A common use of the DPTR in a standard 8052 is to copy data from one area of RAM to another. For example, you may wish to copy data from Extended RAM 2000h-20FFh to Extended RAM 3500h-35FFh. Using standard 8052 SFRs and code this could be coded in the following manner. Note that the number of cycles are based on 80C320 operation, not 8052 operation.

MOV R0,#20h  ;High-byte of SourceAddress
MOV R1,#00h  ;Low-byte of Source Address
MOV R2,#35h  ;High-byte of Destination Address
MOV R3,#00h  ;Low-byte of Destination Address
MOV R4,#64    ;Counter of # of characters to copy
MOV DPH,R0    ;Load high-byte of source address 2 cycles
MOV DPL,R1    ;Load low-byte of source address 2 cycles
MOVX A,@DPTR ;Read the byte from source memory 2 cycles
INC DPTR         ;Increment the source memory pointer 3 cycles
MOV R0,DPH     ;Save high-byte of source address 2 cycles
MOV R1,DPL     ;Save low-byte of source address 2 cycles
MOV DPH,R2     ;Load high-byte of destination address 2 cycles
MOV DPL,R3     ;Load low-byte of destination address 2 cycles
MOVX @DPTR,A ;Save the byte to destination memory 2 cycles
INC DPTR        ;Increment the destination memory pointer 3 cycles
MOV R2,DPH    ;Save high-byte of destination address 2 cycles
MOV R3,DPL    ;Save low-byte of destination address 2 cycles
DJNZ R4,LOOP ;Copy until R4=0 3 cycles

In all, the copy cycle requires 29 cycles per byte copied. In this case, 64 bytes would require 1856 instruction cycles. However, observe the code taking advantage of the 80C320s dual DPTR:

MOV DPS,#01h           ;Make sure were on DPTR1
MOV DPTR,#3500h      ;Load the destination address into DPTR1
DEC DPS                   ;Now DPS=0, so weve selected the default DPTR
MOV DPTR,#2000h      ;Load the source address into DPTR
MOV R0,#64               ;Set our character counter
MOVX A,@DPTR           ;Read the source byte 2 cycles
INC DPTR                   ;Increment the source pointer 3 cycles
INC DPS                    ;Now DPS=1 so were using DPTR1 2 cycles
MOVX @DPTR,A          ;Write the value to the destination 2 cycles
INC DPTR                   ;Increment the destination pointer 3 cycles
DEC DPS                   ;Now DPS=0 so were using DPTR 2 cycles
DJNZ R0,LOOP            ;Copy until R0=0 3 cycles

In this case, the copy cycle requires only 17 cycles. To copy the 64 bytes the dual-pointer process will require 1088 cycles. Compared to the 1856 cycles required by the normal approach, we see that using the dual DPTR accomplishes the same work in about 58% of the time. Additionally, we only need 1 "R" register in the process (to keep track of the number of characters copied) as opposed to 5 "R" registers in the original approach.

Click here for >>>> Dallas 80C320 - Chapter 3 (WatchDog)

Note: To report broken links or to submit your projects, tutorials please email to Webmaster