/* 程序中增加了在P2口显示启动信号AA、回答信号BB、发送数据和校验和 */
 	ORG		0000H	
BUFS 			EQU	30H		;发送数据缓冲区
BUFR 			EQU	50H		;接收数据缓冲区
NUMB			EQU	20H		;发送/接收数据字节个数
SUMS			EQU	7EH		;发送校验和单元
SUMR			EQU	7FH		;接收校验和单元
/******** main 函数 *********/
MAIN:	LCALL InitArray		;调用发送数据单元初始化子程序
		LCALL	DELAY		;延时等待外围器件完成复位 
		LCALL	InitUart  	;初始化串口
MAIN2:	JB	P1.0,SEND		;转调用发送子程序
   		LCALL RECEIVE		;调用接收子程序/
HERE:	SJMP HERE
SEND:	LCALL	SEND1
HERE1:	SJMP HERE1	
/**********发送数据单元初始化************/
InitArray:	MOV	R2,#NUMB
		MOV	R0,#BUFS
		MOV	A,#00H
LOOP:	MOV	@R0,A
		INC	R0
		INC	A
		DJNZ	R2,LOOP
		RET
/********** 初始化串口波特率 ************/
InitUart:		;/*初始化串口波特率，使用定时器1*/
			;/* Setup the serial port for 9600 baud at 11.0592MHz */
	MOV	SCON,#50H;  //串口工作在方式1
	MOV	TMOD,#20H;
	MOV	PCON,#00H;
	MOV	TH1,#0FDH
	MOV	TCON,#40H;
	RET
/*******发送子程序**********/
SEND1:				
		MOV	P2,#0AAH	;
		MOV	SBUF,#0AAH	;  /*发送联络信号*/
LOOP1:	JNB	TI,LOOP1
		CLR	TI
LOOP2:	JNB	RI,LOOP2
		CLR	RI
		MOV	A,SBUF
		CJNE A,#0BBH,LOOP2
		MOV	P2,#0BBH
		LCALL	DELAY
SEND2:	MOV	SUMS,#00H
		MOV	R0,#BUFS
		MOV	R2,#NUMB	
LOOP3:	MOV	A,@R0
		MOV	P2,A
		LCALL	DELAY
		MOV	SBUF,A
LOOP4:	JNB	TI,LOOP4
		CLR	TI
		ADD	A,SUMS
		MOV	SUMS,A
		INC	R0
		DJNZ R2,LOOP3
LOOP5:	JB P1.7,LOOP6
		ADD	A,#01H
		MOV	SUMS,A
LOOP6:	MOV	P2,A
		LCALL DELAY
		MOV	SBUF,A
LOOP7:	JNB	TI,LOOP7
		CLR TI
LOOP8:	JNB	RI,LOOP8
		CLR	RI
		MOV	P2,SBUF
		LCALL	DELAY
		MOV	A,SBUF
		CJNE A,#00H,LOOP9
ENDS:	RET
LOOP9:	LJMP	SEND2	
 
/********接收子程序**********/
RECEIVE:JNB	RI,RECEIVE
		CLR	RI
		MOV	P2,SBUF
		LCALL	DELAY
		MOV	A,SBUF
		CJNE A,#0AAH,RECEIVE
		MOV	P2,#0BBH
		LCALL	DELAY
		MOV	SBUF,#0BBH
LOOP11:	JNB	TI,LOOP11
		CLR	TI
LOOP12:	MOV	SUMR,#00H
		MOV	R1,#BUFR
		MOV	R3,#NUMB
LOOP13:	JNB	RI,LOOP13
		CLR	RI
		MOV	P2,SBUF
		LCALL	DELAY
		MOV	A,SBUF
		MOV	@R1,A
		ADD	A,SUMR
		MOV	SUMR,A
		INC	R1
		DJNZ R3,LOOP13
		MOV	P2,SUMR
LOOP14:	JNB	RI,LOOP14
		CLR	RI
		MOV	P2,SBUF
		LCALL	DELAY
		MOV	A,SBUF
		CJNE A,SUMR,LOOP16
		MOV	P2,#00H
		LCALL	DELAY
		MOV	SBUF,#00H
LOOP15:	JNB	TI,LOOP15
		CLR	TI
		RET
LOOP16:	MOV	P2,#0FFH
		LCALL	DELAY
		MOV	SBUF,#0FFH
LOOP17:	JNB	TI,LOOP17
		CLR	TI
		LJMP LOOP12

/*************延时子程序***********************/
DELAY:  MOV    R7,#04H
DL:   	MOV    R6,#0FFH
DL1:	MOV	   R5,#0FFH
DL5:	DJNZ   R5,DL5
	  	DJNZ   R6,DL1
      	DJNZ   R7,DL
      	RET	     
	  	END