深入理解8051串口通信

一、异步串口通信的基本原理

异步串口通信的基本原理是,点对点异步,没有时钟线没有地址。

以低电平为开始位,高电平闲置,通信双方约定相同的数据帧大小,还有在相同的波特率下,收发顺利进行。

异步串行通信可双线同时收发,为全双工通信。

数据帧内容包括一个开始位、5到9个数据位、一个可选的检验位和一到两位的停止位。

以上是异步串口通信的通用原理,但具体的通信过程是怎样的呢?

这就得拿一个具体的实现——8051的built-in UART来分析一下了.

8051的built-in UART可以通过软件编程工作于四种模式:模式0、模式1、模式2和模式3。

这里以比较常用的模式1——8位可变波特率的UART——来简要分析一下其异步通信过程。

模式1的帧大小为10位:一个开始位(0)+八个数据位(最低有效位先)+一个停止位(1),在接收方,停止位被送入串口的控制寄存器SCON的RB8。

[异步串行传输的发送]由一个“写入SBUF”信号触发,任何以SBUF寄存器为目标寄存器的指令被执行都产生“写入SBUF”信号,如MOV SUBF,A。“写入SBUF”信号同样向[移位寄存器]的第九位写入1,并且发一个信号给[TX控制单元],向其请求一次发送。数据传送的实际开始点是下一个发送脉冲(TX CLOCK)的到来时,不是与“写入SBUF”信号同步,看下面的时序图。[TX控制单元]的工作脉冲——发送脉冲(TX CLOCK)是对系统发来的时钟脉冲经一个[四位计数器]拉伸16倍后获得,而[下沿降检测单元(1-to-0 transtition detector)]是直接使用系统发来的时钟脉冲工作,因此,对接收信号(RXD)采样的速度比发送高16倍。

image

由于[DATA控制线]默认输出为低电平,它与[移位输出线]输入一个[与门]后也是低电平,而[SEND控制线]默认输出为高电平,二者输入一个[或门]后,输出是高电平,TXD空闲是高电平。[TX控制单元]在第一个发送脉冲拉低SEND控制线,TXD发出一个低电平开始位,一个发送脉冲过后,[TX控制单元]拉高DATA线,TXD的输出取决于移位输出。尔后,TX控制单元每发送一个移位脉冲就有一位数据发送到TXD。数据位从右边移出后,左边移入0。当移剩[最高有效位]时,最高有效位的左边是最初送的第九位1,左边其余位全是0,这种模式会被zero detector检测到,并置[TX控制单元]进入[发送最后一位]状态——发送一位后拉高SEND线,并置中断标志TI,向MCU发了“发送完毕”的中断请求。[发送最后一位]发生在“写入SBUF”信号后的第十个发送脉冲。

[异步串行传输的接收]由[下沿降检测单元]在RXD线检测到1到0的跳变触发。前面已经指出,下沿降检测单元16倍于波特率的速度对RXD进行采样,也就是说,每一个发送脉冲采样16次。当检测到一个1到0的跳变,分频的四位计数器被重置,重置计数器是因为1到0的跳变可能出现在任何一个采样周期,重置计数器可对齐发送脉冲与接收脉冲的边沿,做到真正的同步。计数器被重置的同时,1FFH被写入[输入移位寄存器](input shift register)。

在每一个接收脉冲,RX控制单元(RX CONTROL)会控制[位检测单元(bit detector)]在第七、第八和第九个采样周期去检测RXD三次,检测的结果必须至少两次稳定才被确认。检测三次是为了去除噪音的可能。如果第一个接收脉冲被确认的值不是0,整个电路会被重置,回到当初的反复检测RXD有无1到0的跳变的状态。如果确认是0,那么0会被右移入[输入移位寄存器],数据帧的接收处理开始。

数据位从右边移入[输入移位寄存器],初始的1从左边移出。当开始位(0)被移到最左的一位(模式1时是九位长的移位寄存器),RX控制单元被反馈[尾位操作信号],进入最后一次移位,移入最后一位后,RX控制单元根据是否满足以下两个条件,决定是否将九位数据分别载入SBUF和RB8,最后拉高RI。

