结构推理 设以串行方式1进行数据传送,fosc=6MHz,波特率为2400bit/s(SMOD=1)。发送的8个数据依次存在外RAM首址4000H单元中,数据长度未知,先接收数据长度,后接收数据,试编写接收子程序,接收数据存在内RAM 50H开始的区域中。
【正确答案】接收子程序编程如下:
   RXDB:MOV TMOD,#20H    ;置T1定时器工作方式2
       MOV  TL1,#0F3H    ;置T1计数初值
       MOV  TH1,#0F3H    ;置T1计数重装值
       CLR  ET1          ;禁止T1中断
       SETB TR1          ;T1启动
       MOV  SCON,#40H    ;置串行方式1,禁止接收
       MOV  PCON,#80H    ;置SMOD=1
       CLR  ES           ;禁止串行中断
       MOV  R0,#50H      ;置接收数据区首地址
       SETB REN          ;启动接收
       JNB  RI,$        ;等待接收数据长度
       CLR  RI           ;清接收中断标志,并重新启动串行接收
       MOV  R2,SBUF      ;读接收数据长度
   RDSB:JNB RI,$        ;等待一帧数据接收完毕
       CLR  RI           ;清接收中断标志
       MOV  A,SBUF       ;读接收数据
       MOV  @R0,A        ;存接收数据
       INC  R0           ;指向下一数据存储单元
       DJNZ R2,RDSB      ;判数据接收完否?未完继续
       RET               ;
【答案解析】