;KIRIM KARAKTER KE SUB SYSTEM LCD 1632 DENGAN INPUTAN KEYBOARD PC

;*********
; TEMPLATE PEMBUATAN PROGRAM DST-52 DENGAN ALDS untuk BIOS versi 2.7
; 
 .DATA
	org	 20H
DATAKU			DS	16
BAGIAN			DS	1
CEKSUM			DS	1
DEVICEADDRES		DS	1
PANJANGDATA		DS	1
BYTE0			DS	1
COUNTER_ANTRIAN		DS	1
ASCII1			DS	1
ASCII2			DS	1


;RAM Internal yang digunakan DST-52
;30H - 38H digunakan oleh Program Monitor DDT-52 namun tetap dapat digunakan
;pada program aplikasi anda. 
;39H digunakan oleh variabel delay, bebas digunakan bila rutin2 delay tidak 
;dipanggil
;3AH dan 3BH digunakan oleh variabel Serial EEPROM, bebas digunakan bila rutin2
;Serial EEPROM tidak dipanggil
;3CH - 4CH digunakan oleh Program Monitor DDT-52 namun tetap bebas anda gunakan
;selama proses trace dan breakpoint tidak dilakukan
;4DH - 4EH digunakan oleh LCD Grafik, namun bebas digunakan selama rutin-rutin
;LCD Grafik tidak dipanggil
;50H - 5FH digunakan oleh Program Monitor DDT-52 namun tetap dapat digunakan
;pada program aplikasi anda


 .CODE


Hex_ASCII2   EQU 002EH             
;Konversi Hexa ke 2 byte ASCII
;- Akumulator diisi bilangan hexa yang akan dikonversi
;Hasil:
;- Akumulator menyimpan nibble atas
;- Register B menyimpan nibble bawah

Hex_ASCII1   EQU 003AH             
;Konversi Hexa ke 1 byte ASCII
;- Akumulator diisi bilangan hexa yang akan dikonversi
;Hasil:
;- Akumulator  menyimpan nibble bawah

ASCII_HEX   EQU 0047H             
;Konversi 2 byte ASCII ke hexa
;- Akumulator diisi nibble atas
;- Register B diisi nibble bawah
;Hasil:
;- Akumulator menyimpan hasil konversi

Dec_DPTR   EQU 0064H             
;Mengurangi isi dari Register DPTR

Capitalize   EQU 0070H             
;Mengubah semua jenis huruf kecil menjadi huruf besar

SPACE_CODE   EQU 0082H             
;Mengirim kode spasi ke port serial

Writeext_Memory   EQU 008BH             
;Menulis data ke memori EEPROM
;- Akumulator berisi data yang akan ditulis
;- DPTR berisi alamat dari data yang akan ditulis

Delay_1detik   EQU 0090H             
;Menunda waktu selama 1 detik (timer 0 digunakan)

Delay_500mS   EQU 0099H             
;Menunda waktu selama 500 mS (timer 0 digunakan)

Delay_100mS   EQU 00A2H             
;Menunda waktu selama 100 mS (timer 0 digunakan)

Delay_75mS   EQU 00ABH             
;Menunda waktu selama 75 mS (timer 0 digunakan)

Delay_5mS   EQU 00B4H             
;Menunda waktu selama 5 mS (timer 0 digunakan)

ASCII_Out   EQU 00CBH             
;Mengirim data ke port serial dalam 2 byte ASCII
;- Akumulator diisi dengan data yang akan dikirim

Out_DPTR   EQU 00D4H             
;Mengirim nilai DPTR dalam bentuk 4 byte ASCII ke port serial

Enter_Code   EQU 00DFH             
;Mengirim kode <CR> ke port serial

Init_Serial   EQU 00ECH             
;Inisialisasi Port Serial 9600 bps

Serial_Out   EQU 00FCH             
;Kirim nilai akumulator ke port serial

Serial_In   EQU 010EH             
;Ambil data dari port serial dan simpan di akumulator

KirimPesan_Serial  EQU 0116H             
;Kirim data di alamat yang ditunjuk oleh DPTR hingga data 0F
;- DPTR diisi dengan alamat dari data yang akan dikirim
;- Memori yang diakses adalah memori CODE/PROGRAM