第一,RI=0,这说明上一帧数据接收完后发出的中断请求已被响应,SUBF中的数据已经被取走;

第二,SM2=0 或者 接收的停止位为1;停止位不为1说明数据帧有错;SM2为0指明本机为多机通信中的目标从机,可以接收数据;

如果不满足,丢弃接收到的数据帧。不管是否接收数据帧,最后整个电路都回到当初的反复检测RXD有无1到0的跳变的状态。

二、8051 UART方式1通信过程详解

一、发送过程(Transmission)

发送由任何以SBUF为目标寄存器的指令触发。向SBUF写入数据时,硬件会向移位寄存器的第九位写入1,并向TX控制单元发起发送请求。发送的实际开始时间为16分频计数器下一次溢出后的机器周期(因此,位时间与写SBUF操作异步)。

发送流程如下:

  1. 激活SEND:TX控制单元激活SEND信号,TXD引脚输出开始位(低电平);
  2. 激活DATA:1个位时间后,DATA信号激活,移位寄存器的输出位被允许发送到TXD;
  3. 移位传输:第一个移位脉冲在DATA激活后1个位时间发生。数据位向右移出时,左侧补零;
  4. 检测第九位:当数据字节的最高有效位(MSB)到达移位寄存器的输出位置时,最初载入第九位的1恰好在MSB左侧,且其左侧所有位均为零。此状态触发TX控制单元执行最后一次移位;
  5. 发送完成:最后移位后,SEND信号失效,发送中断标志TI置位。整个过程在写SBUF后经过10次16分频计数器溢出完成。
    image

二、接收过程(Reception)

接收由RXD引脚检测到1到0的跳变触发。为此,RXD以波特率16倍的频率被采样:

  1. 计数器重置:检测到跳变时,16分频计数器立即重置,输入移位寄存器写入0x1FF。重置计数器可使溢出与输入位时间边界对齐;

  2. 位采样与抗噪:每个位时间内,计数器的第7、8、9个状态会对位检测器采样RXD的值。接受的值需至少在3次采样中出现2次(抗噪声干扰); image
    image

  3. 无效开始位处理:若第一个位时间接受的值不为0(无效开始位),接收电路重置并回到检测跳变状态;

  4. 有效帧接收:若开始位有效,它被移入输入移位寄存器,后续位继续接收。数据位从右侧移入,左侧移出1;

  5. 帧结束处理:当开始位移到移位寄存器最左侧时,触发最后一次移位。此时需满足两个条件才会加载数据到SBUF(数据位)和RB8(停止位)并置位接收中断标志RI

    • RI=0(上一帧数据已被读取);
    • SM2=0 或 接收的停止位为1;
  6. 结果处理:若条件不满足,接收帧被丢弃。无论是否成功,接收电路均回到检测RXD跳变的初始状态。
    image


三、8051单片机串口模式2与模式3详解

一、核心概述

模式2和模式3为11位异步串行通信模式,数据帧结构统一,仅波特率生成方式存在差异,适用于需要额外校验位或多机通信的场景。

核心特性 详细说明
数据帧格式 11位:1位起始位(0)+ 8位数据位(最低位优先)+ 1位可编程数据位(第9位)+ 1位停止位(1)
第9位数据位 发送时(TB8):可手动赋值为0或1(用于奇偶校验/多机通信地址标识);
接收时(RB8):存储接收的第9位数据(存入SCON寄存器)
波特率特性 模式2:固定为晶振频率的1/32或1/64(由SMOD位控制);
模式3:可变波特率(由定时器1或定时器2生成,取决于TCLK/RCLK位状态)
硬件关联 接收部分与模式1完全一致;发送部分仅在移位寄存器的第9位设计上与模式1不同(参考图19、20的串口结构示意图)

二、详细技术说明(翻译+整理)

