51单片机——串口通信(二)

目录

[2. 单片机串口介绍](#2. 单片机串口介绍)

[2.1 接口标准](#2.1 接口标准)

[2.2 串口内部结构](#2.2 串口内部结构)

[2.3 串口相关寄存器](#2.3 串口相关寄存器)

[2.3.1 串口控制寄存器 SCON](#2.3.1 串口控制寄存器 SCON)

[2.3.2 电源控制寄存器 PCON](#2.3.2 电源控制寄存器 PCON)

[2.4 串口工作方式](#2.4 串口工作方式)

[2.4.1 方式0](#2.4.1 方式0)

[2.4.2 方式1](#2.4.2 方式1)

[2.4.3 方式2和方式3](#2.4.3 方式2和方式3)

[2.4.4 波特率的计算](#2.4.4 波特率的计算)


2. 单片机串口介绍

串口通信是指外设和计算机间通过数据信号线、地线等按位进行传输数据的一种通信方式,属于串行通信

串口是一种接口标准,它规定了接口的电气标准,没有规定接口插件电缆以及使用的协议

2.1 接口标准

接口标准有很多,常用的是 RS-232、RS-485

RS-232 是 RS-232C 的改进,原理相同,这里用 RS-232C进口进行讲解

RS-232C 是EIA(美国电子工业协会)1969年修订 RS-232C 标准,定义了数据终端设备(DTE)与数据通信设备(DCE)之间的物理接口标准

接口规定使用25针连接器,简称 DB25,连接器的尺寸及每个插针的排列位置都有明确的定义

RS-232C 还有一种9针的非标准连接器接口,简称 DB9,串口通信使用的大都是 DB9 接口

DB25 和 DB9 接头有公头、母头之分,其中带针状的接头是公头,带孔状的接头是母头

公头和母头的管脚定义顺序是不一样的,常用管脚功能如下:

常用 2,3,7 管脚,即TXD、RXD、SGND

RS232C 对逻辑电平也做了规定:在 TXD、RXD 数据线上:

逻辑1 为 -3 -- -15V 的电压;逻辑 0 为 3 -- 15V 的电压

可见,RS-232C 是用正负电压 表示逻辑状态,与晶体管逻辑集成电路(TTL)以高低电平表示逻辑状态的规定相反,而 51单片机 使用的就是 TTL电平,要实现 51 单片机与计算机的串口通信,需要进行TTL 与 RS-232C 电平转换 (通常使用的电平转换芯片是 MAX232

串口数据收发线要交叉连接,计算机的 TXD 要对应单片机的 RXD,计算机的 RXD 要对应单片机的 TXD,并且共 GND

RS232 的通信协议比较简单,通常遵循96-N-8-1 格式

96:通信波特率为 9600,串口通信中通常使用的是异步串口通信,即没有时钟线,所以两个设备通信,必须要保持一致的波特率

N:表示无校验位,由于串口通信相对更容易受到外部干扰导致传输数据出现偏差,可以在传输过程加上校验位来解决这个问题

8::表示数据位数为 8位

1:表示 1 位停止位,串口通讯的数据包从起始信号开始,直到停止信号结束。(数据包的起始信号由一个逻辑 0 的数据位表示,停止信号可由 0.5、1、1.5 或 2 个逻辑 1 的数据位表示,双方约定一致即可)

2.2 串口内部结构

**SBUF:**串行缓冲寄存器(实际是两个独立寄存器:发送缓冲器、接收缓冲器,共用一个地址99H)。发送时,CPU 向 SBUF 写入数据,数据进入发送缓冲器;接收时,接收完成的数据存入接收缓冲器,CPU 从 SBUF 读取。

TH1、TL1:定时器 1 的高 8 位和低 8 位寄存器,51 串口的波特率通常由定时器 1(工作在定时模式)的溢出率决定。

发送控制器 :控制串行数据的发送过程,完成 "并行→串行" 转换及帧格式(起始位、数据位、停止位)的生成,TI是发送中断标志位(发送完成后自动置 1)。

接收控制器 :控制串行数据的接收过程,完成 "串行→并行" 转换及帧校验,RI是接收中断标志位(接收完成后自动置 1)。

TIRI是 "完成信号",需软件清零(避免重复触发中断)

移位寄存器:接收时用于暂存串行输入的 bits,逐位拼接成完整字节后送入接收 SBUF。

控制门 :发送时的开关,在发送控制器的控制下,将发送 SBUF 的数据按串行时序输出到TXD引脚。

TXD/RXD:串口的发送 / 接收引脚(物理接口),分别输出串行发送信号和输入串行接收信号。

SMOD:波特率倍增位(来自 PCON 寄存器的最高位),用于调整波特率分频系数(0 = 默认分频,1 = 分频系数减半)。

≥1(或门) :中断触发逻辑,当TIRI置 1 时,产生串口中断请求,通知 CPU 处理(需提前开启中断允许)。

发送流程(数据从 CPU 到 TXD)

  1. CPU 将待发送的 8 位并行数据写入SBUF(发送缓冲器);
  2. 发送控制器检测到发送缓冲器有数据后,启动发送:
    • 先通过控制门输出起始位(低电平);
    • 再将发送缓冲器的 8 位数据通过控制门逐位串行输出(从低位到高位);
    • 最后输出停止位(高电平),完成一帧数据发送;
  3. 发送完成后,发送控制器自动将TI(发送中断标志)置 1;
  4. TI通过或门触发串口中断(若中断允许),CPU 可在中断服务程序中清除TI,准备下一次发送。

接收流程(数据从 RXD 到 CPU)

  1. RXD引脚检测到外部串行信号的起始位(低电平跳变),触发接收控制器启动接收;
  2. 接收控制器根据波特率时钟(与发送端同步)对RXD信号采样,将串行 bits 逐位移入移位寄存器
  3. 移位寄存器收集满 8 位数据后,自动拼接成并行字节,送入接收SBUF
  4. 接收完成(检测到停止位)后,接收控制器将RI(接收中断标志)置 1;
  5. RI通过或门触发串口中断(若中断允许),CPU 在中断服务程序中读取SBUF中的数据,并清除RI,准备下一次接收。

波特率生成(核心:定时器 1 的作用)

51 串口的波特率由定时器 1 的溢出率决定(仅异步模式 1、3),图中明确了其计算逻辑:

  1. 定时器 1(TH1、TL1)工作在方式 2(8 位自动重装),定时溢出时产生 "T1 溢出率"(单位:次 / 秒);
  2. 溢出率经过分频电路处理:
    • SMOD=0时,分频系数为÷16
    • SMOD=1时,分频系数为÷2(波特率翻倍);
  3. 最终波特率公式:波特率 = (2^SMOD / 32) × (T1 溢出率)(T1 溢出率 = 晶振频率 / [12 × (256 - TH1)],12 是 51 的机器周期分频系数)
2.3 串口相关寄存器
2.3.1 串口控制寄存器 SCON

SM0、SM1 为工作方式选择位

RB8 :在方式 2 / 3中,是接收 数据的**第9位,**作为奇偶校验位或地址/数据帧的标志位

TB8 :在方式 2 / 3中,是发送 数据的第9位,可以用软件规定其作用。在方式 0 /1 中,该位未用到

R1:接收中断标志位 。在 方式0 时,当串行发送第 8 位数据结束时,或在其他方式中,串行接收 停止位的中间时,由内部硬件使 R1 置1,向 CPU 发送中断申请 。也必须在中断服务程序中,用软件将其清 0,取消此中断申请

SM2:多机通信控制位 ,可以实现多机通信(一台主机(Master)和多台从机(Slave)通过同一根串口总线(TX/RX)通信」的模式),主要用于方式 2 和方式 3( 因为 9 位数据中,第 9 位是奇偶校验位(P),多机通信时会把这一位复用为 地址 / 数据标志位(TB8/RB8))(多机通信一般将 SM2 置 1)

SM2=1,RB8=0,不激活R1,收到的信息丢弃

RB8=1,收到的数据进入SBUF,并激活 R1,进而在中断服务中将数据从SBUF读走

SM2=0,不论收到的 RB8 为0或1,均可以使收到的数据进入SBUF,并激活R1(即此时RD8不具有控制R1激活的功能)

REN:允许串行接收位

REN=1,启动串行口接收数据;REN=0,禁止串行口接收数据

T1:发送中断标志位 。在 方式0 中,当串行发送第 8 位数据结束时,或在其他方式中,串行发送停止位的开始时,由内部硬件使 T1 置1,向 CPU 发送中断申请。在中断服务程序中,必须用软件将其清 0,取消此中断申请

2.3.2 电源控制寄存器 PCON

SMOD:波特率倍增位。在串口 方式1、方式2、方式3 时,波特率与 SMOD 有关,当SMOD = 1时,波特率提高一倍。

复位时,SMOD=0

2.4 串口工作方式
2.4.1 方式0

方式0 时,串行口的输入输出方式为同步 移位寄存器,主要用于**拓展并行输入/输出口,数据输入的节奏完全由 TXD 的移位脉冲控制,**这是与异步通信(方式 1/2/3)最核心的区别

方式 0 输出的本质是 "用同步移位脉冲驱动 8 位数据串行输出",核心作用是通过 TXD 的时钟同步,将 SBUF 中的并行数据转为 RXD 的串行数据,常用于扩展并行输出口(例如:通过串转并芯片 74HC595,将 RXD 的串行数据转为 8 位并行数据输出)

功能:同步移位输出(或输入),不用于常规异步串口通信(无起始位 / 停止位,仅 8 位数据

引脚分工:

RXD(P3.0):作为数据输出线(发送时输出 8 位数据);

TXD(P3.1):作为移位脉冲线(输出同步时钟,控制数据移位节奏);

波特率固定 :仅由晶振频率决定,为 fosc/12(如 11.0592MHz 晶振,波特率 = 11.0592MHz/12=921600Hz)。

数据由 RXD(P3.0)引脚输入或输出,同步移位脉冲由 TXD(P3.1)引脚输出

发送和接收均为 8 位数据,低位在前,高位在后,波特率固定为 fosc/12

对应的输入输出时序图如下:

方式 0 输出:( 单片机→外部(RXD 输出数据)

最上方:"写入 SBUF"(启动信号)

  • 当 CPU 执行 "写 SBUF" 指令(如MOV SBUF, A)时,产生一个写脉冲,触发方式 0 的发送过程。
  • 这是整个时序的 "起点":写入 SBUF 后,硬件自动启动数据移位输出。

中间:RXD(数据输出)与 TXD(移位脉冲)的配合:

  • RXD(数据) :写入 SBUF 后,SBUF 中的 8 位并行数据(D0~D7)会通过 RXD 引脚逐位串行输出,时序上严格与 TXD 的移位脉冲同步。

    • 输出顺序:从最低位 D0 开始,依次输出 D1~D7(图中明确标注 D0→D1→...→D7 的顺序);
    • 无额外帧格式:仅 8 位数据,无起始位、停止位或校验位(区别于方式 1/2/3 的异步帧)。
  • TXD(移位脉冲) :作为同步时钟,每输出一个脉冲,RXD 就移位输出 1 位数据(脉冲前沿 / 后沿触发移位)。

    • 脉冲频率:等于方式 0 的波特率(fosc/12),即每个脉冲的周期为 12 个时钟周期(与 51 的机器周期一致);
    • 脉冲数量:共 8 个(对应 8 位数据,每位移出对应 1 个脉冲)。

最下方:TI(发送中断标志)的变化

  • 当 8 位数据全部输出完成(最后一个移位脉冲结束后),硬件自动将TI(发送中断标志位)置 1(图中最后跳变为高电平),表示 "发送完成"。
  • 注意:TI 置 1 后不会自动清零,需通过软件指令(如CLR TI手动清零,否则会持续触发串口中断(若中断允许)。

方式 0 输入:( 外部→单片机(RXD 输入数据)

方式 0 输入的本质是 "用 TXD 的同步移位脉冲驱动外部串行数据移入单片机",通过 RXD 接收 8 位纯数据(无额外帧格式),最终存入 SBUF 并以 RI 标志通知 CPU 读取。其核心价值是利用同步时钟实现并行输入口的扩展

输入的启动需要两个关键条件(时序图中明确标注):

  1. REN=1:接收允许控制位(来自 SCON 寄存器)必须置 1,打开串口接收功能(相当于 "接收开关");
  2. RI=0 :接收中断标志位必须先清零(通常由软件初始化时执行CLR RI),否则硬件会认为 "上一次接收未处理",不启动新的接收。
  • RXD(数据输入):外部串行数据通过 RXD 引脚输入,时序上严格与 TXD 输出的移位脉冲同步。

    • 输入顺序:从最低位 D0 开始,依次输入 D1~D7(图中明确标注 D0→D1→...→D7 的顺序),共 8 位数据(无起始位、停止位,仅纯数据位,区别于异步通信);
    • 数据有效性:每个数据位的电平需在移位脉冲的有效边沿(通常是脉冲的下降沿或上升沿)保持稳定,确保硬件正确采样。
  • TXD(移位脉冲):作为同步时钟,由单片机内部生成,用于控制数据移位输入的节奏(与方式 0 输出时的脉冲来源一致)。

    • 脉冲频率:固定为fosc/12(晶振频率 ÷12),与方式 0 输出的波特率相同(例如 12MHz 晶振,脉冲周期为 1μs);
    • 脉冲数量:共 8 个(对应 8 位数据,每输入 1 位数据需要 1 个移位脉冲)。

当 8 位数据(D0~D7)全部通过 RXD 移入内部移位寄存器后:

  • 硬件自动将移位寄存器中的 8 位并行数据送入接收 SBUF(供 CPU 读取);
  • 同时,硬件将RI(接收中断标志位)置1(时序图中未画全,但属于接收完成的关键结果),表示 "接收完成"。
2.4.2 方式1

方式1是10位数据的异步 通信口,是 51 串口最常用的通信模式(适用于 RS-232 等异步通信场景),核心是 "带完整帧格式的异步串行输出"。

  • 功能:异步串行通信输出,支持标准串口通信(如与 PC 机、传感器等设备通信);
  • 帧格式 :包含1 位起始位 + 8 位数据位 + 1 位停止位(共 10 位,无固定校验位,可通过软件实现);
  • 波特率:可变,由定时器 1(或定时器 2)的溢出率决定(公式:波特率 =(2^SMOD/32)× 定时器 1 溢出率),区别于方式 0 的固定波特率;
  • 引脚 :仅通过TXD(P3.1)输出串行信号(无需同步脉冲,异步通信的特点)。

对应的输入输出时序如下图所示:

方式 1 输出:

方式 1 输出的本质是 "按异步帧格式自动打包并行数据并串行输出",通过起始位和停止位实现异步通信中的 "帧同步",波特率的灵活性使其适用于大多数串口通信场景。

最上方:"写入 SBUF"(发送启动信号)

当 CPU 执行 "写 SBUF" 指令(如MOV SBUF, A)时,产生一个写脉冲,触发方式 1 的发送过程。这是整个时序的起点 ------ 写入数据后,硬件自动开始生成帧格式并串行输出。

中间:TXD(发送引脚)的帧格式输出(核心)

TXD引脚输出的信号包含完整的异步帧结构,时序上严格按 "起始位→数据位→停止位" 顺序输出,每一位的持续时间由波特率决定(波特率越高,每位时间越短):

  • 起始位:1 位,低电平(逻辑 0),用于通知接收方 "数据开始"(图中 "起始" 标注部分);
  • 数据位:8 位,从最低位 D0 开始,依次输出 D1~D7(图中明确标注 D0→D1→...→D7 的顺序),这是实际传输的有效数据;
  • 停止位:1 位,高电平(逻辑 1),用于表示 "一帧数据结束"(图中 "停止位" 标注部分),接收方可通过停止位确认帧的完整性。

最下方:TI(发送中断标志)的变化

当一帧数据(起始位 + 8 位数据 + 停止位)全部发送完成后,硬件自动将TI(发送中断标志位)置 1(图中最后跳变为高电平),表示 "当前数据发送完毕"。

注意:TI 置 1 后不会自动清零,必须通过软件指令(如CLR TI)手动清除,否则会持续触发串口中断(若已开启中断允许);

TI 置位的时机通常在停止位发送期间或结束后,确保 CPU 在处理中断时,当前帧已完全发送。

方式1输入

波特率:与发送方保持一致(由单片机定时器 1/2 配置,同方式 1 输出);

引脚 :仅通过RXD(P3.0)接收外部串行信号。

最上方:RXD(接收引脚)的输入帧结构

RXD引脚接收外部发送的完整异步帧,信号变化严格遵循 "起始位→数据位→停止位" 的顺序:

  • 起始位:1 位低电平(逻辑 0),是接收的 "触发信号"------ 单片机通过检测 RXD 上的低电平跳变(从空闲高电平到低电平),判断新帧开始;
  • 数据位:8 位,从最低位 D0 到最高位 D7 依次输入(图中明确标注 D0→D1→...→D7),是实际接收的有效数据;
  • 停止位:1 位高电平(逻辑 1),表示一帧数据结束,单片机通过检测停止位确认帧的完整性(若停止位无效,可能触发帧错误)。

中间:位采样脉冲(内部同步核心)

方式 1 输入的关键是内部位采样脉冲(图中 "位采样脉冲" 波形),其作用是 "在异步通信中,通过高频采样确认每一位的电平",具体特性:

  • 频率:固定为波特率的 16 倍(例如波特率 9600 时,采样脉冲频率为 153600Hz);
  • 采样逻辑 :每一位数据的持续时间内(1 / 波特率),会产生 16 个采样脉冲,通常取第 7、8、9 个脉冲的采样结果(多数一致原则)作为该位的有效电平 ------ 目的是避开信号跳变时的噪声,提高抗干扰能力;
  • 同步作用:通过采样脉冲的计数,单片机可精准定位每一位的位置(例如:起始位检测后,计数 16 个脉冲进入 D0 位的采样区间,再计数 16 个脉冲进入 D1 位,以此类推)。

最下方:RI(接收中断标志)的变化

当一帧数据(起始位 + 8 位数据 + 停止位)全部接收完成后:

  • 硬件自动将 8 位数据从移位寄存器送入接收 SBUF(供 CPU 读取);
  • 同时,硬件将RI(接收中断标志位)置1(图中最后跳变为高电平),表示 "接收完成"。

需注意:

  • RI 置 1 后不会自动清零,必须通过软件指令(如CLR RI)手动清除,否则会阻塞下一次接收(单片机默认 "RI=1 时不启动新接收");
  • RI 置位的时机通常在停止位接收完成后,确保 CPU 读取 SBUF 时数据已稳定。

方式一输入:

其本质:"用 16 倍波特率的内部采样脉冲,从 RXD 引脚的异步帧中'抠出'8 位有效数据 ",整个过程无需外部时钟线,仅通过约定波特率和帧格式实现通信。

RXD(接收引脚):外部输入的异步帧结构

RXD 引脚接收的信号是一个完整的异步帧,包含三部分(与方式 1 输出的帧格式完全对应,确保收发匹配):

  • 起始位:1 位低电平(逻辑 0)。空闲状态下 RXD 为高电平,当检测到 "高→低" 跳变时,单片机判断 "新帧开始",触发接收流程。
  • 数据位:8 位,从最低位 D0 到最高位 D7 依次传输(图中明确标注 D0→D1→...→D7)。这是实际需要接收的有效数据,比如传感器的测量值、PC 机发送的指令等。
  • 停止位:1 位高电平(逻辑 1)。用于标记一帧数据结束,单片机通过检测停止位的有效性(是否为高电平)判断帧是否完整(若停止位无效,可能是波特率不匹配或信号干扰)。

位采样脉冲:异步通信的 "同步核心"

异步通信没有外部时钟线,单片机通过内部位采样脉冲实现与发送方的同步,这是方式 1 输入的关键设计:

  • 频率:固定为 "波特率的 16 倍"(例如波特率 9600 时,采样脉冲频率 = 9600×16=153600Hz)。
  • 作用 :每一位数据的持续时间(1 / 波特率)内,会产生 16 个采样脉冲,通过多次采样确认该位的真实电平(抗干扰)。
    • 具体逻辑:对每一位,取第 7、8、9 个采样脉冲的结果(中间位置,避开信号跳变的不稳定期),若多数为高电平则判定为 "1",多数为低则判定为 "0"。
  • 同步过程:检测到起始位的 "高→低" 跳变后,单片机开始计数采样脉冲,每计满 16 个脉冲,就进入下一位(D0→D1→...→停止位)的采样区间,确保精准定位每一位。

RI(接收中断标志):接收完成的 "通知信号"

当一帧数据(起始位 + 8 位数据 + 停止位)全部接收并解析完成后:

  • 8 位数据会从内部移位寄存器自动存入 "接收 SBUF"(供 CPU 读取);
  • 硬件自动将RI(接收中断标志位)置1(图中最后跳变为高电平),表示 "数据已准备好,可读取"。
2.4.3 方式2和方式3

方式2和方式3是11位数据的异步通信口。TXD是数据发送引脚,RXD是数据接受引脚

方式 2 和方式 3 的共性与区别(理解时序的前提)

共性 :均为9 位异步通信模式,帧格式相同(含第 9 位数据 TB8),输出时序完全一致(因此共用一张时序图)。

  • 区别 :仅波特率生成方式不同:
    • 方式 2:波特率固定,由晶振频率和 SMOD 位决定(公式:波特率 =(2^SMOD / 64)×fosc);
    • 方式 3:波特率可变,与方式 1 相同(由定时器 1/2 的溢出率决定,公式:波特率 =(2^SMOD / 32)× 定时器溢出率)。

① 方式二和方式三输出

最上方:"写入 SBUF"(启动信号)

与方式 1 相同,当 CPU 执行 "写 SBUF" 指令(如MOV SBUF, A)时,触发发送过程。此时除了写入 8 位数据到 SBUF,还需提前通过软件设置TB8(第 9 位数据,来自 SCON 寄存器的 TB8 位)------ 这是方式 2/3 区别于方式 1 的核心(方式 1 仅 8 位数据)。

中间:TXD(发送引脚)的 9 位帧结构(核心)

TXD引脚输出的帧结构包含1 位起始位 + 8 位数据位 + 1 位 TB8(第 9 位)+1 位停止位(共 11 位),每一位的持续时间由波特率决定:

  • 起始位:1 位低电平(逻辑 0),用于通知接收方 "数据开始"(与方式 1 一致);
  • 数据位:8 位,从最低位 D0 到最高位 D7 依次输出(图中 D0→D1→...→D7),为实际传输的有效数据;
  • TB8(第 9 位) :1 位特殊位(图中 "TB8" 标注),其含义由用户定义,常见用途:
    • 多机通信中:用于区分 "地址帧"(TB8=1)和 "数据帧"(TB8=0);
    • 奇偶校验:TB8 作为奇偶校验位(如数据位中 1 的个数为奇数时 TB8=1,实现奇校验);
  • 停止位:1 位高电平(逻辑 1),表示一帧数据结束(与方式 1 一致)。

最下方:TI(发送中断标志)的变化

当一帧完整数据(起始位 + 8 位数据 + TB8 + 停止位)发送完成后,硬件自动将TI(发送中断标志位)置 1(图中最后跳变为高电平),表示 "发送完成"。

与方式 1 相同:

  • TI 置 1 后不会自动清零,需通过软件(如CLR TI)手动清除,否则会持续触发中断;
  • TI 置位时机在停止位发送期间或结束后,确保 CPU 处理时帧已完全发送。

② 方式二和方式三输入

方式 2 和 3 输入的本质是 "**在方式 1 基础上增加第 9 位 RB8 的接收逻辑,**它们是方式 1 的增强版,适用于需要额外控制位的复杂通信场景。

RXD(接收引脚):9 位异步帧结构(核心)

RXD 引脚接收的外部信号包含完整的 9 位帧,结构为:1 位起始位 + 8 位数据位(D0~D7)+1 位 RB8(第 9 位)+1 位停止位(共 11 位),与方式 2/3 输出的帧格式完全对应(确保收发匹配):

  • 起始位:1 位低电平(逻辑 0),通过 "高→低" 跳变触发接收(与方式 1 一致);
  • 数据位:8 位,从最低位 D0 到最高位 D7 依次接收(图中 D0→D1→...→D7),为实际有效数据;
  • RB8(第 9 位) :1 位特殊位(图中 "RB8" 标注),是接收方对发送方 TB8 的响应,其含义由通信协议定义:
    • 多机通信中:用于判断帧类型(RB8=1 表示 "地址帧",RB8=0 表示 "数据帧");
    • 奇偶校验中:作为接收数据的校验位(与发送方 TB8 对比,判断是否校验错误);
  • 停止位:1 位高电平(逻辑 1),标记一帧结束,用于确认帧完整性。

位采样脉冲:异步同步的核心机制

与方式 1 输入相同,方式 2/3 输入依赖内部位采样脉冲实现异步同步:

  • 频率:为波特率的 16 倍(例如波特率 9600 时,采样脉冲频率 = 153600Hz);
  • 作用:每一位(包括 RB8)的持续时间内产生 16 个脉冲,通过 "第 7、8、9 个脉冲多数采样" 确认电平(抗干扰);
  • 同步逻辑:起始位触发后,每计数 16 个脉冲进入下一位采样区间(依次覆盖 D0→D7→RB8→停止位),确保精准定位每一位。

RI(接收中断标志):接收完成的通知

当一帧数据(起始位 + 8 位数据 + RB8 + 停止位)全部接收并解析后:

  • 8 位数据存入接收 SBUF(供 CPU 读取);
  • 第 9 位 RB8 存入SCON 寄存器的 RB8 位(单独存储,区别于 8 位数据);
  • 硬件自动将RI(接收中断标志位)置1(图中最后跳变为高电平),表示 "接收完成,数据可用"。

关键注意

  • RI 需软件清零(如CLR RI),否则阻塞下一次接收;
  • CPU 读取时,需同时处理 SBUF(8 位数据)和 RB8(第 9 位),例如多机通信中先判断 RB8 是否为 1(地址帧),再决定是否响应。
2.4.4 波特率的计算

一般使用工具辅助计算

相关推荐
DIY机器人工房1 小时前
(十二)嵌入式面试题收集:15道
单片机·嵌入式硬件·diy机器人工房
LS_learner1 小时前
PCB更新原理图变更出现大量Remove问题
嵌入式硬件
仰望星空的凡人1 小时前
基于RH850-F1x系列的瑞萨MCU选型指南
单片机·嵌入式硬件·rh850·renesas
卡提西亚1 小时前
(10)普中A2 51单片机DS1302实时时钟
单片机·嵌入式硬件·51单片机
TeleostNaCl2 小时前
Docker | 如何限制容器的 CPU/内存/磁盘IO 的资源利用以降低性能消耗
运维·经验分享·嵌入式硬件·docker·容器·智能路由器
偶像你挑的噻11 小时前
15-Linux驱动开发-PWM子系统
linux·驱动开发·stm32·嵌入式硬件
这人很懒没留下什么11 小时前
SpringBoot2.7.4整合MongoDb
数据库·spring boot·mongodb
Java小白,一起学习14 小时前
STM32新建工程(标准库官网下载)
stm32·单片机·嵌入式硬件
vickycheung314 小时前
RK3588增加Xenomai3实时补丁
经验分享·嵌入式硬件·arm 嵌入式开发