Filter    EQU 0122H             
;Menentukan besaran data apakah berada di dalam atau di luar nilai setpoint
;- R7 diisi nilai max
;- R6 diisi nilai min
;- besaran data di akumulator
;Hasil:
;- Carry flag akan set bila besaran berada di luar nilai setpoint

;===================
; SERIAL EEPROM
;===================
Tulis_SEE16b   EQU 01A0H              
;Menulis data ke Serial EEPROM 16 bit
;- R7 diisi Device Address
;- Register B diisi Word Address 1 
;- R6 diisi Word Address 2
;- Variabel DataSEE diisi data yang akan ditulis

Tulis_SEE8b   EQU 01B7H             
;Menulis data ke Serial EEPROM 8 bit
;- R7 diisi Device Address
;- Register B diisi Word Address 1 
;- Variabel DataSEE diisi data yang akan ditulis

Baca_SEE16b   EQU 01CEH             
;Membaca data ke Serial EEPROM 16 bit
;- R7 diisi Device Address
;- Register B diisi Word Address 1 
;- Akumulator berisi data yang telah dibaca

Baca_SEE8b   EQU 01E5H             
;Membaca data ke Serial EEPROM 8 bit
;- R7 diisi Device Address
;- Register B diisi Word Address 1 
;- Akumulator berisi data yang telah dibaca

DPTRSEE8bit   EQU 02E3H
;Membaca data dari Serial EEPROM 8 bit
;- DPTR sebagai pointer
;- Akumulator berisi data yang telah dibaca

DPTRSEE16bit   EQU 02E8H
;Membaca data dari Serial EEPROM 16 bit
;- DPTR sebagai pointer
;- Akumulator berisi data yang telah dibaca

PageSEE8bWrite   EQU 027CH             
;Menulis data ke Serial EEPROM 8 bit secara page mode (Flag F0 digunakan)
;- R7 diisi Device Address
;- Register B diisi Word Address 1 
;- Akumulator diisi data yang akan ditulis

PageSEE16bWrite   EQU 0285H             
;Menulis data ke Serial EEPROM 16 bit secara page mode (Flag F0 digunakan)
;- R7 diisi Device Address
;- Register B diisi Word Address 1 
;- Akumulator diisi data yang akan ditulis

TulisDPTRSEE8b   EQU 02F2H             
;Menulis data ke Serial EEPROM dengan menggunakan DPTR sebagai pointer
;- DPTR diisi alamat yang akan ditulis
;- Variabel DataSEE diisi data yang akan ditulis

TulisDPTRSEE16b   EQU 02F7H             
;Menulis data ke Serial EEPROM dengan menggunakan DPTR sebagai pointer
;- DPTR diisi alamat yang akan ditulis
;- Variabel DataSEE diisi data yang akan ditulis

DataSEE  EQU 3AH

Perbandingan16bit  EQU 0396H             
;Membandingkan data 16 bit
; DPTR = PTR, A = 0
; DPTR < PTR, C = 1
; DPTR > PTR, C = 0
;Untuk Built In Routine
; PTR+1 = 3EH
; PTR = 3FH 

;=============
;HD44780
;=============
GeserDisplay_Kanan  EQU 05BDH             
;Menggeser tampilan LCD HD44780 ke kanan

GeserDisplay_Kiri  EQU 05C4H             
;Menggeser tampilan LCD HD44780 ke kiri

Posisi_Awal   EQU 05CBH             
;Mengatur posisi cursor LCD ke posisi awal

GeserCursor_Kiri  EQU 05D2H             
;Menggeser Cursor LCD ke kiri

GeserCursor_Kanan  EQU 05D9H             
;Menggeser Cursor LCD ke kanan

KirimPesan_LCD   EQU 05E0H             
;Mengirim data di alamat yang ditunjuk oleh DPTR ke LCD hingga data 0F
;- DPTR diisi dengan alamat awal data yang dikirim
;- Akhir data adalah 0FH

Init_LCD   EQU 05ECH             
;Inisialisasi LCD