1. 发送过程(Transmission)

  1. 触发条件:执行任何以SBUF(发送缓冲器)为目标寄存器的指令(即“写SBUF”操作)。
  2. 数据加载:“写SBUF”信号会将TB8(发送第9位数据)加载到发送移位寄存器的第9位,并向发送控制单元(TX Control)发出发送请求。
  3. 时序同步:发送从“16分频计数器”下一次溢出后的机器周期的SIP1时刻开始(比特周期同步于16分频计数器,而非“写SBUF”信号)。
  4. 发送流程
    • 首先激活SEND信号,将起始位(0)输出到TXD引脚;
    • 1个比特周期后,激活DATA信号,使发送移位寄存器的输出位送至TXD;
    • 再经过1个比特周期后,产生第一次移位脉冲,将停止位(1)移入移位寄存器的第9位;
    • 后续移位过程中,数据位从右向左移出,同时从左侧移入0;
    • 当TB8移至移位寄存器的输出位置时,停止位位于TB8左侧,其左侧所有位置均为0;
    • 该状态触发发送控制单元执行最后一次移位,随后关闭SEND信号并置位TI(发送中断标志位),此过程发生在“写SBUF”后的第11次16分频计数器溢出时。
      image
      image
      image
      image

2. 接收过程(Reception)

  1. 触发条件:RXD引脚检测到1到0的跳变(起始位触发)。
  2. 采样机制:RXD引脚以“波特率×16”的频率被采样;检测到跳变后,16分频计数器立即复位,并向输入移位寄存器写入0FFH。
  3. 数据校验:每个比特周期的第7、8、9个计数器状态时,位检测器采样RXD电平,采用“3取2”原则(至少2次采样值一致)确定有效电平。
  4. 起始位验证
    • 若第一个比特周期(起始位)的有效电平不为0,接收电路复位,重新等待下一次1到0的跳变;
    • 若起始位有效,则移入输入移位寄存器,后续数据帧继续接收(数据位从右向左移入,1从左侧移出)。
  5. 接收完成判断:当起始位移至移位寄存器的最左侧(模式2/3为9位移位寄存器)时,触发接收控制单元(RX Control)执行最后一次移位,随后尝试加载SBUF和RB8并置位RI(接收中断标志位)。
  6. 加载条件(需同时满足)
    • 条件1:RI=0(当前无未处理的接收数据);
    • 条件2:SM2=0(多机通信模式关闭)或接收的第9位数据=1(多机通信中标识地址帧)。
  7. 结果处理
    • 若满足上述条件:第9位数据存入RB8,前8位数据存入SBUF;
    • 若不满足:接收数据永久丢失,RI不置位;
    • 无论条件是否满足,1个比特周期后,接收单元均返回初始状态,继续监测RXD引脚的1到0跳变。

3. 关键注意事项

  • 接收的停止位电平不影响SBUF、RB8和RI的状态(仅用于帧结构完整性,不参与数据存储或中断触发);
  • 模式2/3的核心差异仅在于波特率生成方式,数据帧结构、收发逻辑完全一致;
  • 第9位数据位(TB8/RB8)是模式2/3的核心扩展,可灵活用于奇偶校验位传输或多机通信的地址/数据帧区分。

三、术语对照表(统一规范)

英文术语 中文翻译 说明
TXD/RXD 发送/接收引脚 串口数据收发引脚
SBUF 串行数据缓冲器 分为发送SBUF和接收SBUF(物理独立,地址相同)
TB8/RB8 发送/接收第9位数据 模式2/3专用,存储第9位数据(校验位/地址标识)
SCON 串口控制寄存器 包含SM2、RI、TI等串口控制标志位
SM2 多机通信控制位 模式2/3中用于多机通信地址帧筛选
TI/RI 发送/接收中断标志位 串口收发完成的中断触发标志
Divide-by-16 counter 16分频计数器 串口采样时钟生成单元
1-to-0 transition 1到0的跳变 起始位的电平特征(用于触发接收)
LSB first 最低位优先 数据位传输顺序
TCLK/RCLK 发送/接收时钟控制位 控制模式3的波特率时钟源(定时器1/2)

