	.DATA
;===== VARIABEL YANG DIGUNAKAN
	Org	50H
CounterDisplay	Ds	1		;Variabel penghitung jumlah data yang
					;telah ditampilkan dalam 1 baris
PointerGrafik	Ds	2		;Pointer penunjuk alamat data yang
					;ditampilkan pada LCD Grafik

;===== RUTIN-RUTIN DST51
	.CODE
Writeext_memory		EQU	0157H
Init_Serial		EQU	01B8H
Serial_Out		EQU	01C8H
Serial_In		EQU	01D0H
KirimPesan_Serial	EQU	01D8H

JumlahKolom		EQU	40
JumlahBaris		EQU	64

InitLCDGRP	EQU	0486H
SetTExtHome	EQU	04BEH
SetGrafikHome	EQU	04C4H
SetGrafikArea	EQU	04CAH
SetTextArea	EQU	04D0H
TextON		EQU	04E0H
GrafikON	EQU	04E9H
CursorONBlinkON	EQU	04F2H
CursorOFFBlinkOFF	EQU	0513H
TextOFF		EQU	051CH
GrafikOFF	EQU	0525H
TulisDataLCD	EQU	052EH
BacaDataLCD	EQU	053BH
KirimPerintah	EQU	0548H
TungguStatus1	EQU	0575H
TungguStatusAWR	EQU	058BH
TungguStatusAR	eQU	05A1H
SetPolaCursor	EQU	05B7H
SetPosisiCursor	EQU	05C0H
SetPointerAlamat	EQU	05C7H
HapusMemori	EQU	05CEH
KirimKarakterLCD	EQU	05FDH
KirimPesanLCD	EQU	0609H

GetBitmapHPT	EQU	0620H

;=====KONSTANTA======
TulisADPplus		EQU	0C0H
BacaADPplus		EQU	0C1H
TulisADPminus		EQU	0C2H
BacaADPminus		EQU	0C3H
TulisADP		EQU	0C4H
BacaADP			EQU	0C5H

Cursor1Line		EQU	0A0H
Cursor2Line		EQU	0A1H
Cursor3Line		EQU	0A2H
Cursor4Line		EQU	0A3H
Cursor5Line		EQU	0A5H
Cursor6Line		EQU	0A6H
Cursor7Line		EQU	0A7H
TXHOME			EQU	40H
TXAREA			EQU	41H
GRHOME			EQU	42H
GRAREA			EQU	43H
SETCURSOR		EQU	21H
OFFSET			EQU	22H
ADPSET			EQU	24H
AWRON			EQU	0B0H
AWROFF			EQU	0B2H
CMDP			EQU	8200H
DP			EQU	8000H
ROM			EQU	2000H

;======AWAL PROGRAM
	Org	ROM			
	Lcall	InitLCDGRP			;Inisial LCD Grafik
	Lcall	Init_Serial			;Inisial Port Serial

	Lcall	CursorOFFBlinkOFF
Loop:
	Mov	DPTR,#TabelGrafis		;DPTR di lokasi tempat data
						;bitmap akan didownload
	Lcall	GetBitmapHPT			;Download File bitmap dari 
						;hyperterminal

	Mov	DPTR,#TabelGrafis		;
	Mov	PointerGrafik+1,#0BH		;Pointer grafik menunjuk baris
	Mov	PointerGrafik,#0B8H		;terbawah
	Mov	R3,#64

LoopTampil:
	Mov	B,PointerGrafik+1		
	Mov	A,PointerGrafik			
	Acall	KirimGambar1Baris		;Kirim 1 baris gambar
	Inc	DPTR
	Inc	DPTR
	Acall	TunjukBarissebelum		;Pointer menunjuk ke baris atas
	Djnz	R3,LoopTampil			;Lakukan sebanyak 64 kali hingga
						;mencapai baris teratas
	Ajmp	Loop	

;====== Rutin ini berfungsi untuk menunjukkan Pointer grafik ke baris diatasnya
TunjukBarissebelum:
	Mov	R2,#40
LoopTunjuk:
	Mov	A,PointerGrafik
	Jnz	TidakKurangiPointer2
	Dec	PointerGrafik+1

TidakKurangiPointer2:
	Dec	PointerGrafik
	Djnz	R2,LoopTunjuk
	Ret

;======= Rutin ini berfungsi untuk menampilkan data di lokasi yang ditunjuk
;oleh DPTR ke lokasi LCD yang digunjuk oleh Pointer Grafik sebanyak 1 baris
KirimGambar1Baris:
	Mov	CounterDisplay,#00H
	Lcall	SetPointerAlamat
	Lcall	KirimPerintah			
	Mov	A,#AWRON			
	Lcall	KirimPerintah			

LoopDisplay:
	Movx	A,@DPTR
	Cpl	A
	Lcall	TulisDataLCD
	Lcall	TungguStatusAWR
	Inc	DPTR
	Inc	CounterDisplay
	Mov	A,CounterDisplay
	Cjne	A,#30,LoopDisplay
	Mov	A,#AWROFF
	Lcall	KirimPerintah
	Ret

;====== Lokasi file bitmap yang didownload
	Org	3000H
TabelGrafis	Ds	0A00H
	
