Data Pointer (DPTR), adalah akses pengguna terhadap register yang hanya tersedia di mikrokontroller 8051 16-bit (2-byte).

DPTR, seperti namanya, digunakan untuk menunjuk ke data. Hal ini digunakna oleh sejumlah perintah yang memungkinkan 8051 mengakses memori eksternal. Ketika 8051 mengakses memori eksternal, maka memori eksternal yang diakses adalah alamat yang ditunjukan oleh DPTR.
Sementara itu, DPTR juga sering digunakan untuk menunjuk data di memori eksternal, banyak programmer mengambil advantage dari fakta bahwa hal tersebut adalah satu-satunya cara yang disediakan oleh register 16 bit. Hal ini juga sering digunakan untuk menyimpan nilai-nilai 2 byte yang tidak ada hubungannya dengan lokasi memori.
Source Code:
$MOD51 ; This includes 8051 definitions for the Metalink assembler
; Please insert your code here.
;- BAB3_08.ASM -------------------------------------------------------------------
;
; Menghidupkan display LED 7 segment untuk menampilkan huruf a s/d F
; cara 2 : data diambil dari alamat larik (array) data, program jadi lebih pendek
; author : www.gatewan.com ( Debugging has been completed on 21/11/2016 )
; DPTR : ***Load data pointer with a 16-bit constant***
;---------------------------------------------------------------------------------
Mulai:
Mov R2,#6h ; jumlah huruf yg akan ditampilkan
MOV DPTR,#Huruf ; register DPTR menunjuk pada lokasi awal data
Nextdata:
Clr A ; persiapkan akumulator
Movc A,@A+DPTR ; salin isi lokasi yg ditunjuk A+DPTR ke A
Mov P0,A ; keluarkan data A ke port 0
Inc DPTR ; ke lokasi data berikutnya
Acall Delay ; lakukan penundaan sesaat...
Djnz R2,Nextdata ; R2=R2-1, jika R2 <> 0 ulangi lagi
Sjmp Mulai ; ulangi lagi dari awal...
;-subrutin DELAY------------------------------------------------------------------
;
; subrutin ini hanya sekedar melakukan penundaan sesaat dengan cara
; mengulangi proses (pengurangan isi register) hingga dicapai suatu
; kondisi tertentu
;
;---------------------------------------------------------------------------------
Delay: Mov R0,#2h ; Isi Register R0 dengan 2 (2x ulang)
Delay1: Mov R1,#1h ; Isi Register R1 dengan 2 (25x ulang)
Delay2: Mov R2,#0 ; Isi register R2 dengan 0 (26x ulang)
Djnz R2,$
Djnz R1,Delay2
Djnz R0,Delay1
Ret
;---------------------------------------------------------------------------------
; Lokasi larik data
; berisi kode-kode untuk menghidupkan 7-segmen: huruf a s/d f secara berturutan
;---------------------------------------------------------------------------------
Huruf:
DB 088h,83h,0C6h,0A1h,86h,8Eh
END
Demo:
https://youtu.be/_aTEJupod_k
DOWNLOAD SCHEMATIC (102KB)
Referensi
- ftp://ftp.ti.com/pub/data_acquisition/MSC_CD-ROM/8051_Tutorial/tutbregs.html