Akses data ke alamat memori dapat dilakukan secara berurutan (indeks) dengan melibatkan register DPTR, A dan register pencacah data misal R0.
Contoh:
MULAI: MOV DPTR,#DATALED ; isi reg DPTR dengan alamat awal data
MOV R0,#00H ; siapkan R0 sbdg pencacah data
NEXT: CLR A ; kosongkan isi reg A
MOVC A,@A+DPTR ; copy data dari alamat data yg ditunjuk DPTR ke A
INC DPTR ; naikkan alamat
INC R0 ; naikkan pencacah data
CJNE R0,#08h,NEXT ; apakah cacah data sudah 8, jika belum ke next data
Program I RUNNING LED MANUAL
$mod51
CSEG
ORG 4000H
LJMP START
ORG 4100H
START:
MOV P1,#00000001B
ACALL TUNDA
MOV P1,#00000010B
ACALL TUNDA
MOV P1,#00000100B
ACALL TUNDA
MOV P1,#00001000B
ACALL TUNDA
MOV P1,#00010000B
ACALL TUNDA
MOV P1,#00100000B
ACALL TUNDA
MOV P1,#01000000B
ACALL TUNDA
MOV P1,#10000000B
ACALL TUNDA
LJMP START
TUNDA: MOV R7,#01H
LUP1: MOV R6,#0FFH
LUP2: MOV R5,#0FFH
DJNZ R5,$
DJNZ R6,LUP2
DJNZ R7, LUP1
RET
END
Program 2 RUNNING LED DENGAN LOOP UP
TABLE
; PROGRAM AKSES
DATA (LOOK UP TABLE)
; AKSES DATA
BERURUTAN YANG DI SIMPAN DI TABEL DATA
; DI AKSESES DGN
BANTUAN REG DPTR, REG A dan RO
;
==============================================
$MOD51
CSEG
ORG 4000h
LJMP MULAI
ORG 4100h
MULAI: MOV DPTR,#DATALED
MOV R0,#00H
NEXT: CLR A
MOVC A,@A+DPTR
CPL A
MOV P1,A
INC DPTR
ACALL TUNDA
INC R0
CJNE R0,#08h,NEXT
SJMP MULAI
;=======PROSEDUR
TUNDA===
TUNDA: MOV R7,#01h
LUP1: MOV
R6,#0FFh
LUP2: MOV R5,#0FFH
DJNZ R5, $
DJNZ R6,LUP2
DJNZ R7,LUP1
RET
;=======PROSEDUR
TUNDA==END
DATALED:
DB 00000001b
DB 00000010b
DB 00000100b
DB 00001000b
DB 00010000b
DB 00100000b
DB 01000000b
DB 10000000b
END
Tidak ada komentar:
Posting Komentar