$MOD51
	CSEG
;=============
;HD44780
;=============

Posisi_Awal			EQU	05CBH             
;Mengatur posisi cursor LCD ke posisi awal

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_Karakter			EQU	064AH             
;Mengirim data ke register data LCD
;- Data diisi di akumulator



ROM			EQU	2000H

	Org	ROM			;Reset Vector
	Ajmp	Start			;
	Org	ROM+3H			;External Interrupt 0 Vector
	Reti				;
	Org	ROM+0BH			;Timer 0 Interrupt Vector
	Reti
	Org	ROM+13H			;External Interrupt 1 Vector
	Reti				;
	Org	ROM+1BH			;Timer 1 Interrupt Vector
	Reti				;
	Org	ROM+23H			;Serial Interrupt Vector
	Reti				;


PanjangData	EQU	26

Start:
	Lcall	Init_LCD
	Acall	InitTimer		;Inisial timer untuk trap data
Loop:
	Acall	AmbilRemote
	Cjne	A,#7FH,$+3		;Kode di bawah 80H, abaikan
	Jc	Loop			;
	Acall	TunjukTabelTombol	;Tunjuk tabel sesuai kode yang diterima
	Movx	A,@DPTR			;Bila tabel kosong, abaikan
	Jz	Loop			;
	Lcall	Posisi_Awal		;Tampilkan isi tabel bila tidak kosong
	Lcall	KirimPesan_LCD		;
	Lcall	Posisi_Awal		;
	Ajmp	Loop


TunjukTabelTombol:
	Mov	DPTR,#TabelTombol
	Clr	C
	Subb	A,#80H
	Mov	B,#7
	Mul	AB

	Clr	C
	Add	A,DPL
	Jnc	TidakIncDPH
	Inc	DPH
TidakIncDPH:
	Mov	DPL,A
	Mov	A,B
	Add	A,DPH
	Mov	DPH,A
	Ret		

AmbilRemote:
	Acall	CekStartBit		;Tunggu Start Bit
	Mov	R7,#8			;Panjang data bit = 8

AmbilData:
        Push    ACC                       ;Ambil 1 bit
        Acall   AmbilBit                     ;
        Pop     ACC                       ;
	Rrc	A			;Geser ke akumulator
	Djnz	R7,AmbilData		;Lakukan 8x
	Clr	TR0
	Ret

CekStartBit:
	Jb	P1.3,$
	Setb	TR0
	Jnb	P1.3,$
	Mov	A,TH0
	Cjne	A,#08H,$+3
	Jnc	CekStartBitSelesai
	Clr	TR0
	Mov	TH0,#00
	Mov	TL0,#00
	Ajmp	CekStartBit

CekStartBitSelesai:
	Clr	TR0
	Mov	TH0,#00
	Mov	TL0,#00
	Ret

AmbilBit:
	Jb	P1.3,$
	Setb	TR0
	Jnb	P1.3,$
	Clr	TR0
	Mov	A,TH0
	Cjne	A,#03,$+3
	Jnc	Bit1
	Clr	C
	Mov	TH0,#0
	Mov	TL0,#0
	Ret


Bit1:
	Setb	C
	Mov	TH0,#0
	Mov	TL0,#0
	Ret

InitTimer:
	Mov	TH0,#00			;
	Mov	TL0,#00			;
        Push    ACC                       ;
	Mov	A,TMOD
	Anl	A,#0F0H
	Orl	A,#01H
	Mov	TMOD,A
        Pop     ACC
	Ret

;===========================================
; TABEL TOMBOL-TOMBOL REMOTE CONTROL TIPE RM-827S
; - Data-data yang masih berisi 00 adalah kode cadangan untuk remote control
; - Sony tipe yang lain
;===========================================