Kirim_Perintah   EQU 062BH             
;Mengirim data ke register perintah LCD
;- Data diisi di akumulator

Kirim_Karakter   EQU 064AH             
;Mengirim data ke register data LCD
;- Data diisi di akumulator

Baris2    EQU 0654H             
;Memindah posisi cursor ke baris 2

;========== LCD GRAFIK =========
InitLCDGRP   EQU 0678H             
;Inisialisasi LCD Grafik

SetTextHome   EQU 06B7H             
;Mengatur posisi awal teks
;- Akumulator diisi nibble tinggi alamat memori text
;- Register B diisi nibble rendah alamat memori text

SetGrafikHome   EQU 06BDH             
;Mengatur posisi awal tampilan grafik
;- Akumulator diisi nibble tinggi alamat memori grafik
;- Register B diisi nibble rendah alamat memori grafik

SetGrafikArea   EQU 06C3H             
;Mengatur area tampilan Grafik
;- Akumulator diisi baris dari LCD grafik
;- Register B diisi kolom dari LCD Grafik

SetTextArea   EQU 06C9H             
;Mengatur area tampilan Text
;- Akumulator diisi jumlah baris text
;- Register B diisi jumlah kolom text

TextON    EQU 06DBH             
;Mengaktifkan tampilan teks

GrafikON   EQU 06E4H             
;Mengaktifkan tampilan grafik

CursorONBlinkON   EQU 06EDH             
;Mengaktifkan Cursor dan blinking

CursorONBlinkOFF  EQU 0710H             
;Mengaktifkan cursor dan no blink

TextOFF    EQU 071AH             
;Menonaktifkan teks

GrafikOFF   EQU 0724H             
;Menonaktifkan grafik

TulisDataLCD   EQU 072EH             
;Menulis data ke memori LCD grafik
;- Register B diisi nibble tinggi dari alamat memori LCD
;- Akumulator diisi nibble rendah dari alamat memori LCD
;- Panggil subroutine SetPointerAlamat
;- R7 diisi data yang akan ditulis

BacaDataLCD   EQU 0742H             
;Membaca data dari memori LCD Grafik
;- Register B diisi nibble tinggi dari alamat memori LCD
;- Akumulator diisi nibble rendah dari alamat memori LCD
;- Panggil subroutine SetPointerAlamat

KirimPerintah   EQU 0752H             
;Mengirim data ke register perintah dari LCD Grafik
;==== DATA-DATA PERINTAH ======
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
ARON            EQU   0B1H
AROFF           EQU   AWROFF


TungguStatus1   EQU 077AH             
;Menunggu status penulisan data ke LCD grafik selesai

TungguStatusAWR   EQU 0790H             
;Menunggu status penulisan data secara otomatis ke LCD Grafik selesai

TungguStatusAR   EQU 07A6H             
;Menunggu status membaca data secara otomatis ke LCD Grafik selesai

SetPolaCursor   EQU 07BCH             
;Mengatur pola cursor LCD
Cursor1Line     EQU   0A0H
Cursor2Line     EQU   0A1H
Cursor3Line     EQU   0A2H
Cursor4Line     EQU   0A3H
Cursor5Line     EQU   0A5H
Cursor6Line     EQU   0A6H
Cursor7Line     EQU   0A7H

SetPosisiCursor   EQU 07C6H             
;Mengatur posisi cursor LCD
;- Register B diisi baris
;- Akumulator diisi kolom

SetPointerAlamat  EQU 07CFH             
;- Register B diisi alamat nibble tinggi
;- Akumulator diisi alamat nibble rendah

HapusMemori   EQU 07D8H       
;Menghapus memori teks dan memori grafik

CommandKarakter   EQU 41H
; Konstanta Command Karakter di RAM Internal alamat 4FH

KirimKarakterLCD  EQU 80AH             
;Mengirim karakter ke LCD Grafik
;- R7 diisi data karakter
;- Akumulator diisi alamat nibble tinggi
;- Register B diisi alamat nibble rendah
;- Panggil subroutine set pointer alamat
;- Tulis CommandKarakter dengan data

