第 8章 MCS- 51串行口
8.1 串口通讯的基本方式
8.2 串口控制
8.3 串行接口的工作方式
8.4 串口的应用
8.1 串口通讯的基本方式
(一 ).异步通讯以字符为传送单位用起始位和停止位标识每个字符的开始和结束字符间隔不固定,只需字符传送时同步。
异步通讯常用格式:一个字符帧异步通讯的双方需要两项约定:
1.字符格式一帧字符位数的规定:数据位,校验位,起始位和停止位。
2.波特率 (位 /秒 )对传送速率的规定例:要求每秒传送 120个字符,每帧为 10位。
解,B=120× 10=1200波特 每位 0.83ms
数据位传输率 =120× 8=960位 /秒
(二 ).同步通讯以一串字符为一个传送单位,字符间不加标识位,在一串字符开始用同步字符标识,硬件要求高,通讯双方须严格同步。
D0 D1 D2 D3 D4 D5 D6 D7 停止位起始位二,串行接口功能
1.发送器:并?串数据格式转换,添加标识位和校验位,一帧发送结束,设置结束标志,申请中断。
2.接收器:串?并数据格式转换,检查错误,去掉标识位,保存有效数据,设置接收结束标志,申请中断。
3.控制器:接收编程命令和控制参数,设置工作方式:
同步 /异步、字符格式、波特率、校验方式、数据位与同步时钟比例等。
三,串行数据传送方向单工通讯:数据单向传送 。
半双工通讯:数据可分时双向传送。
全双工通讯:可同时进行发送和接收。
发送器 接收器发送器接收器
8.2 MCS-51串行控制
1个全双工串行接口,可同时进行发送和接收。
串行接口输入 /输出引脚,TXD(P3.1),RXD(P3.0)
数据格式 (P.237图 ):按不同方式,一帧位数
8/10/11发送 /接收时,数据皆低位在前。
一帧字符发送 /接收结束,置位标志位 (TI/RI)并申请 SIO中断。
中断控制:中断允许位 ES
中断入口,0023H
D0 D1 D2 D3 D4 D5 D6 D7 停止位起始位
D0 D1 D2 D3 D4 D5 D6 D7
D0 D1 D2 D3 D4 D5 D6 D8 停止位起始位 D7
串行接口控制
1.数据缓冲器 SBUF
发送 SBUF和接收 SBUF共用一个地址 99H。
1)发送 SBUF存放待发送的 8位数据,写入 SBUF将同时启动发送。
发送指令,MOV SBUF,A
2)接收 SBUF存放已接收成功的 8位数据,供 CPU读取。
读取串行口接收数据指令:
MOV A,SBUF
S M 0 S M 1 S M 2 R E N TB8 R B 8 TI RI
2.串行口控制 /状态寄存器 SCON(98H)
SM0,SM1:选择串行口 4种工作方式。
SM2:多机控制位,用于多机通讯。
REN:允许接收控制位,REN=1,允许接收; REN=0,禁止接收。
TB8发送的第 9位数据位,可用作校验位和地址 /数据标识位
RB8:接收的第 9位数据位或停止位
TI:发送中断标志,发送一帧结束,TI=1,必须软件清零
RI:接收中断标志,接收一帧结束,RI=1,必须软件清零
3.节电控制寄存器 PCON
SMOD(PCON.7):波特率加倍控制位 。
SMOD=1,波特率加倍,SMOD=0,则不加倍 。
8.3 串行接口的工作方式
SM0,SM1选择四种工作方式 。
(1) 方式 0:同步移位寄存器方式。用于扩展并行 I/O接口。
1.一帧 8位,无起始位和停止位。
2.RXD:数据输入 /输出端。
TXD:同步脉冲输出端,每个脉冲对应一个数据位。
3.波特率 B = fosc/12
如,fosc=12MHz,B=1MHz,每位数据占 1?s。
4.发送过程:写入 SBUF,启动发送,一帧发送结束,TI=1。
接收过程,REN=1且 RI=0,启动接收,一帧接收完毕,RI=1。
发送时序写入
SBUF
RXD输出
TXD
TI
D0 D1 D2 D3 D4 D5 D6 D7
写 REN=1
RI=0
RXD输入
RI
接收时序
(a)
(b)
数据从 RXD( P3.0)引脚串行输出,低位在先,高位在后; TXD( P3.1)引脚输出移位脉冲,其频率为 foc/12;发送完毕后,中断标志位 TI为 1。如要发送数据,如下所示:
MOV SCON,#00H ;串行口方式 0
MOV SBUF,A ;将数据送出
JNB TI,$ ;等待数据发送完毕移位寄存器方式
(2) 方式 1
8位数据异步通讯方式。
1.一帧 10位,8位数据位,1个起始位 (0),1个停止位 (1)。
2.RXD:接收数据端。 TXD:发送数据端。
3.波特率,用 T1作为波特率发生器,B=(2SMOD/32)× T1溢出率。
4.发送:写入 SBUF,同时启动发送,一帧发送结束,TI=1。
接收,REN=1,允许接收。接收完一帧,若 RI=0且停止位为 1
(或 SM2=0),将接收数据装入 SBUF,停止位装入 RB8,并使 RI=1;否则丢弃接收数据,不置位 RI。
当 REN=1,CPU开始采样 RXD引脚负跳变信号,若出现负跳变,才进入数据接收状态,先检测起始位,若第一位为 0,继续接收其余位;否则,停止接收,重新采样负跳变。
数据采样速率为波特率 16倍频,在数据位中间,用第 7,8,9个脉冲采样 3次数据位,并 3中取 2保留采样值。
写入
SBUF
采样
( a) 发送时序图
TXD
数据输出
TI
D0 D1 D2 D3 D4 D5 D6 D7 停止位起始位
RXD
输入数据
( b) 接收时序图
D0 D1 D2 D3 D4 D5 D6 D7 停止位起始位
RI
检测负跳变
(3) 方式 2和方式 3
9位数据异步通讯方式。
1.一帧为 11位,9位数据位,1个起始位 (0),1个停止位 (1)。
第 9位数据位在 TB8/RB8中,常用作校验位和多机通讯标识位。
2.RXD:接收数据端,TXD:发送数据端。
3.波特率,方式 2,B=(2SMOD/64)× fosc 。
方式 3,B=(2SMOD/32)× T1溢出率 。
4.发送:先装入 TB8,写入 SBUF并启动发送,发送结束,TI=1。
接收,REN=1,允许接收。接收完一帧,若 RI=0且第 9位为 1
(或 SM2=0),将接收数据装入接收 SBUF,第 9位装入 RB8,使 RI=1;
否则丢弃接收数据,不置位 RI。
发送时序写入
SBUF
TXD输出
TI
RXD输入接收时序RI
D0 D1 D2 D3 D4 D5 D6 TB8 停止位起始位 D7
D0 D1 D2 D3 D4 D5 D6 RB8 停止位起始位 D7
检测负跳变
( 4) 计算波特率方式 0为固定波特率,B=fosc/12
方式 2可选两种波特率,B=(2SMOD /64)× fosc
方式 1,3为可变波特率,用 T1作波特率发生器。
B=(2SMOD/32)× T1溢出率
T1为方式 2的时间常数,X = 28 - t/T
溢出时间,t= (28 -X)T = (28 -X)× 12/ fosc
T1溢出率 =1/t= fosc /[12× (2n -X)]
波特率 B=(2SMOD /32)× fosc/[12× (28-X)]
串行口方式 1,3,根据波特率选择 T1工作方式,计算时间常数。
T1选方式 2,TH1=X= 28-fosc/12× 2SMOD/(32× B)
T1选方式 1用于低波特率,需考虑 T1重装时间常数时间。
8.4 串行口的应用串行口初始化编程格式:
SIO,MOV SCON,#控制状态字;写方式字且 TI=RI=0
(MOV PCON,#80H) ;波特率加倍
( MOV TMOD,#20H ) ; T1作波特率发生器
( MOV TH1,#X ) ;选定波特率
( MOV TL1,#X )
( SETB TR1)
( SETB EA) ;开串行口中断
( SETB ES)
发送程序:先发送一个字符,等待 TI=1后再发送下一个字符。
1.查询方式,
TRAM,MOV A,@R0 ;取数据
MOV SBUF,A ;发送一个字符
WAIT,JBC TI,NEXT ;等待发送结束
SJMP WAIT
NEXT,INC R0 ;准备下一次发送
SJMP TRAM
2.中断方式,
ORG 0023H ;串行口中断入口
AJMP SINT
MAIN,… ;初始化编程
TRAM,MOV A,@R0 ;取数据
MOV SBUF,A ;发送第一个字符
H,SJMP H ;其它工作
SINT,CLR TI ;中断服务程序
INC R0
MOV A,@R0 ;取数据
MOV SBUF,A ;发送下一个字符
RETI
接收程序,REN=1,RI=0等待接收,当 RI=1,从 SBUF读取数据。
1.查询方式,
WAIT,JBC RI,NEXT ;查询等待
SJMP WAIT
NEXT,MOV A,SBUF ;读取接收数据
MOV @R0,A ;保存数据
INC R0 ;准备下一次接收
SJMP WAIT
2.中断方式,
ORG 0023H
AJMP RINT
MAIN,… ;初始化编程
H,SJMP H ;其它任务
RINT,CLR RI ;清中断标志
MOV A,SBUF ;读取接收数据
MOV @R0,A ;保存数据
INC R0
RETI
(一) 串行口 方式 0 用于扩展单片机的并行 I/O接口。
串行口实现:并行 → 串行的数据转换
74LS165/74LS164实现:串行 → 并行的数据转换。
(二 )异步通讯程序举例
1.发送程序,将片内 RAM 50H起始单元的 16个数由串行口发送 。 要求发送波特率为系统时钟的 32分频,并进行奇偶校验 。
MAINT,MOV SCON,#80H;串行口初始化
MOV PCON,#80H;波特率
SETB EA
SETB ES ;开串行口中断
MOV R0,#50H ;设数据指针
MOV R7,#10H ;数据长度
LOOP,MOV A,@R0 ;取一个字符
MOV C,P ;加奇偶校验
MOV TB8,C
MOV SBUF,A ;启动一次发送
HERE,SJMP HERE ; CPU执行其它任务
S M 0 S M 1 S M 2 R E N TB8 R B 8 TI RI
ORG 0023H ;串行口中断入口
AJMP TRANI
TRANI,PUSH A ;保护现场
PUSH PSW
CLR TI ;清发送结束标志
DJNZ R7,NEXT ;是否发送完?
CLR ES ;发送完,关闭串行口中断
SJMP TEND
NEXT,INC R0 ;未发送完,修改指针
MOV A,@R0 ;取下一个字符
MOV C,P ;加奇偶校验
MOV TB8,C
MOV SBUF,A ;发送一个字符
POP PSW ;恢复现场
POP A
TEND,RETI ;中断返回
2,接收程序,串行输入 16个字符,存入片内 RAM的 50H起始单元,
串行口波特率为 2400(设晶振为 11.0592MHz),。
RECS,MOV SCON,#50H ;串行口方式 1允许接收
MOV TMOD,#20H ; T1方式 2定时
MOV TL1,#0F4H ;写入 T1时间常数
MOV TH1,#0F4H
SETB TR1 ;启动 T1
MOV R0,#50H ;设数据指针
MOV R7,#10H ;接收数据长度
WAIT,JBC RI,NEXT ;等待串行口接收
SJMP WAIT
NEXT,MOV A,SBUF ;读取接收字符
MOV @R0,A ;保存一个字符
INC R0 ;修改指针
DJNZ R7,WAIT ;全部字符接收完?
RET
S M 0 S M 1 S M 2 R E N TB8 R B 8 TI RI
3,接收程序,串行输入 16个字符,进行奇偶校验。
RECS,MOV SCON,#0D0H ;串行口方式 3允许接收
MOV TMOD,#20H ; T1方式 2定时
MOV TL1,#0F4H ;写入 T1时间常数
MOV TH1,#0F4H
SETB TR1 ;启动 T1
MOV R0,#50H ;设数据指针
MOV R7,#10H ;接收数据长度
WAIT,JBC RI,NEXT ;等待串行口接收
SJMP WAIT
NEXT,MOV A,SBUF ;取一个接收字符
JNB P,COMP ;奇偶校验
JNB RB8,ERR ; P≠RB8,数据出错
SJMP RIGHT ; P=RB8,数据正确
COMP,JB RB8,ERR
RIGHT,MOV @R0,A ;保存一个字符
INC R0 ;修改指针
DJNZ R7,WAIT ;全部字符接收完?
CLR F0 ; F0 =0,接收数据全部正确
RETERR,SETB F0 ; F0 =1,接收数据出错
RET
8.1 串口通讯的基本方式
8.2 串口控制
8.3 串行接口的工作方式
8.4 串口的应用
8.1 串口通讯的基本方式
(一 ).异步通讯以字符为传送单位用起始位和停止位标识每个字符的开始和结束字符间隔不固定,只需字符传送时同步。
异步通讯常用格式:一个字符帧异步通讯的双方需要两项约定:
1.字符格式一帧字符位数的规定:数据位,校验位,起始位和停止位。
2.波特率 (位 /秒 )对传送速率的规定例:要求每秒传送 120个字符,每帧为 10位。
解,B=120× 10=1200波特 每位 0.83ms
数据位传输率 =120× 8=960位 /秒
(二 ).同步通讯以一串字符为一个传送单位,字符间不加标识位,在一串字符开始用同步字符标识,硬件要求高,通讯双方须严格同步。
D0 D1 D2 D3 D4 D5 D6 D7 停止位起始位二,串行接口功能
1.发送器:并?串数据格式转换,添加标识位和校验位,一帧发送结束,设置结束标志,申请中断。
2.接收器:串?并数据格式转换,检查错误,去掉标识位,保存有效数据,设置接收结束标志,申请中断。
3.控制器:接收编程命令和控制参数,设置工作方式:
同步 /异步、字符格式、波特率、校验方式、数据位与同步时钟比例等。
三,串行数据传送方向单工通讯:数据单向传送 。
半双工通讯:数据可分时双向传送。
全双工通讯:可同时进行发送和接收。
发送器 接收器发送器接收器
8.2 MCS-51串行控制
1个全双工串行接口,可同时进行发送和接收。
串行接口输入 /输出引脚,TXD(P3.1),RXD(P3.0)
数据格式 (P.237图 ):按不同方式,一帧位数
8/10/11发送 /接收时,数据皆低位在前。
一帧字符发送 /接收结束,置位标志位 (TI/RI)并申请 SIO中断。
中断控制:中断允许位 ES
中断入口,0023H
D0 D1 D2 D3 D4 D5 D6 D7 停止位起始位
D0 D1 D2 D3 D4 D5 D6 D7
D0 D1 D2 D3 D4 D5 D6 D8 停止位起始位 D7
串行接口控制
1.数据缓冲器 SBUF
发送 SBUF和接收 SBUF共用一个地址 99H。
1)发送 SBUF存放待发送的 8位数据,写入 SBUF将同时启动发送。
发送指令,MOV SBUF,A
2)接收 SBUF存放已接收成功的 8位数据,供 CPU读取。
读取串行口接收数据指令:
MOV A,SBUF
S M 0 S M 1 S M 2 R E N TB8 R B 8 TI RI
2.串行口控制 /状态寄存器 SCON(98H)
SM0,SM1:选择串行口 4种工作方式。
SM2:多机控制位,用于多机通讯。
REN:允许接收控制位,REN=1,允许接收; REN=0,禁止接收。
TB8发送的第 9位数据位,可用作校验位和地址 /数据标识位
RB8:接收的第 9位数据位或停止位
TI:发送中断标志,发送一帧结束,TI=1,必须软件清零
RI:接收中断标志,接收一帧结束,RI=1,必须软件清零
3.节电控制寄存器 PCON
SMOD(PCON.7):波特率加倍控制位 。
SMOD=1,波特率加倍,SMOD=0,则不加倍 。
8.3 串行接口的工作方式
SM0,SM1选择四种工作方式 。
(1) 方式 0:同步移位寄存器方式。用于扩展并行 I/O接口。
1.一帧 8位,无起始位和停止位。
2.RXD:数据输入 /输出端。
TXD:同步脉冲输出端,每个脉冲对应一个数据位。
3.波特率 B = fosc/12
如,fosc=12MHz,B=1MHz,每位数据占 1?s。
4.发送过程:写入 SBUF,启动发送,一帧发送结束,TI=1。
接收过程,REN=1且 RI=0,启动接收,一帧接收完毕,RI=1。
发送时序写入
SBUF
RXD输出
TXD
TI
D0 D1 D2 D3 D4 D5 D6 D7
写 REN=1
RI=0
RXD输入
RI
接收时序
(a)
(b)
数据从 RXD( P3.0)引脚串行输出,低位在先,高位在后; TXD( P3.1)引脚输出移位脉冲,其频率为 foc/12;发送完毕后,中断标志位 TI为 1。如要发送数据,如下所示:
MOV SCON,#00H ;串行口方式 0
MOV SBUF,A ;将数据送出
JNB TI,$ ;等待数据发送完毕移位寄存器方式
(2) 方式 1
8位数据异步通讯方式。
1.一帧 10位,8位数据位,1个起始位 (0),1个停止位 (1)。
2.RXD:接收数据端。 TXD:发送数据端。
3.波特率,用 T1作为波特率发生器,B=(2SMOD/32)× T1溢出率。
4.发送:写入 SBUF,同时启动发送,一帧发送结束,TI=1。
接收,REN=1,允许接收。接收完一帧,若 RI=0且停止位为 1
(或 SM2=0),将接收数据装入 SBUF,停止位装入 RB8,并使 RI=1;否则丢弃接收数据,不置位 RI。
当 REN=1,CPU开始采样 RXD引脚负跳变信号,若出现负跳变,才进入数据接收状态,先检测起始位,若第一位为 0,继续接收其余位;否则,停止接收,重新采样负跳变。
数据采样速率为波特率 16倍频,在数据位中间,用第 7,8,9个脉冲采样 3次数据位,并 3中取 2保留采样值。
写入
SBUF
采样
( a) 发送时序图
TXD
数据输出
TI
D0 D1 D2 D3 D4 D5 D6 D7 停止位起始位
RXD
输入数据
( b) 接收时序图
D0 D1 D2 D3 D4 D5 D6 D7 停止位起始位
RI
检测负跳变
(3) 方式 2和方式 3
9位数据异步通讯方式。
1.一帧为 11位,9位数据位,1个起始位 (0),1个停止位 (1)。
第 9位数据位在 TB8/RB8中,常用作校验位和多机通讯标识位。
2.RXD:接收数据端,TXD:发送数据端。
3.波特率,方式 2,B=(2SMOD/64)× fosc 。
方式 3,B=(2SMOD/32)× T1溢出率 。
4.发送:先装入 TB8,写入 SBUF并启动发送,发送结束,TI=1。
接收,REN=1,允许接收。接收完一帧,若 RI=0且第 9位为 1
(或 SM2=0),将接收数据装入接收 SBUF,第 9位装入 RB8,使 RI=1;
否则丢弃接收数据,不置位 RI。
发送时序写入
SBUF
TXD输出
TI
RXD输入接收时序RI
D0 D1 D2 D3 D4 D5 D6 TB8 停止位起始位 D7
D0 D1 D2 D3 D4 D5 D6 RB8 停止位起始位 D7
检测负跳变
( 4) 计算波特率方式 0为固定波特率,B=fosc/12
方式 2可选两种波特率,B=(2SMOD /64)× fosc
方式 1,3为可变波特率,用 T1作波特率发生器。
B=(2SMOD/32)× T1溢出率
T1为方式 2的时间常数,X = 28 - t/T
溢出时间,t= (28 -X)T = (28 -X)× 12/ fosc
T1溢出率 =1/t= fosc /[12× (2n -X)]
波特率 B=(2SMOD /32)× fosc/[12× (28-X)]
串行口方式 1,3,根据波特率选择 T1工作方式,计算时间常数。
T1选方式 2,TH1=X= 28-fosc/12× 2SMOD/(32× B)
T1选方式 1用于低波特率,需考虑 T1重装时间常数时间。
8.4 串行口的应用串行口初始化编程格式:
SIO,MOV SCON,#控制状态字;写方式字且 TI=RI=0
(MOV PCON,#80H) ;波特率加倍
( MOV TMOD,#20H ) ; T1作波特率发生器
( MOV TH1,#X ) ;选定波特率
( MOV TL1,#X )
( SETB TR1)
( SETB EA) ;开串行口中断
( SETB ES)
发送程序:先发送一个字符,等待 TI=1后再发送下一个字符。
1.查询方式,
TRAM,MOV A,@R0 ;取数据
MOV SBUF,A ;发送一个字符
WAIT,JBC TI,NEXT ;等待发送结束
SJMP WAIT
NEXT,INC R0 ;准备下一次发送
SJMP TRAM
2.中断方式,
ORG 0023H ;串行口中断入口
AJMP SINT
MAIN,… ;初始化编程
TRAM,MOV A,@R0 ;取数据
MOV SBUF,A ;发送第一个字符
H,SJMP H ;其它工作
SINT,CLR TI ;中断服务程序
INC R0
MOV A,@R0 ;取数据
MOV SBUF,A ;发送下一个字符
RETI
接收程序,REN=1,RI=0等待接收,当 RI=1,从 SBUF读取数据。
1.查询方式,
WAIT,JBC RI,NEXT ;查询等待
SJMP WAIT
NEXT,MOV A,SBUF ;读取接收数据
MOV @R0,A ;保存数据
INC R0 ;准备下一次接收
SJMP WAIT
2.中断方式,
ORG 0023H
AJMP RINT
MAIN,… ;初始化编程
H,SJMP H ;其它任务
RINT,CLR RI ;清中断标志
MOV A,SBUF ;读取接收数据
MOV @R0,A ;保存数据
INC R0
RETI
(一) 串行口 方式 0 用于扩展单片机的并行 I/O接口。
串行口实现:并行 → 串行的数据转换
74LS165/74LS164实现:串行 → 并行的数据转换。
(二 )异步通讯程序举例
1.发送程序,将片内 RAM 50H起始单元的 16个数由串行口发送 。 要求发送波特率为系统时钟的 32分频,并进行奇偶校验 。
MAINT,MOV SCON,#80H;串行口初始化
MOV PCON,#80H;波特率
SETB EA
SETB ES ;开串行口中断
MOV R0,#50H ;设数据指针
MOV R7,#10H ;数据长度
LOOP,MOV A,@R0 ;取一个字符
MOV C,P ;加奇偶校验
MOV TB8,C
MOV SBUF,A ;启动一次发送
HERE,SJMP HERE ; CPU执行其它任务
S M 0 S M 1 S M 2 R E N TB8 R B 8 TI RI
ORG 0023H ;串行口中断入口
AJMP TRANI
TRANI,PUSH A ;保护现场
PUSH PSW
CLR TI ;清发送结束标志
DJNZ R7,NEXT ;是否发送完?
CLR ES ;发送完,关闭串行口中断
SJMP TEND
NEXT,INC R0 ;未发送完,修改指针
MOV A,@R0 ;取下一个字符
MOV C,P ;加奇偶校验
MOV TB8,C
MOV SBUF,A ;发送一个字符
POP PSW ;恢复现场
POP A
TEND,RETI ;中断返回
2,接收程序,串行输入 16个字符,存入片内 RAM的 50H起始单元,
串行口波特率为 2400(设晶振为 11.0592MHz),。
RECS,MOV SCON,#50H ;串行口方式 1允许接收
MOV TMOD,#20H ; T1方式 2定时
MOV TL1,#0F4H ;写入 T1时间常数
MOV TH1,#0F4H
SETB TR1 ;启动 T1
MOV R0,#50H ;设数据指针
MOV R7,#10H ;接收数据长度
WAIT,JBC RI,NEXT ;等待串行口接收
SJMP WAIT
NEXT,MOV A,SBUF ;读取接收字符
MOV @R0,A ;保存一个字符
INC R0 ;修改指针
DJNZ R7,WAIT ;全部字符接收完?
RET
S M 0 S M 1 S M 2 R E N TB8 R B 8 TI RI
3,接收程序,串行输入 16个字符,进行奇偶校验。
RECS,MOV SCON,#0D0H ;串行口方式 3允许接收
MOV TMOD,#20H ; T1方式 2定时
MOV TL1,#0F4H ;写入 T1时间常数
MOV TH1,#0F4H
SETB TR1 ;启动 T1
MOV R0,#50H ;设数据指针
MOV R7,#10H ;接收数据长度
WAIT,JBC RI,NEXT ;等待串行口接收
SJMP WAIT
NEXT,MOV A,SBUF ;取一个接收字符
JNB P,COMP ;奇偶校验
JNB RB8,ERR ; P≠RB8,数据出错
SJMP RIGHT ; P=RB8,数据正确
COMP,JB RB8,ERR
RIGHT,MOV @R0,A ;保存一个字符
INC R0 ;修改指针
DJNZ R7,WAIT ;全部字符接收完?
CLR F0 ; F0 =0,接收数据全部正确
RETERR,SETB F0 ; F0 =1,接收数据出错
RET