/* 程序中增加了在P2口显示启动信号AA、回答信号BB、发送数据和校验和 */
 	ORG		0000H	
BUFS 	EQU	30H		;发送数据缓冲区
BUFR 	EQU	50H		;接收数据缓冲区
NUMB	EQU	10H		;发送/接收数据字节个数
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