四、8051串口SM2位与接收双缓冲核心解析

在8051单片机串口通信中,接收双缓冲是硬件基础,SM2位是数据筛选核心,二者分工明确、协同保障通信可靠,核心要点如下:

一、 接收双缓冲:硬件固有,防丢帧核心

8051串口接收侧为双缓冲结构,即硬件移位寄存器(第一层,不可访问) + 接收 SBUF(第二层,用户可访问)。发送侧为单缓冲,无需软件配置。

  1. 接收侧双缓冲:包含 1 个硬件接收移位寄存器(不可访问) + 1 个用户可访问的接收 SBUF;
  2. 工作逻辑:移位寄存器先接收串行数据,拼接成完整字节后,一次性转入接收 SBUF,此时移位寄存器可立刻接收下一个字节,不用等 CPU 读取 SBUF,避免两帧数据间隔短导致丢失;
  3. 关键注意:SM2 的筛选,是在移位寄存器拼接完数据后、写入接收 SBUF 前执行的,相当于一道 “闸门”,不满足条件就直接把移位寄存器里的数据清空,根本到不了接收 SBUF;
  4. 发送侧无缓冲:只有 1 个发送 SBUF,CPU 写入数据后,硬件自动串行发送,发送期间 CPU 不能再写入新数据,否则会覆盖,属于单缓冲。
    补充 1 个关键实操细节(避坑):移位寄存器和接收 SBUF 是物理独立的两个硬件,所以移位寄存器在往 SBUF 传数据时,还能同步接收下一波串行数据,这才是双缓冲的核心价值;
    补充 2 个易混点:发送侧只有 1 个发送 SBUF,无移位寄存器缓冲(发送时是 SBUF 直接送硬件串行发送),所以是单缓冲;且接收 SBUF 和发送 SBUF 共用一个地址(0x99),CPU 读就是取接收数据、写就是存发送数据,硬件会自动区分。

二、 SM2控制位:数据筛选闸门,规则硬性

SM2是SCON寄存器控制位,默认值1,在移位寄存器传数据到SBUF前执行筛选,决定数据留存与否,核心规则清晰:

  1. 模式2/3(9位UART,多机通信):SM2=1时,仅接收第8位为1的地址帧(入SBUF、置RI、触发中断),第8位为0的数据帧直接丢弃(不入SBUF、不置RI、不触发中断);SM2=0时接收所有帧;
  2. 模式1(8位UART,单机通信):SM2=1接收失效、数据全丢,实操需设SM2=0才能正常接收。

补充:SM2=1 时,数据丢弃的完整硬件流程(为啥不进 SBUF)
8051 串口接收数据时,硬件会先做判断,再决定是否写入 SBUF,流程如下:
①接收端硬件先完整接收一帧数据(含起始位、数据位、校验位 / 第 8 位、停止位),完成帧校验;
②校验通过后,硬件先检测SM2 状态 + 第 8 位数据,这是核心筛选逻辑;
③满足「SM2=1 + 第 8 位 = 1」 才会触发后续操作:把接收的数据写入接收 SBUF,再硬件置 RI=1 触发中断;不满足(SM2=1 + 第 8 位 = 0):直接丢弃整帧数据, 不写入任何缓冲,也不触发任何标志位和中断。

三、 二者关联:独立分工,协同生效

  1. SM2筛选是独立硬件逻辑,核心管“要不要收”;
  2. 第一层缓冲即移位寄存器,核心管“能不能安全收”,是SM2功能稳定落地的保障。

四、 多机通信核心流程(模式2/3专属,依托SM2实现)

  1. 所有从机初始化:串口设为模式2/3,配置SM2=1,仅监听主机发送的地址帧;
  2. 主机发送指令:先发送地址帧(第8位=1,内含目标从机地址);
  3. 从机匹配筛选:所有从机接收地址帧,仅地址匹配的目标从机,软件置SM2=0,其余从机保持SM2=1
  4. 主机传输数据:发送数据帧(第8位=0),仅SM2=0的目标从机能接收,其余从机直接丢弃数据帧;
  5. 通信结束:目标从机完成数据接收后,可重新置SM2=1,等待下一次地址帧匹配。

