www.pudn.com > shuangjitongxun.rar > SJTX1.ASM


org   0000h 
        ;mov  r3,#40h 
MAIN:    MOV  TMOD,#20H         ;T1初始化 
         MOV  TH1,#0e8H 
         MOV  TL1,#0e8H 
         ;CLR  ES 
         SETB TR1 
 
         MOV  SCON,#50H          ;串行口初始化 
         MOV  PCON,#80H 
FMT_RAM: MOV  DPH,#31H           ;设置DPTR地址 
         MOV  DPL,#30H 
         MOV  R6,#00H            ;校验和寄存器清零 
RX_ACK:  JBC  RI,IF_06H               ;接收呼叫信号 
         SJMP RX_ACK 
IF_06H:  MOV  A,SBUF             ;判断呼叫信号是否有误 
         ;mov  r6,a 
         CJNE A,#06H,TX_15H 
TX_00H:  MOV  A,#00H             ;向甲机回送同意接收信号 
         MOV  SBUF,A 
WAIT1:   JBC  TI,RX_BYTES        ;等待应答信号发送完 
         SJMP  WAIT1 
TX_15H:  MOV  A,#15H             ;向甲机报告接收呼叫信号不正确 
         MOV  SBUF,A 
WAIT2:   JBC  TI,HAVE2 
         SJMP WAIT2 
;HAVE1:   LJMP RX_ACK 
RX_BYTES:JBC  RI,HAVE2           ;接收数据块长度 
         SJMP RX_BYTES 
HAVE2:   MOV  A,SBUF             ;给长度寄存器赋值 
         MOV  R7,A 
         MOV  R6,A               ;形成累加器和 
RX_NEWS: JBC  RI,HAVE3           ;接收数据 
         SJMP RX_NEWS 
HAVE3:   MOV  A,SBUF             ;将接收到的数据存入外部RAM 
         MOVX  @DPTR,A 
         INC  DPTR 
         ADD  A,R6               ;形成累加和 
         MOV  R6,A 
         DJNZ  R7,RX_NEWS        ;判断数据是否接收完毕 
RX_SUM:  JBC  RI,HAVE4           ;接收数据校验和 
         SJMP RX_SUM 
HAVE4:   MOV  A,SBUF             ;判断传送是否正确 
         MOV  40H,R6 
         CJNE A,40H,TX_ERR 
TX_RIGHT:MOV  A,#0FH            ;向甲机报告传送正确 
         MOV  SBUF,A 
WAIT3:   JBC  TI,good 
         sJMP  wait3 
TX_ERR:  MOV  A,#0F0H           ;向甲机报告传送有误 
         MOV  SBUF,A 
WAIT4:   JBC  TI,GOOD 
         SJMP WAIT4 
AGAIN:   LJMP FMT_RAM           ;返回重新接收数据状态 
GOOD:    MOV  R4,#12H 
         CLR  P3.5 
         CLR  P3.4 
         ACALL DL1MS 
         SETB  P3.5 
         SETB  P3.4 
         ACALL DL1MS 
         DJNZ  R4,GOOD 
         RET;JMP  GOOD 
 
DL1MS:   MOV R0,#12H 
LP:      MOV R1,#0FFH 
LP1:     NOP 
         NOP 
         DJNZ R1,LP1 
         DJNZ R0,LP 
         RET 
 
         END