;;;串口带校验;;;
;;at89c2051串口带校验最高数率并行输出数据;;
ORG 0000H
AJMP MAIN
ORG 0003H
AJMP EX00
RETI
ORG 000BH
RETI
ORG 0013H
AJMP EX11
RETI
ORG 001BH
RETI
ORG 0023H
CLR TI
JBC RI,ES1
RETI
ES1:
AJMP ESRD
ORG 0030H
MAIN:
MOV SP,#10H
MOV TMOD,#21H
;;MOV TH1,#0EFH;;;16MHZ/2450BANDU/S
MOV TH1,#0F3H;;;12MHA/2400BANDU/S
MOV TCON,#55H
MOV SCON,#50H
MOV IE,#94H
MOV R2,#00H;;输出到锁存器的数据;;;
MOV 2AH,#00H;;总标志位;;
CLR P3.2;;;锁存的初始脚;;
SETB P3.5;;;进入锁存状态时刻的指示;;
MOV 30H,#00H;;;;进入中断次数,,初始为00;;
MOV 2DH,#00H
ACALL CODENUMB;;;本机序号;;;
MOV 40H,#12H
LOOPMAIN:;;;;;;;;;;;
JNB 50H,LOOP
MOV R0,#3EH
MOV A,@R0
CJNE A,#0FFH,JB1
SJMP LOOP
JB1:MOV A,@R0;;;;执行在这
MOV R2,A
MOV A,@R0
CJNE A,#0FFH,JB2
SJMP LOOP
JB2:;;;执行在这
MOV R0,#3FH
CLR 50H
LOOP:
MOV R1,#20
LOOP1:
INC 70H
CPL P3.7
ACALL DELAY
DJNZ R1,LOOP1
NOP
MOV PCON,#01H
AJMP LOOPMAIN;;;;;;;;;;;;;;;;;;;;;;;
EX11:
CLR EA
CLR EX1
INC R2
MOV P1,R2
SETB P3.2
CLR P3.2
CPL P3.5
MOV SBUF,R2
JNB TI,$
INC 30H
SETB EX1
SETB EA
RETI
EX00:
RETI
ESRD:
CLR ES
MOV R0,#3FH
MOV R3,#0H;;;;CS
RD1:
JNB RI,$
MOV @R0,SBUF
CJNE @R0,#0FEH,RD2
CLR RI
SJMP RD1
RD2:
MOV @R0,SBUF
MOV R6,SBUF
MOV A,R3
ADD A,@R0
MOV R3,A
CLR RI
INC R6
DEC R0
RD3:
JNB RI,$
MOV @R0,SBUF
MOV A,R3
ADD A,@R0
MOV R3,A
DEC R0
CLR RI
DJNZ R6,RD3
INC R0
MOV A,@R0
ADD A,@R0
CJNE A,3,ERR1
SETB 50H
MOV SBUF,#43H
NOP
JNB TI,$
NOP
SJMP ES2
ERR1:
MOV R0,#3FH
ES3:MOV @R0,#0FFH
DEC R0
CJNE R0,#31H,ES3
MOV R0,#3FH
NOP
ES2:
SETB ES
RETI
CODENUMB:
CLR ES
MOV SBUF,#0FEH
NOP
JNB TI,$
CLR TI
NOP
MOV SBUF,#06H;;CCL
NOP
JNB TI,$
CLR TI
NOP
MOV SBUF,#01H;;MATCHINE CODE
NOP
JNB TI,$
CLR TI
NOP
NOP
MOV SBUF,#00H
NOP
JNB TI,$
CLR TI
NOP
NOP
MOV SBUF,#00H
NOP
JNB TI,$
CLR TI
NOP
NOP
MOV SBUF,#00H
NOP
JNB TI,$
CLR TI
NOP
NOP
MOV SBUF,#00H
NOP
JNB TI,$
CLR TI
NOP
NOP
MOV SBUF,#00H
NOP
JNB TI,$
CLR TI
NOP
NOP
MOV SBUF,#07H;;;CS
NOP
JNB TI,$
CLR TI
NOP
SETB ES
RET
DELAY:
MOV R5,#200
DD1:MOV R4,#20
DJNZ R4,$
DJNZ R5,DD1
RET
END
