这是发送程序:
FSBZ BIT 00H ;设定发送标志位
LED BIT 92H ;设定p1.2口的标志位
ORG 000H
AJMP START
ORG 003H
RETI
ORG 00BH
RETI
ORG 013H
RETI
ORG 01BH
RETI
ORG 023H
RETI
START: ACALL INIT ;程序初始化
LOOP: ACALL SYTX ;测试连通程序
ACALL FSCX ;发送数据程序
AJMP LOOP ;跳转循环
INIT: MOV SCON,#40H ;串行方式1
MOV TMOD,#20H ;定时器T1方式2
MOV IE,#00H ;不开中断,采用查询模式
MOV PCON,#00H ;SMOD为0
MOV R0,#40H ;在40-4F字节中放入要发送的数据53H
MOV R2,#10H
AKM: MOV @R0,#53H
INC R0
DJNZ R2,AKM
MOV TL1,#0E8H ;定时器T1赋初值,波特率为1200
MOV TH1,#0E8H
SETB TR1 ;开启T1
RET
SYTX: ACALL DELAY ;延时
MOV A,#66H ;发送测试连接字节
MOV SBUF,A
WAIT: JNB TI,WAIT
CLR TI
SETB REN ;接收回传的字节
WAITA: JNB RI,WAITA
CLR RI
MOV A,SBUF
CLR REN
CJNE A,#66H,SSN ;比较与所发的字节是否一致
SETB FSBZ
CLR LED ;若一致,发送标志位置1,P1.2口置0
AJMP OUTT0
SSN: SETB LED ;不一致,P1.2口置1
OUTT0: RET
FSCX: JNB FSBZ,OUT ;发送标志位为0,退出
CLR FSBZ
MOV R0,#40H ;为1,开始发送数据
MOV R2,#10H
TSTART: MOV A,@R0
MOV SBUF,A
WAIT2: JBC TI,CONT
SJMP WAIT2
CONT: INC R0
DJNZ R2,TSTART
OUT: RET
DELAY: MOV R7,#03FH;延时
MOV R6,#0FFH
DL1: DJNZ R6,DL1
DL2: DJNZ R7,DL2
RET
END
以下是接收程序:
ORG 000H
AJMP START
ORG 003H
RETI
ORG 00BH
RETI
ORG 013H
RETI
ORG 01BH
RETI
ORG 023H
RETI
START: ACALL INIT ;程序初始化
LOOP: ACALL SYJS ;接收测试联通程序
ACALL JSCX ;接收程序
AJMP LOOP
INIT: MOV SCON,#50H ;串口方式1,允许接收
MOV TMOD,#20H ;T1工作在方式2
MOV IE,#00H ;不许中断,用查询方式
MOV PCON,#00H ;SMOD=0
MOV TL1,#0E8H ;T1为1200波特率
MOV TH1,#0E8H
SETB TR1 ;开启T1
RET
SYjs: JB RI,STD ;接收测试子节
SJMP SYJS
STD: CLR RI
MOV A,SBUF ;接到后马上回传
CLR REN
MOV SBUF,A
WAITA: JNB TI,WAITA
CLR TI
SETB REN
RET
JSCX: MOV R0,#40H ;接收发来的数据
MOV R2,#10H
SIN: CLR RI
WAIT2: JNB RI,WAIT2
MOV A,SBUF
MOV @R0,A
INC R0
DJNZ R2,SIN
RET
END