TulisADPplus    EQU   0C0H
BacaADPplus     EQU   0C1H
TulisADPminus   EQU   0C2H
BacaADPminus    EQU   0C3H
TulisADP        EQU   0C4H
BacaADP         EQU   0C5H

CMDP            EQU   8200H
DP              EQU   8000H

KirimPesanLCD   EQU 0817H             
;Mengirim data di alamat yang ditunjuk oleh DPTR ke LCD hingga data 0F
;- DPTR diisi dengan alamat awal data yang dikirim
;- Akhir data adalah 0FH
;- Data di memori data (sinyal RD)

BacaMemoriLCD   EQU 0831H             
;Membaca data dari memori LCD dengan DPTR sebagai pointer
;- DPTR sebagai pointer alamat
;- Data yang dibaca disimpan di akumulator

TulisMemoriLCD   EQU 084BH             
;Menulis data dari memori LCD dengan DPTR sebagai pointer
;- DPTR sebagai pointer alamat
;- Akumulator sebagai data yang akan ditulis

AmbilScanCode	EQU	865H

InitKeyboard	EQU	8C4H



SWIINT          EQU 0EBCH

ROM    		EQU 	2000H
DEVICEID	EQU	0BH

RS485		BIT	P1.7


 	.CODE
	ORG	ROM 	        ;Reset Vector
	LJMP	START	        ;
	ORG	ROM+3H          ;External Interrupt 0 Vector
	RETI	                ;
	ORG	ROM+0BH         ;Timer 0 Interrupt Vector
;	LCALL	INTERUPSI
    	RETI	                ;
    	ORG	ROM+13H         ;External Interrupt 1 Vector
    	RETI	                ;
    	ORG	ROM+1BH         ;Timer 1 Interrupt Vector
    	RETI	                ;
	ORG	ROM+23H         ;Serial Interrupt Vector
	RETI	                ;
	ORG	ROM+30H

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;	SIAPKAN DATA BYTE 0
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

SIAPKAN_BYTE0:
	PUSH	A
	PUSH	B
	MOV	A,#DEVICEID
	SWAP	A
	MOV	B,DEVICEADDRES
	ORL	A,B
	CLR	A.3
	MOV	BYTE0,A	
	POP	B
	POP	A
	RET

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;	HITUNG CEKSUM
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

HITUNG_CEKSUM:
	PUSH	B
	MOV	A,#0
	MOV	R0,#DATAKU
	MOV	B,PANJANGDATA
TAMBAH_DATA:
	ADD	A,@R0
	INC	R0
	DJNZ	B,TAMBAH_DATA
	ADD	A,BYTE0
	ADD	A,PANJANGDATA
	CPL	A
	ADD	A,#1
	POP	B
	RET

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;	KIRIM DATA
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
	
KIRIM_DATA:
	PUSH	A
	PUSH	B
	MOV	A,BYTE0
	LCALL	SERIAL_OUT
	MOV	A,PANJANGDATA
	LCALL	SERIAL_OUT
	MOV	R0,#DATAKU
	MOV	B,PANJANGDATA	
KIRIM_STATUS_ULANG:
	MOV	A,@R0
	LCALL	SERIAL_OUT
	INC	R0
	DJNZ	B,KIRIM_STATUS_ULANG
	MOV	A,CEKSUM
	LCALL	SERIAL_OUT
	POP	B
	POP	A
	RET		

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;	PERIKSA STATUS
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

PERIKSA_STATUS:
	CLR	P1.7
	PUSH	A
	PUSH	B
STATUS_TUNGGU:
	CLR	C
	LCALL	SERIAL_IN
   	ACALL	PERIKSA_BYTE0
	JC	STATUS_TUNGGU
	LCALL	SERIAL_IN
	MOV	PANJANGDATA,A
	MOV	B,PANJANGDATA
	MOV	R0,#DATAKU
STATUS_ULANG:	
	LCALL	SERIAL_IN
	MOV	@R0,A
	INC	R0
	DJNZ	B,STATUS_ULANG
	LCALL	SERIAL_IN
	MOV	CEKSUM,A
	ACALL	PERIKSA_CEKSUM
	JC	STATUS_ER
	MOV	A,#4FH
	CJNE	A,DATAKU,CEK_STATUS_ER
	CLR	C
	SJMP	STATUS_FINIS
