串行通信是实现远距离低成本数据传输的有效办法
(1)同步传输和异步传输(按数据传输的方式)
a)同步传输:以数据块为单位进行传送,包括同步字符、数据块和校验字符CRC
优点:传输速度快
缺点:要求发送时钟与接收时钟必须保持严格同步
b)异步传输:以字符为单位进行传输,每个字符均按照固定的字符格式传送,又被称为帧。
优点:无需传送同步脉冲,可靠性高,所需设备简单,发送与接收相互独立,互不同步,但双方必须使用相同波特率和字符帧格式。
缺点:字符帧中包含起始位和停止位而降低了有效数据的传输效率。
异步通信协议:①没有发送数据时,数据线保持“1”状态;②发送数据时,先发起始位“0”,其后是数据;③数据后再发一位停止位“1”。
(2)单工、双工、半双工(按数据传输方向划分)
波特率:每秒钟传送信号的数量。
单位:波特(Baud)
每秒钟传送二进制数的位数称为比特率,单位是bps或b/s。
在单片机串行通信中,传送的信号是二进制信号,波特率和比特率数值上是相等的,单位采用bps。
UART:Universal Asynchronous Receiver/Transmitter 通用异步接收器/发送器
SUBF:用来存放发送和接收数据的两个独立的缓冲寄存器。
发送:CPU将数据送到发送SBUF寄存器(MOV SUBF,A)后,SBUF便一位一位的发送数据,发送完成后标志TI=1;
接收:在CPU允许接收的前提下(REN=1),外部串行数据经过RXD送入SBUF时,电路便自动启动接收,知道完成一帧数据后标志RI=1。CPU通过执行以下指令取出收到的数据:MOV A,SBUF
SM0 | SM1 | SM2 | REN | TB8 | RB8 | TI | RI |
SM0、SM1:工作模式选择;
SM2:多机通信使能位(模式0、1不用,设置为0)
REN:允许接收位,只有当REN=1时,才允许接收数据
TB8:在9位有效数据传送模式2、3时,存放将要发送的第9位数据(奇偶校验)
TB8:在9位有效数据传送模式2、3时,存放接收的第9位数据(奇偶校验)
TI:完成一帧数据发送的标志,必须由软件清零,发送完成TI=1并申请中断
RI:完成一帧数据接收的标志,必须由软件清零,接收完成RI=1并申请中断
CPU与SBUF之间如何“沟通”、“配合”?
双方通过标志位进行协调
(1)发送数据时,当SBUF完成数据发送,TI=1并申请中断
①中断方式
中断服务程序:CLR TI
MOV SBUF,A
②查询方式
JNZ TI,$
CLR TI
MOV SBUF,A
(2)接收数据时,当SBUF从RXD接收完一个完整的数据帧时,RI=1并申请中断。
①中断方式
中断服务程序:CLR RI
MOV A,SBUF
②查询方式
JNZ RI,$
CLR RI
MOV A,SBUF
SMOD | X | X | X | GF1 | GF0 | PD | IDL |
SMOD:串行口波特率倍率控制位
SMOD=1时,模式1、2、3的波特率加倍
特点:同步移位寄存器(同步通信)
波特率:fosc/12(固定不可变)
工作过程:RXD做数据口(发送或接收数据),TXD作为移位脉冲输出端(同步脉冲)在移位过程中,先移数据的低位。
主要功能:使用串行口扩展并行口。
特点:10位(1位起始位+8位数据位+1位停止位)的异步通信方式
波特率:波特率可变
工作过程:
a)发送操作:在TI=0时,执行MOV SBUF,A。自动在8位字符的前后分别添加起始位和停止位,并从TXD端开始依次发送一帧数据,当发送完成后TI=1。
b)接收操作:在REN=1且RI=0时,串行口接收电路对RXD进行采样,其采样频率是波特率的16倍。当连续8次采集到RXD上为低电平时,检测电路便认为RXD线上有了“起始位”,此后在每个采样周期的7、8、9三个脉冲时对RXD进行采样,按照“三中取二”原则确定该位的数据是高电平还是低电平。
当接收到停止位时,必须满足RI=0且SM2=0,才能把数据传送到SBUF,并使RI=1,否则数据丢失。所以每次接收数据前必须把RI清零。
特点:11位(1位起始位+8位数据+1位奇偶校验+1位停止位)的异步通信方式
波特率:模式2波特率固定(fosc/64或fosc/32),模式3波特率可由编程改变。
工作方式:
a)发送操作:与模式1唯一的区别是,在发送前将第9位数据送入TB8;
b)接收操作:与模式1唯一的区别是,RB8中收到的是第9位数据,而不是停止位。