结构推理
试编写一串行通讯的数据接收发送程序,将接收到的16字节数据送入片内RAM 30H ~3FH单元中。串行接口设定为方式3,波特率为1200bps,晶振频率为6MHZ。
【正确答案】程序如下:
ORG 0000H
LJMP START
ORG 0100H
START: MOV TMOD,#20H ;设定T1为模式2定时
MOV TH1,#0F3H ;送时间常数
MOV TL1,#0F3H
SETB TR1 ;启动定时器T1
MOV SCON,#0D0H ;串行接口设定为方式3,并允许接收
MOV R0,#30H
MOV R7,#16
JNB RI,$ ;查询等待接收
CLR RI
MOV A,SUBF ;从串行接口中读取数据
JN BP,PN ;对该字节进行查错处理若P=RB8无错,否则有错
JNB RB8,PER ;若P=1,RB8=0,有错,转出错处理
LJMP RIG ;若P=1,RB8=1,无错,转保存数据
PN: JB RB8,PER ;若P=0,RB8=1,有错,转出错处理
RIG: MOV @R0,A ;若P=0,RB8=0,无错,保存接收到的数据
INC R0
DJNZ R7,LOOP ;16字节未接收完,则继续
CLR 7F ;正确接收完16位数据,清出错标志位7F
SJMP $
PER: SETB 7F ;校验有错,置位7F
SJMP $
END
【答案解析】