9 串口通信原理及接口技术

学习笔记
作者: MingXiao

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初始化

  1. 确定T1工作方式,编程TMOD
  2. 计算T1初值,装载TH1,TL1
  3. 启动T1
  4. 确定串口工作,编程SCON
  5. 若是中断方式,要进行中断设置,编程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,正确


Comments