ORG 0070H
COMM_BUFFER: DS 7;接受缓冲区
STOP_NUM EQU 77H ;本地识别号,判断是否为发送给自己的数据
REC_NUM EQU COMM_BUFFER+3;存放识别号
ORG 0000H
SJMP INIT
ORG 0023H
SJMP COM_INT
ORG 0050H
INIT:
MOV R0,#STOP_NUM
MOV A,#07H
MOV @R0,A
MOV TMOD,#20H;以下把波特率设置为9600
MOV TH1,#0FAH
MOV TL1,#0FAH
MOV SCON,#50H
MOV PCON,#80H
SETB TR1
SETB ES
SETB EA
MOV R0,#COMM_BUFFER
MOV R7,#0 ;计数器
MAIN: JMP $ ;主循环
COM_INT:
PUSH ACC
PUSH B
CLR RI
CLR EA
MOV A,SBUF;我看了好像只要一起发送,第一个接收的就是02
;而不是01
MOV @R0,A
INC R7
INC R0
CJNE R7,#6,GO_ON
MOV A,REC_NUM
CJNE A,STOP_NUM,NO_MINE;不是自己的数据就不管
MOV A,74H ;74H存放的是识别号
CJNE A,#0A1H,NOT_A1
MOV P1,#0FFH
CALL DELAY
JMP GO_ON
NOT_A1:
CJNE A,#0A2H,NOT_A2
MOV P2,#0FFH
CALL DELAY
JMP GO_ON
NOT_A2:
CJNE A,#0A3H,NOT_A3
MOV P3,#0FFH
CALL DELAY
JMP GO_ON
NOT_A3: ;命令等待执行
CALL DELAY
JMP NO_MINE
GO_ON: SETB EA
POP B
POP ACC
RETI
NO_MINE:
MOV R0,#COMM_BUFFER
MOV R7,#0
JMP MAIN
DELAY: MOV R2,#78
DELAY1: MOV R3,#0FFH
DELAY2: MOV R4,#0FFH
DJNZ R4,$
DJNZ R3,DELAY2
DJNZ R2,DELAY1
RET
END