	.CODE
ROM			EQU	2000H

KodePaperError	EQU	01H
KodePaperReady	EQU	02H

Busy		Bit	INT1
STB		Bit	INT0
PE		Bit	T0
ACK		Bit	T1
Buffer	EQU	50H

	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
	Ajmp	Serial_Interrupt
Start:
	Mov	DPTR,#3000H
	Acall	Init_Serial		;Inisial Serial Port
	Setb	EA			;Enable Serial Interrupt
	Setb	ES			;
	Mov	P1,#0FFH		;Set Port 1 sebagai input data printer
	Setb	STB			;Set STB sebagai input
	Clr	Busy			;Printer sedang tidak sibuk
	Clr	PE			;Tidak ada Paper Error
	Setb	ACK			;Acknowledge high
	Clr	ES
Loop:
	Clr	Busy
	Jb	STB,*			;Tunggu Sinyal Strobe dari PC
	Setb	Busy
	Mov	A,P1			;Ambil data Parallel dari P1
	Acall	Serial_Out		;Kirim ke Serial Port
	Ajmp	Loop			;

Init_Serial:
	MOV     SCON,#52H        	; Mode 1 Ren
	MOV	TMOD,#20H        	; T0 Mode 2, T1 Mode 2
	MOV	TH1,#0d0H        	; 600 Baudrate
	MOV     TCON,#040H       	; T1 On, T0 Off
	MOV     PCON,#00H        	;
	Clr	RI			; Hapus Flag Receive
	Clr	TI			; Hapus Flag Transmit
	RET   

Serial_Out:
	Clr	ES			;Matikan Serial Interrupt
	CLR   	TI
        MOV   	SBUF,A                         
        JNB   	TI,*                  
	Clr	TI
	Setb	ES			;Aktifkan kembali Serial Interrupt
        RET

Serial_In:
	CLR   	RI
        JNB   	RI,*                  
        MOV   	A,SBUF                         
	Clr	RI
        RET                                  


Serial_Interrupt:
	Clr	ES
	Push	PSW			
	Mov	A,SBUF			;Ambil Data Serial
	Cjne	A,#KodePaperError,BukanPaperError
	Setb	PE			;Set Paper Error, PC menunggu 

TungguReady:
	Acall	Serial_In
	Cjne	A,#KodePaperReady,TungguReady
	Clr	PE
BukanPaperError:
	Pop	PSW
	Setb	ES
	Reti