TabelTombol:
	DB	'1     ',0FH
	DB	'2     ',0FH
	DB	'3     ',0FH
	DB	'4     ',0FH
	DB	'5     ',0FH
	DB	'6     ',0FH
	DB	'7     ',0FH
	DB	'8     ',0FH
	DB	'9     ',0FH
	DB	'0     ',0FH
	DB	0,0,0,0,0,0,0	;8a
	DB	0,0,0,0,0,0,0	;8b
	DB	'1-    ',0FH	
	DB	'2-    ',0FH	
	DB	0,0,0,0,0,0,0	;8e
	DB	0,0,0,0,0,0,0	;8f
	DB	'Prog+ ',0FH
	DB	'Prog- ',0FH
	DB	'Vol+  ',0FH
	DB	'Vol-  ',0FH
	DB	0,0,0,0,0,0,0
	DB	'Power ',0FH
	DB	'Pic Md',0FH
	DB	'A/B   ',0FH
	DB	0,0,0,0,0,0,0	;98
	DB	0,0,0,0,0,0,0	;99
	DB	0,0,0,0,0,0,0	;9a
	DB	0,0,0,0,0,0,0	;9b
	DB	0,0,0,0,0,0,0	;9c
	DB	0,0,0,0,0,0,0	;9d
	DB	0,0,0,0,0,0,0	;9e
	DB	0,0,0,0,0,0,0	;9f
	DB	0,0,0,0,0,0,0	;a0
	DB	0,0,0,0,0,0,0	;a1
	DB	0,0,0,0,0,0,0	;a2
	DB	0,0,0,0,0,0,0	;a3
	DB	0,0,0,0,0,0,0	;a4
	DB	'TV/VID',0FH	;a5
	DB	0,0,0,0,0,0,0
	DB	0,0,0,0,0,0,0
	DB	0,0,0,0,0,0,0
	DB	0,0,0,0,0,0,0
	DB	0,0,0,0,0,0,0
	DB	0,0,0,0,0,0,0
	DB	0,0,0,0,0,0,0
	DB	0,0,0,0,0,0,0
	DB	0,0,0,0,0,0,0
	DB	0,0,0,0,0,0,0
	DB	0,0,0,0,0,0,0
	DB	0,0,0,0,0,0,0	
	DB	0,0,0,0,0,0,0
	DB	0,0,0,0,0,0,0
	DB	0,0,0,0,0,0,0
	DB	0,0,0,0,0,0,0

	DB	'Sleep ',0FH	;b6
	DB	0,0,0,0,0,0,0	;b7
	DB	0,0,0,0,0,0,0	;b8
	DB	0,0,0,0,0,0,0	;b9
	DB	0,0,0,0,0,0,0	;ba
	DB	0,0,0,0,0,0,0	;bb
	DB	0,0,0,0,0,0,0	;bc
	DB	0,0,0,0,0,0,0	;bd
	DB	0,0,0,0,0,0,0	;be
	DB	0,0,0,0,0,0,0	;bf
	DB	0,0,0,0,0,0,0	;c0
	DB	0,0,0,0,0,0,0	;c1
	DB	0,0,0,0,0,0,0	;c2
	DB	0,0,0,0,0,0,0	;c3
	DB	0,0,0,0,0,0,0	;c4
	DB	0,0,0,0,0,0,0	;c5
	DB	0,0,0,0,0,0,0	;c6
	DB	0,0,0,0,0,0,0	;c7
	DB	0,0,0,0,0,0,0	;c8
	DB	0,0,0,0,0,0,0	;c9
	DB	0,0,0,0,0,0,0	;ca
	DB	0,0,0,0,0,0,0	;cb	
	DB	0,0,0,0,0,0,0	;cc
	DB	0,0,0,0,0,0,0	;cd
	DB	0,0,0,0,0,0,0	;ce
	DB	0,0,0,0,0,0,0	;cf
	DB	0,0,0,0,0,0,0	;d0
	DB	0,0,0,0,0,0,0	;d1
	DB	0,0,0,0,0,0,0	;d2	
	DB	0,0,0,0,0,0,0	;d3
	DB	0,0,0,0,0,0,0	;d4
	DB	0,0,0,0,0,0,0	;d5
	DB	0,0,0,0,0,0,0	;d6
	DB	0,0,0,0,0,0,0	;d7
	DB	0,0,0,0,0,0,0	;d8
	DB	0,0,0,0,0,0,0	
	DB	0,0,0,0,0,0,0
	DB	0,0,0,0,0,0,0
	DB	0,0,0,0,0,0,0
	DB	0,0,0,0,0,0,0
	DB	0,0,0,0,0,0,0
	DB	0,0,0,0,0,0,0
	DB	0,0,0,0,0,0,0
	DB	0,0,0,0,0,0,0
	DB	0,0,0,0,0,0,0	
	DB	0,0,0,0,0,0,0
	DB	0,0,0,0,0,0,0
	DB	0,0,0,0,0,0,0
	DB	0,0,0,0,0,0,0
	DB	0,0,0,0,0,0,0
	DB	0,0,0,0,0,0,0
	DB	0,0,0,0,0,0,0
	DB	0,0,0,0,0,0,0
	DB	0,0,0,0,0,0,0
	DB	0,0,0,0,0,0,0
	DB	0,0,0,0,0,0,0
	DB	0,0,0,0,0,0,0
	DB	0,0,0,0,0,0,0
	DB	0,0,0,0,0,0,0
	DB	0,0,0,0,0,0,0
	DB	0,0,0,0,0,0,0	
	DB	0,0,0,0,0,0,0
	DB	'+     ',0FH
	DB	'-     ',0FH
	DB	0,0,0,0,0,0,0
	DB	0,0,0,0,0,0,0
	DB	0,0,0,0,0,0,0
	DB	0,0,0,0,0,0,0
	DB	0,0,0,0,0,0,0
	DB	0,0,0,0,0,0,0
	DB	'Select',0FH
	END
