9 串口通信原理及接口技术
9.1 串口通信
UART,SPI都是全双工,I2C是半双工
并行通讯:多条线并行;特点是控制简单,速度快,但多根线长距离成本高且同时接收存在困难
串行通讯:单根线,长距离成本低,数据流控制复杂
同步通讯:两个时钟连接,每个周期采集数据
异步通讯:时钟周期尽量相近,相位可以不同,但是波特率是一致的
- 异步通讯数据格式:一个字符帧 = 1b低电平起始位 + 5-8b数据位 + 1b校验位 + 1b停止位
UART是串行、全双工、异步通讯(在空闲时为高电平)

每一位持续的时间由波特率决定
SPI的主机、从机

主机提供时钟,选择要通讯的从机
只能有一个主机
UART连接方式

注意要对着连
波特率、比特率
波特率:信号电平在1s内的变化次数
比特率:每秒传递的二进制位数
二者的关系通过码元状态数目
\[
R = Nb \cdot \log_2{M}
\]
其中\(R,Nb,M\)分别是比特率,波特率和码元状态数目
9.2 串口原理

接受和发送的物理上的BUFFER不是一个,但是地址是共享的99H
但是由于CPU可以区分发送和接收的状态,因此可以区分;发送时CPU是主动的
收发的触发
- 发送:任何将
SBUF作为目的寄存器的写指令 - 接收:
Mode=0时,RI=0, REN=1;其他模式下,REN=1,接收到起始位,就开始接收
SCON控制寄存器

SM0SM1的组合确定了4种工作方式,其中波特率由Timer产生,可变

SM2控制方式2/3下的多机通讯REN是允许串行接收位,由软件置1,启动串行口接收数据;若软件置0,禁止接收TB8:在方式2/3中使用,是发送数据的第8位(BUFFER仅8位),作为奇偶校验位,或在多机通讯中作为地址/数据帧校验位RB8:方式2/3中如上,方式1中,若SM2=0,则RB8是接收到的停止位TI/RI:中断标志位,在发送/接收第7位数据时,由硬件置1,发送中断;中断完成后不会自动置0,必须软件置0取消申请在中断前CPU会知道是接受还是发送
PCON控制寄存器
仅最高位的SMOD与串口工作有关,是波特率倍增位
- 当工作在方式1/2/3时,波特率与之有关
SMOD=1,波特率翻倍,否则不变
9.3 串口工作方式
方式1
数据格式:1b起始位 + 8b数据位 + 1b停止位
发送时序

接收时序

当REN=1时,用16倍波特率进行RXD引脚采样
当检测到第一个低电平(起始位)时,将其移入输入移位寄存器(不是SBUF),从右呈队列左移,当起始位移动到MSB时,控制电路进行最后一次位移
当RI=0时,若SM2=2或接收到停止位=1时,将接收到的9b数据的前8b装入SBUF,停止位进入RB8,置RI=1,发送中断请求
在方式1,若SM2=1,则只有接收到停止位才置RI=1
方式2/3
数据格式如下

多了一个附加的第8位
方式2的波特率固定为内部晶振的1/64或1/32,方式3的波特率由T1的溢出率决定
波特率的计算与配置
- 方式0,固定为晶振的1/12,即机器频率
- 方式1,波特率 = \(2^{\mathsf{SMOD}}/32\cdot\)(T1溢出率)
- 方式2,波特率 = \(2^{\mathsf{SMOD}}/64\cdot\)晶振频率
- 方式3,波特率 = \(2^{\mathsf{SMOD}}/32\cdot\)(T1溢出率)
其中T1初值和波特率的关系查表如下,溢出率指定时器每秒钟的溢出次数

UART初始化
- 确定T1工作方式,编程
TMOD - 计算T1初值,装载
TH1,TL1 - 启动T1
- 确定串口工作,编程
SCON - 若是中断方式,要进行中断设置,编程
IE,IP寄存器
9.4 串口接口技术
8051 UART 通过 RS232 与 PC USB 连接,实际并没有使用USB,而是模拟RS232进行电平转换
UART除了收发线之外还有一个共地线
I2C通讯
特点是同步、半双工、串行通讯
判断题
- 51的UART不支持多机通讯,错误
- 单片机的UART和PC通讯,需要通过USB模拟一个RS232,通过UART-RS232-USB实现,正确
- 51的UART通讯的收发共用一个中断例程,正确;但是可以用RI和TI判断
- 51的UART接收中断指的是UART收到一帧后,通知CPU读取数据的中断,正确
- 51的UART发送中断指的是UART发完一帧后,通知CPU可以写SBUF,正确