结构推理 编制一个串行方式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         ;转停止接收
【答案解析】