A-A+
编制一个串行方式2接收子程序(SMOD=1) 接收10个数据 并核对奇偶校验位 接收核对正确
问题详情
编制一个串行方式2接收子程序(SMOD=1),接收10个数据,并核对奇偶校验位,接收核对正确,存首址为50H的内RAM中;发现错误,置位错误标志F0,并停止接收。
参考答案
程序如下:
RXD2:MOV SCON,#80H ;置串行方式2,禁止接收
MOV PCON,#80H ;置SMOD=1
MOV R0,#50H ;置接收数据区首址
SETB REN ;启动接收
RWAP:JNB RI,$ ;等待一帧数据接收完毕
CLR RI ;清接收中断标志
MOV A,SBUF ;读接收数据,并在PSW中产生接收数据的奇偶值
JB PSW.0,ONE ;P=1,转判RB8
JB RB8,ERR ;P=0,RB8=1,接收有错;P=0,RB8=0,接收正确
RLOP:MOV @R0,A ;存接收数据
INC R0 ;指向下一数据存储单元
CJNE R0,#SBH,RWAP ;判10个数据接收完否?未完继续
STOP:CLR REN ;10个数据正确接收完毕,禁止接收
RET ;
ONE:JNB RB8,ERR ;P=1,RB8=0,接收有错
SJMP RLOP ;P=1,RB8=1,接收正确,继续接收
ERR:SETB F0 ;接收有错,置错误标志
SJMP STOP ;转停止接收