试设计一个8051单片机双机通信系统,编程将A机片内RAM中60H—6FH的数据块传送到B机机片内RAM中60H—6FH单元中。
正确答案:
甲机发送(采用查询方式):
M.OV SCON, #80H ; 设置工作方式2
M.OV PCON, #00; 置SMOD=0, 波特率不加倍
M.OV R0, #60H ; 数据区地址指针
M.OVR2, #10H ; 数据长度
L.OOP: MOV A, @R0 ; 取发送数据
M.OV C, P ; 奇偶位送TB8
M.OVTB8, C
M.OV SBUF, A ; 送串口并开始发送数据
W.AIT: JBCTI, NEXT ; 检测是否发送结束并清TI
S.JMP WAIT
N.EXT: INC R0; 修改发送数据地址指针
D.JNZR2, LOOP
R.ET
乙机接收(查询方式):
M.OV SCON, #90H; 模作模式2, 并允许接收
M.OV PCON, #00H; 置SMOD=0
M.OV RO, #60H ; 置数据区地址指针
M.OV R2, #10H ; 等待接收数据长度
L.OOP: JBC RI, READ ; 等待接收数据并清RI
S.JMP LOOP
R.EAD:// MOV A, SBUF ; 读一帧数据
M.OV C, P
J.NC LP0 ; C不为 1 转LP0
J.NB RB8, ERR ; RB8=0, 即 RB8不为 P转ERR
A.JMP LP1
L.P0: JB RB8, ERR ; RB8=1, 即 RB8不为 P转ERR
L.P1: MOV @R0, A ; RB8=P, 接收一帧数据
I.NC R0
D.JNZ R2, LOOP
RET
ERR: … ; 出错处理程序
…
M.OV SCON, #80H ; 设置工作方式2
M.OV PCON, #00; 置SMOD=0, 波特率不加倍
M.OV R0, #60H ; 数据区地址指针
M.OVR2, #10H ; 数据长度
L.OOP: MOV A, @R0 ; 取发送数据
M.OV C, P ; 奇偶位送TB8
M.OVTB8, C
M.OV SBUF, A ; 送串口并开始发送数据
W.AIT: JBCTI, NEXT ; 检测是否发送结束并清TI
S.JMP WAIT
N.EXT: INC R0; 修改发送数据地址指针
D.JNZR2, LOOP
R.ET
乙机接收(查询方式):
M.OV SCON, #90H; 模作模式2, 并允许接收
M.OV PCON, #00H; 置SMOD=0
M.OV RO, #60H ; 置数据区地址指针
M.OV R2, #10H ; 等待接收数据长度
L.OOP: JBC RI, READ ; 等待接收数据并清RI
S.JMP LOOP
R.EAD:// MOV A, SBUF ; 读一帧数据
M.OV C, P
J.NC LP0 ; C不为 1 转LP0
J.NB RB8, ERR ; RB8=0, 即 RB8不为 P转ERR
A.JMP LP1
L.P0: JB RB8, ERR ; RB8=1, 即 RB8不为 P转ERR
L.P1: MOV @R0, A ; RB8=P, 接收一帧数据
I.NC R0
D.JNZ R2, LOOP
RET
ERR: … ; 出错处理程序
…
答案解析:有
微信扫一扫手机做题