A-A+
设以串行方式1进行数据传送 fosc=6MHz 波特率为2400bit/s(SMOD=1)。
问题详情
设以串行方式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 ;