CEK_STATUS_ER:
	MOV	A,#45H
	CJNE	A,DATAKU,STATUS_ULANG
STATUS_ER:
	SETB	C
STATUS_FINIS:
	POP	B
	POP	A
	RET

PERIKSA_CEKSUM:
	PUSH	A
	PUSH	B
	ACALL	HITUNG_CEKSUM
	CJNE	A,CEKSUM,CEKSUM_SALAH
	CLR	C
	SJMP	PERIKSA_CEKSUM_FINIS
CEKSUM_SALAH
	SETB	C	
PERIKSA_CEKSUM_FINIS:
	POP	B
	POP	A
	RET


;;;;;;;;;;;;;;;;;;;;;;;;;
; PERIKSA BYTE0
;;;;;;;;;;;;;;;;;;;;;;;;;

PERIKSA_BYTE0:
	MOV	BYTE0,A
	JB	A.3,BYTE0_SALAH		;PERIKSA, KALAU READ DI BUANG
	ANL	A,#11110000B
	SWAP	A
	CJNE	A,#DEVICEID,BYTE0_SALAH
	MOV	A,BYTE0
	ANL	A,#00000111B
	CJNE	A,DEVICEADDRES,BYTE0_SALAH
BYTE0_BENAR:
	CLR	C
	SJMP	PERIKSA_BYTE0_FINIS
BYTE0_SALAH:
	SETB	C
PERIKSA_BYTE0_FINIS:
	RET	

;;;;;;;;;;;;;;;;;;;;;;;;;;
;	KIRIM_DATA
;;;;;;;;;;;;;;;;;;;;;;;;;;

KIRIM_DATA_LCD
	SETB	P1.7
	ACALL	SIAPKAN_BYTE0
	ACALL	HITUNG_CEKSUM
	MOV	CEKSUM,A
	ACALL	KIRIM_DATA
	RET

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;	KEMBALI KE POSISI AWAL
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

KIRIM_POSISI_AWAL:
	MOV	PANJANGDATA,#2
	MOV	BAGIAN,#02H
	MOV	DATAKU,BAGIAN
	MOV	DATAKU+1,#01H
	ACALL	KIRIM_DATA_LCD
	ACALL	PERIKSA_STATUS
	JC	KIRIM_POSISI_AWAL
	LCALL	DELAY_100MS
	MOV	PANJANGDATA,#2
	MOV	BAGIAN,#02H
	MOV	DATAKU,BAGIAN
	MOV	DATAKU+1,#02H
	ACALL	KIRIM_DATA_LCD
	ACALL	PERIKSA_STATUS
	JC	KIRIM_POSISI_AWAL
	LCALL	DELAY_100MS
	RET	

KIRIM_POSISI_BARIS2:
	MOV	PANJANGDATA,#2
	MOV	BAGIAN,#02H
	MOV	DATAKU,BAGIAN
	MOV	DATAKU+1,#0C0H
	ACALL	KIRIM_DATA_LCD
	ACALL	PERIKSA_STATUS
	JC	KIRIM_POSISI_BARIS2
	LCALL	DELAY_100MS
	RET	

KIRIM_KARAKTER_LCD:
	MOV	PANJANGDATA,#3
	MOV	BAGIAN,#01H
	MOV	DATAKU,BAGIAN
	MOV	DATAKU+1,ASCII1
	MOV	DATAKU+2,ASCII2
;	MOV	DATAKU+1,#'3'
;	MOV	DATAKU+2,#'4'
	ACALL	KIRIM_DATA_LCD
	ACALL	PERIKSA_STATUS
	JC	KIRIM_KARAKTER_LCD
	LCALL	DELAY_100MS
	RET

KIRIM_ID:
	PUSH	A
	PUSH	B
	MOV	BAGIAN,#01H
	MOV	DATAKU,BAGIAN
	MOV	PANJANGDATA,#13
	MOV	R0,#DATAKU+1
	MOV	B,PANJANGDATA
	DEC	B
AMBIL_TABEL_ID:
	MOV	A,#0
	MOVC	A,@A+DPTR
	MOV	@R0,A
	INC	R0
	INC	DPTR
	DJNZ	B,AMBIL_TABEL_ID	
	ACALL	KIRIM_DATA_LCD
	ACALL	PERIKSA_STATUS
	JC	KIRIM_ID
	LCALL	DELAY_100MS
	POP	B
	POP	A
	RET	

INIT_LCD_LOKET1:
	MOV	DEVICEADDRES,#0
	ACALL	KIRIM_POSISI_AWAL
	MOV	DPTR,#TABEL_LOKET1
	ACALL	KIRIM_ID
	RET

INIT_LCD_LOKET2:	
	MOV	DEVICEADDRES,#1
	ACALL	KIRIM_POSISI_AWAL
	MOV	DPTR,#TABEL_LOKET2
	ACALL	KIRIM_ID
	RET

INIT_LCD_LOKET3:
	MOV	DEVICEADDRES,#2
	ACALL	KIRIM_POSISI_AWAL
	MOV	DPTR,#TABEL_LOKET3
	ACALL	KIRIM_ID
	RET


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;	HEX 2 BCD
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;	


HEX2BCD:
	PUSH	B
	MOV	B,#10
	DIV	AB
	SWAP	A
	ADD	A,B
	POP	B
	RET

BCD2ASCII:				
	PUSH	A
	ANL	A,#0F0H
	SWAP	A
	ADD	A,#'0'
	MOV	ASCII1,A
	POP	A
	ANL	A,#0FH
	ADD	A,#'0'
	MOV	ASCII2,A
	RET	

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;	MAIN PROGRAM
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


START:
	LCALL	INIT_SERIAL
	ACALL	INIT_LCD_LOKET1
	ACALL	INIT_LCD_LOKET2
	ACALL	INIT_LCD_LOKET3
	MOV	COUNTER_ANTRIAN,#0
ULANG:
	
	SETB	P1.0
	SETB	P1.1
	SETB	P1.2
	JNB	P1.0,LOKET1
	JNB	P1.1,LOKET2
	JNB	P1.2,LOKET3
	LCALL	DELAY_500MS				
	SJMP	ULANG

LOKET1:
	INC	COUNTER_ANTRIAN
	MOV	DEVICEADDRES,#0
	MOV	A,#100
	CJNE	A,COUNTER_ANTRIAN,LOKET1_KIRIM
	MOV	COUNTER_ANTRIAN,#0
LOKET1_KIRIM:
	MOV	A,COUNTER_ANTRIAN
	ACALL	HEX2BCD
	ACALL	BCD2ASCII
	ACALL	KIRIM_KARAKTER_LCD
	SJMP	ULANG	
	SJMP	ULANG

LOKET2:
	INC	COUNTER_ANTRIAN
	MOV	DEVICEADDRES,#1
	MOV	A,#100
	CJNE	A,COUNTER_ANTRIAN,LOKET2_KIRIM
	MOV	COUNTER_ANTRIAN,#0	
LOKET2_KIRIM:
	MOV	A,COUNTER_ANTRIAN
	ACALL	HEX2BCD
	ACALL	BCD2ASCII
	ACALL	KIRIM_KARAKTER_LCD
	SJMP	ULANG	

LOKET3:
	INC	COUNTER_ANTRIAN
	MOV	DEVICEADDRES,#2
	MOV	A,#100
	CJNE	A,COUNTER_ANTRIAN,LOKET3_KIRIM
	MOV	COUNTER_ANTRIAN,#0
LOKET3_KIRIM:
	MOV	A,COUNTER_ANTRIAN
	ACALL	HEX2BCD
	ACALL	BCD2ASCII
	ACALL	KIRIM_KARAKTER_LCD
	SJMP	ULANG	


TABEL_LOKET1:
	DB	'   Loket 1 :'
TABEL_LOKET2:
	DB	'   Loket 2 :'
TABEL_LOKET3:
	DB	'   Loket 3 :'
