$MOD51
;***************
; PROGRAM PENGIRIM DATA SERIAL 9600 BPS KE PRINTER
;***************

        CSEG
;**********
;DEKLARASI KONSTANTA
ROM			EQU	2000H
KodePaperError	EQU	01H
KodePaperReady	EQU	02H

;**********
;DEKLARASI I/O
PE	Bit	INT1
Busy	Bit	T1
STB	Bit	INT0
Ready	Bit	T0

;**********
;VEKTOR INTERUPSI
	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 PROGRAM
Start:
	Acall	Init_Serial
        Jnb     Ready,$                 ;Tunggu Printer siap
	CLR   	RI
	Clr	TI
	Setb	EA
	Setb	ES

Loop:
        Jnb     PE,$
	Mov	A,#KodePaperError
	Lcall	Serial_Out
        Jb      PE,$
	Mov	A,#KodePaperReady
	Lcall	Serial_Out
	Ajmp	Loop	
	


Serial_Interrupt:
	Clr	RI
	Clr	TI
	Clr	ES
        MOV   	A,SBUF                         
	Acall	KirimkePrinter
	Setb	ES
	Reti


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   

KirimkePrinter:
        Jb      Busy,$                  ;Printer Busy, tunggu
	Mov	P1,A
	Clr	STB
	Setb	STB
	Ret	


Serial_Out:
	Clr	ES
	Clr	TI
	MOv	SBUF,A
        Jnb     TI,$
	Clr	TI
	Setb	ES
	Ret
        END