五、 实操避坑要点

  1. 模式1单机通信,串口初始化必设SM2=0
  2. 多机从机需按“SM2=1待寻址→匹配地址改SM2=0收数据→按需复位SM2=1”操作;
  3. CPU读取SBUF数据后,需手动清零RI标志位。

五、D触发器各引脚含义及类型分析

引脚含义

D触发器中各符号代表的含义:

符号 全称 功能描述
D Data 数据输入端,在时钟有效边沿到来时,该端数据会被存储到触发器中
S Set 置位输入端(也称SD),高电平有效时,强制输出Q=1,与D输入端状态无关
Q Output 数据输出端,存储并输出触发器当前状态
CL Clock 时钟输入端(也称CLK/CK),控制数据采样时机,通常在上升沿(↑)触发

工作原理: D触发器是一种边沿触发的存储器件,在时钟信号的上升沿,将D端的逻辑状态复制到Q端输出,实现"数据锁存"功能 。

触发器类型判断

这种触发器属于:D触发器(Data Flip-Flop/Delay Flip-Flop),是数字电路中最基本的时序逻辑单元之一 。

D触发器的关键特征:

  1. 单数据输入(D) + 时钟输入(CL):结构简单,控制直观
  2. 特性方程:Qⁿ⁺¹ = D,即下一状态(Qⁿ⁺¹)完全取决于当前D输入值
  3. 边沿触发方式:只在时钟信号的上升沿(或下降沿,取决于设计)采样数据
  4. 记忆功能:数据一旦被锁存,在下次时钟触发前保持不变

补充说明

D触发器通常还带有辅助控制引脚

  • S(Set):异步置位端,高电平有效时直接将Q置为1
  • R(Reset):异步复位端(也称CLR),高电平有效时直接将Q置为0

这些控制信号独立于时钟,用于初始化或强制改变触发器状态,在电路复位或异常处理时非常有用 。

应用场景

D触发器广泛应用于:

  • 寄存器:数据暂存与传输
  • 移位寄存器:数据串行-并行转换
  • 存储器:构成RAM的基本存储单元
  • 时序逻辑电路:计数器、分频器等

总结: 您描述的触发器是D触发器,其D、S、Q、CL分别代表数据输入、置位、数据输出和时钟输入,是一种边沿触发的单输入存储器件,在数字系统中承担数据存储与同步控制的核心功能。
出一道选择题:关于8051 UART接收过程,以下描述正确的是( )
A. 接收触发后,输入移位寄存器初始值为0x000
B. 每个位时间仅采样1次RXD值以提高效率
C. 加载SBUF的条件之一是RI=1
D. 若停止位无效且SM2=1,则接收帧被丢弃

(答案:D。解析:A选项初始值为0x1FF;B选项每个位时间采样3次(7-9);C选项RI需为0;D选项符合条件,故正确。)

未明问题

8051发送端存在独立于SBUF寄存器之外的发送移位寄存器吗?为什么官方手册的图上却没画?
如果发送端存在独立于SBUF寄存器之外的发送移位寄存器,为什么不说发送端是双缓冲结构?
Intel 8051 官方数据手册(1980 版)
明确接收移位寄存器为 9 位结构,工作流程如下:
检测到 RXD 起始位 0 后,寄存器初始填充全 1(9 位);
每波特率时钟整体右移 1 位,最右位补 RXD 采样数据,最左位旧值移出丢弃; 为什么官方手册说是右移?
“发送时,数据位从右边移出后,左边移入0。接收时,数据位从右边移入[输入移位寄存器],初始的1从左边移出”。如果发送时是整体右移,移出的位被发送。接收时,移位寄存器不也应该整体右移,也就是从左边移入吗?

posted @ 2025-12-19 18:06  wangya216  阅读(124)  评论(0)    收藏  举报