📄 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
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -