	.CODE
Init_Serial	EQU	01B8H	Initilize Serial Port as 9600 8N1
				DST-51 Special Function

	ORG   	2000H
	AJMP  	START
 	ORG   	2003H                  ; EXTERNAL INT0
	Reti
 	ORG   	200BH                  ; TIMER0 OVERFLOW ERROR
 	RETI  
 	ORG   	2013H                  ; EXTERNAL INT1
	Reti
 	ORG   	201BH                  ; TIMER1 OVERFLOW ERROR
 	RETI  
	ORG   	2023H                  ; SERIAL I/O
 	RETI  

	ORG   	20E0H
START
	Acall	Init_PPI
loop:
	Clr	T0
	Lcall	Init_Serial
	Mov	P1,#0FFH		;Set P1 as input
	Acall	Init_PPI		
	Mov	Dptr,#4002H
	Mov	A,#09H			;ACK = 1, BUSY = 0, ERR = 1, PE =0
	Movx	@Dptr,A			;

Wait_Data:
	Jb	INT0,*			;Wait Strobe
	Mov	A,#0BH			;Busy = 1
	Movx	@Dptr,A			;
	Mov	A,P1			;Get Data from P1
	Clr	TI
	Mov	Sbuf,A
	Jnb	TI,*
	Mov	A,#08H			;Clear Busy, Send Ack
	Movx	@Dptr,A			;
	Mov	A,#09H			;
	Movx	@Dptr,A			;
	Ajmp	Wait_Data		;Wait Next Data

**********************
* Init PPI:
* - Port A : Output
* - Port B : Output
* - Port C Upper : Output
* - Port C Lower : Input
**********************

Init_PPI:
	Mov	A,#88H
	Mov	Dptr,#4003H
	Movx	@Dptr,A
	Ret

Delay:
	Push	B
	Mov	B,#0FFH
	Djnz	B,*
	Pop	B
	Ret

SERIAL_IN:
	JNB	RI,*
	CLR	RI
	MOV	A,SBUF
	RET