单片机原理及技术(八)—— 串行口的工作原理及应用

目录

一、串行通信基础

1.1 并行通信与串行通信

1.1.1 并行通信

1.1.2 串行通信

1.2 同步通信与异步通信

1.3 串行通信的传输模式

二、串行口的结构

2.1 串行口控制寄存器SCON

2.1.1 SM0、SM1

2.1.2 SM2

2.1.3 REN

2.1.4 TB8

2.1.5 RB8

2.1.6 TI

2.1.7 RI

2.2 特殊功能寄存器PCON

三、串行口的4种工作方式

3.1 方式0

3.2 方式1

3.3 方式2

3.4 方式3

四、波特率的制定方法

4.1 波特率的定义

4.2 定时器T1产生波特率的计算


一、串行通信基础

1.1 并行通信与串行通信

单片机的数据通信有并行通信与串行通信两种方式。

1.1.1 并行通信

并行通信是指多个进程或者任务同时进行通信的一种方式。在并行通信中,多个进程或者任务可以同时发送和接收消息,而不需要等待其他进程或者任务完成通信操作。

并行通信的好处是可以提高系统的吞吐量和响应速度。通过并行通信,不同的进程或者任务可以并行地进行通信操作,从而可以更快地完成任务。此外,并行通信还可以提高系统的可伸缩性,使系统能够处理更多的并发请求。

1.1.2 串行通信

串行通信是指只有一个进程或者任务在进行通信的一种方式。在串行通信中,进程或者任务按照一定的顺序来发送和接收消息,只有前一个进程或者任务完成通信操作后,下一个进程或者任务才能进行通信。

串行通信的好处是简单直观,通信操作按照顺序进行,不需要考虑同步和资源竞争问题。此外,串行通信的实现成本相对较低,不需要考虑并行处理的复杂性。

单片机并行通信与串行通信示意图

1.2 同步通信与异步通信

串行通信又有两种方式:同步串行通信与异步串行通信。

同步串行通信是指发送方向接收方发送数据后,必须等待接收方接收完毕后才能继续进行其他操作。在同步串行通信中,发送方和接收方的操作是严格同步的,发送方发送一条消息后会阻塞等待接收方接收完成,接收方接收完消息后才会解除发送方的阻塞状态。

同步串行通信适用于需要保持严格顺序和一致性的场景,例如在传输重要数据或者进行精确计时的应用中。由于发送方必须等待接收方的反馈,同步串行通信的延迟较大,但可靠性较高。

同步通信和数据格式示意图

异步串行通信则是指发送方发送数据后可以继续进行其他操作,无需等待接收方的回应。在异步串行通信中,发送方无需等待接收方的响应,可以自由地进行其他操作。接收方则会在接收到消息后进行处理,并向发送方发送适当的确认或者回应。

异步串行通信则适用于需要高效利用系统资源和并发处理的场景。由于发送方无需等待接收方的反馈,可以继续进行其他操作,可以提高系统的吞吐量和响应速度。但异步串行通信需要考虑数据的一致性和错误处理,因此编程和调试的复杂性较高。

异步串行通信示意图


1.3 串行通信的传输模式

串行通信的传输模式按照数据传输的方向和时间关系可分为单工半双工全双工

  1. 单工传输:在单工传输中,数据只能在一个方向上进行传输。一方作为发送方,只能发送数据,而另一方作为接收方,只能接收数据。这种传输模式类似于广播电视,只有单向传输,没有数据回传。

  2. 半双工传输:在半双工传输中,数据可以在两个方向上进行传输,但不能同时进行。两个通信方向上的传输是交替进行的,即一方发送数据时,另一方只能接收数据,然后再进行反向传输。这种传输模式类似于对讲机,只能单向传输,需要交替切换发送和接收方向。

  3. 全双工传输:在全双工传输中,数据可以在两个方向上同时进行传输。两个通信方向上的传输可以同时进行,即一方可以同时发送和接收数据。这种传输模式类似于电话通信,双方可以同时进行发言和听取。(51单片机——异步全双工)

 单工、半双工和全双工的数据传输模式示意图

二、串行口的结构

串行口是一种用于数据通信的接口,可以实现单片机和外部设备之间的数据传输。串行口通常由几个关键组成部分构成。

串行口的发送器,它负责将单片机中的数据转换成串行信号,并通过串行通信线路发送出去。发送器通常包含一个移位寄存器,用于存储要发送的数据,以及一个时钟,用于控制数据的发送速度。

串行口的接收器,它负责接收外部设备发送过来的串行信号,并将其转换成并行数据供单片机使用。接收器通常也包含一个移位寄存器和一个时钟,用于接收和解码串行信号。

除了发送器和接收器,串行口还包含一些控制和配置寄存器,用于设置串行通信的参数,如波特率、数据位数、校验位等。这些寄存器可以通过编程设置,以适应不同的通信需求。

最后,串行口还包含一个中断控制器,用于处理串行口的中断请求。当接收到外部设备发送的数据时,中断控制器会触发中断请求,通知单片机进行数据处理。

串行口的内部结构图

2.1 串行口控制寄存器SCON

串行口控制寄存器(SCON)是单片机中用于控制串行通信的寄存器。

下面是SCON寄存器的位布局表格:

SCON 寄存器位名称描述
Bit 7SM0串行口工作模式选择位,用于选择串行口的工作模式
Bit 6SM1串行口工作模式选择位,用于选择串行口的工作模式
Bit 5SM2多机通信控制位,在方式2和方式3下进行的
Bit 4REN允许串行接收位,用于允许串行口接受数据
Bit 3TB8发送的第9位数据位
Bit 2RB8接收的第9位数据位
Bit 1TI发送中断标志位,用于指示发送操作是否完成
Bit 0RI接收中断标志位,用于指示接收操作是否完成

2.1.1 SM0、SM1

根据SM0和SM1的不同组合,可以选择以下四种工作模式

SM1SM0方式功能说明
000同步移位寄存器方式(用于扩展 I/O口)
0118位异步收发,波特率可变(由定时器T1控制)
1029位异步收发,波特率为 晶振频率/64 或 晶振频率/32
1139位异步收发,波特率可变(由定时器T1控制)

2.1.2 SM2
  1. 当SM2=1时,串行口可以与多个设备进行通信,每个设备有独立的地址。当接收到RB8为1时,才是RI置1,产生中断请求,触发中断。
  2. 当SM2=0时,串行口只与单一设备进行通信,不使用地址识别功能。所有接收到的数据都被直接接收,并触发中断。

在方式1时,如果SM2=1,则只有收到有效的停止位时才会激活RI。

在方式0时,SM2必须为0。

2.1.3 REN

REN位的不同设置可以选择两种不同的工作模式:

  1. 当REN位为1时,表示接收使能。串行口可以接收数据,并触发中断。

  2. 当REN位为0时,表示接收禁止。串行口不接收数据,也不会触发中断。

2.1.4 TB8

TB8用于控制是否传输第9位数据。

在使用TB8时,需要先设置SM2位为1,表示使用9位数据传输模式。当TB8为0时,表示只传输8位数据;当TB8为1时,表示传输9位数据。

2.1.5 RB8

RB8用于控制串行口接收数据的第9位。

当RB8位为1时,表示接收到的数据帧的第9位是1;当RB8位为0时,表示接收到的数据帧的第9位是0。通过判断RB8位的值,可以识别出接收到的数据帧是否是9位长,从而进行相应的处理。

2.1.6 TI

TI用于设置或检测串行口发送中断的状态。

当TI位为1时,表示串行口发送完成,并产生了中断请求。当TI位被置1时,表示要发送的数据已经全部发送完毕,并且硬件已经准备好发送下一个字节。在中断服务子程序中,可以通过检测TI位来确定数据是否全部发送完成。

2.1.7 RI

RI用于设置或检测串行口接收中断的状态。

当RI位为1时,表示串行口接收到了数据,并产生了中断请求。当RI位被置1时,表示收到了一个字节的数据,并且硬件已经准备好接收下一个字节。在中断服务子程序中,可以通过检测RI位来确定是否接收到了新的数据。

2.2 特殊功能寄存器PCON

PCON(Power Control Register)是用于控制单片机的低功耗模式和电源管理的特殊功能寄存器。

下面是特殊功能寄存器PCON的位表格:

功能
7SMOD:串行波特率倍频控制位
6SMOD0:串行波特率倍频控制位
5LVDF:低电压检测标志位
4POF:电源故障标志位
3GF1:通用标志位1
2GF0:通用标志位0
1PD:掉电模式标志位
0IDL:IDLE模式控制位

每个位的具体功能如下:

  1. SMOD(位7)和SMOD0(位6)用于控制串行通信的波特率倍频。当SMOD和SMOD0都为0时,波特率不进行倍频。当SMOD为0而SMOD0为1时,波特率倍频一倍。当SMOD为1而SMOD0为0时,波特率倍频两倍。当SMOD和SMOD0都为1时,波特率倍频四倍。

  2. LVDF(位5)是一个低电压检测标志位,用于指示系统电压是否低于预设的阈值。当LVDF为1时,表示电压低于阈值;当LVDF为0时,表示电压正常。

  3. POF(位4)是一个电源故障标志位,用于指示系统是否发生了电源故障。当POF为1时,表示发生了电源故障;当POF为0时,表示电源正常。

  4. GF1(位3)和GF0(位2)是通用标志位,可供用户自定义使用。

  5. PD(位1)是一个掉电模式标志位,用于进入或退出掉电模式。当PD为1时,表示系统进入掉电模式;当PD为0时,表示系统正常工作。

  6. IDL(位0)是一个IDLE模式控制位,用于控制系统进入或退出IDLE模式。当IDL为1时,表示系统进入IDLE模式;当IDL为0时,表示系统正常工作。

三、串行口的4种工作方式

串行口(Serial Port)的工作方式有四种,分别是方式0、方式1、方式2和方式3。

3.1 方式0

方式0,也称为同步移位寄存器方式,是一个8位的同步移位寄存器,工作在同步通信模式下。在这种方式下,串行口不使用波特率发生器,因此数据的发送和接收速率取决于外部的时钟源。

在方式0中,数据从串行口的RXD引脚输入或输出,并且是低位先行。

方式0的特点包括:

  1. 采用8位数据格式,即每次传输8位数据。
  2. 串行数据的发送和接收是同步进行的,即通过外部时钟信号来控制数据的发送和接收速率。
  3. 数据的发送和接收是通过移位寄存器来完成的。在发送时,数据从内部的并行数据寄存器(通常是某个特殊功能寄存器)装载到移位寄存器中,然后逐位移出;在接收时,数据逐位移入移位寄存器,最后移位寄存器的内容被转移到并行数据寄存器中。
  4. 由于是同步方式,这种方式的数据传输速度比异步方式(如方式1)要快。
  5. 方式0不支持硬件的起始位和停止位设置,因为它是完全同步的,没有起始位和停止位。

3.2 方式1

方式1是一种可变波特率的8位UART(通用异步收发传输器)。

在方式1下,串行口以8位数据格式进行通信,其中低8位是有效数据位,高1位作为停止位,还有1位起始位。波特率则由定时器1产生,可以通过编程定时器1的初值来调整波特率,使其适应不同的通信需求。

波特率的计算公式为:波特率 = 1/12 * (2^SMOD / 32) * 定时器溢出频率。其中,SMOD是PCON寄存器中的串行口波特率倍增位,定时器溢出频率是定时器1或定时器2溢出频率。

3.3 方式2

方式2是一种8位数据+1位起始位、1位停止位和1位可程控为1或0的第9位数据的可变波特率异步通信方式

数据帧格式如下:

  • 8位数据:指的是数据部分,通常是一个字节的数据,最高位(MSB)或最低位(LSB)先发送。
  • 1位起始位:在数据传输开始前,发送器会发送一个逻辑“0”(低电平)作为起始信号,告知接收器数据即将开始发送。
  • 1位停止位:在数据传输结束后,发送器会发送一个逻辑“1”(高电平)作为停止信号,告知接收器当前数据包已经发送完毕。
  • 1位可程控为1或0的第9位数据:这个额外的位可以是校验位(如奇偶校验位),也可以用于其他控制目的,根据系统的设计进行编程设置。

可变波特率意味着通信双方可以协商或配置不同的传输速率,以适应不同的通信距离和环境要求。

3.4 方式3

方式3是波特率可变的9位异步通信方式。数据帧由9位组成,其中包括一个起始位、8位数据位(可配置为8位有效数据位加上1位奇偶校验位)和一个停止位

方式3的特点是它的波特率是可变的,这意味着数据的传输速率可以根据需要进行调整,以适应不同的通信需求。

四、波特率的制定方法

4.1 波特率的定义

波特率是指在数字通信中,每秒传输的比特数。它通常用单位"波特"(Baud)来表示。波特率决定了数据传输的速度,也就是每秒钟可以传输的比特数。

波特率的单位可以理解为每秒钟发生的状态变化次数。在串行通信中,每个比特位都被分为多个时间间隔,称为波特周期或比特周期。波特率表示每秒钟波特周期发生的次数。

4.2 定时器T1产生波特率的计算

方式0波特率固定为:fosc / 12

方式1波特率的计算公式为:(串行口为波特率可变的8位异步通信接口,SMOD为PCON寄存器的最高位值(0或1))

         方式1波特率 =(2^SMOD / 32) * 定时器T1的溢出率

(注:当SMOD=1时,要比SMOD=0时的波特率加倍,所以也称SMOD位为波特率倍增位)

方式2的波特率由下式确定:

         方式2波特率=( 2^SMOD / 64) * fosc

方式3的波特率由下式确定:

         方式3波特率 = (2^SMOD / 32) * 定时器T1的溢出率

相关知识点:

溢出速率 = 1 / 溢出时间

溢出时间(相当于定时时间)= (2^8 – TH1初值)* Tcy

机器周期Tcy = 12时钟周期 = 12*(1/fosc)

故:溢出速率 = 1 / 溢出时间 = 1 / [(256 - TH1初值)* (12 / fosc)] = fosc / [12 *(256-TH1初值)]

计数速率 = 1 / 计数时间 = 1 / (12 / fosc) = fosc / 12

故也可写成:溢出速率 = 计数速率 / (256-TH1初值) = fosc / [12 *(256-TH1初值)]   


原文链接:

https://blog.csdn.net/WalterBrien/article/details/92847894icon-default.png?t=N7T8https://blog.csdn.net/WalterBrien/article/details/92847894

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/408561.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据结构: 树状数组

在OI赛事中,数据结构是非常重要的一个内容,更是有人说过,算法数据结构程序: A l g o r i t h m D a t a AlgorithmData AlgorithmData S t r u c t u r e P r o g r a m m i n g StructureProgramming StructureProgramming 接下来&#…

如何在 Ubuntu 系统中安装PyCharm集成开发环境?

在上一篇文章中,我们探讨了Jupyter notebook,今天再来看看另一款常用的Python 工具,Pycharm。 PyCharm也是我们日常开发和学习常用的Python 集成开发环境 (IDE),由 JetBrains 开发。 PyCharm 带有一整套可以帮助用户在使用Pytho…

docker映射了端口,宿主机不生效

1、问题产生原因 docker run -d --name my-redis -p 6379:6379 -v /usr/redis.conf:/usr/local/etc/redis/redis.conf team-redis:3.2 redis-server /usr/local/etc/redis/redis.conf 这容器跑起来了,端口6379没用。搞的我一直怀疑哪里出错了,查看配置…

【网络安全】服务基础第一阶段——第二节:网络测试与用户

一、Windows网络测试工具 CMD(命令提示符)中,ping和tracert是两个非常有用的网络诊断工具 1.1.ping命令 ping命令是Windows和其他操作系统中用于测试主机之间网络连接是否可达的基本命令行工具。它通过发送ICMP(Internet Contr…

CSS中的元素布局与定位详细说明

1、前言 在CSS开发中,很重要的一个工作就是根据UI设计稿,进行元素的布局与定位,使得元素(比如某一段文本、按钮、图片等)显示在页面正确的位置。本文就元素的布局与定位方面,做一些讲解和说明。 2、元素的…

Markdown 美化 Github 个人主页

注:本文参考这篇博客 http://t.csdnimg.cn/KXhSw 目录 1 效果展示2 创建仓库3 编写 Markdown3.1 动态波浪图3.2 打字机动图3.3 技术栈图标3.4 项目贡献统计3.5 连续贡献统计3.6 贡献统计图3.7 代码时长统计3.8 仓库代码占比 1 效果展示 先来看看效果: 动…

OSPF路由配置--多区域

目录 不理解OSPF路由动态协议的可以回顾一下OSPF详解,下这一系列的实验都不再做解释,直接开始配置 一. 实验拓扑 二. 实验配置 (命令可以直接复制粘贴到CLI中) 三. 实验验证 不理解OSPF路由动态协议的可以回顾一下OSPF详解,下这一系列的实验都不…

C++ 设计模式——迭代器模式

迭代器模式 C 设计模式——迭代器模式1. 主要组成成分2. 迭代器模式范例2.1 抽象迭代器2.2 抽象容器2.3 具体的迭代器2.4 具体的容器2.5 主函数示例 3. 迭代器 UML 图3.1 迭代器 UML 图解析 4. 迭代器模式的优点5. 迭代器模式的缺点6. 迭代器模式的适用场景7. 现代C中的迭代器总…

【深度学习】使用Conda虚拟环境安装多个版本的CUDA和CUDNN方便切换

conda虚拟环境安装CUDA和CUDNN 官网教程 https://docs.nvidia.com/cuda/cuda-installation-guide-linux/index.html#conda-installation 1. 背景 深度学习用显卡训练的时候,需要安装与显卡对应的cuda和cudnn。但不同的项目所支持的pytorch版本是不一样的&#x…

Openssl Infinite Loop 漏洞(CVE-2022-0778)

Openssl Infinite Loop 漏洞(CVE-2022-0778) 1. 漏洞详情 在该漏洞中由于证书解析时使用的 BN_mod_sqrt() 函数存在一个错误,它会导致在非质数的情况下永远循环。可通过生成包含无效的显式曲线参数的证书来触发无限循环。由于证书解析是在验…

视频监控汇聚算法平台训练站车辆类型算法分析车辆类型检测应用方案

车辆类型检测算法是计算机视觉和深度学习技术在交通管理和智能车辆系统中的重要应用之一。这种算法通过自动分析和识别车辆图像,能够准确判断车辆的类型,如轿车、SUV、货车等。 运用方案 数据采集与预处理 采集包含车辆的图像或视频数据,包…

自学成才

软件只是一种工具,正如给你一张纸和一支笔,有人满纸疙瘩,有人行云流水唱成一曲绝唱,全在于笔头功夫。使用软件一样需要智慧,不光是懂了就行,还得创造性使用,才会成就别人望洋兴叹的绝活。 Core…

【实施】软件实施方案(word套用)

软件实施方案 二、 项目介绍 三、 项目实施 四、 项目实施计划 五、 人员培训 六、 项目验收 七、 售后服务 八、 项目保障措施 软件开发全套资料获取:(本文末个人名片也可直接获取) 软件产品,特别是行业解决方案软件产品不同于一…

【Electron】桌面应用开发electron-builder打包报错问题处理

Electron 桌面应用开发electron-builder打包过程中各种报错问题处理 前一篇有写过 Electron 桌面应用开发快速入门到打包Windows应用程序 在安装到打包的整个过程中,我们都会遇到很多诡异的问题,接下来我将介绍我遇到的几个问题的解决方案 一、拉包的时…

VBA技术资料MF191:将源文件夹所有文件移动到目标文件夹

我给VBA的定义:VBA是个人小型自动化处理的有效工具。利用好了,可以大大提高自己的工作效率,而且可以提高数据的准确度。“VBA语言専攻”提供的教程一共九套,分为初级、中级、高级三大部分,教程是对VBA的系统讲解&#…

iOS profiles文件过期如何更新

创建发布用的Certificates 首先进入到https://developer.apple.com/account页面选择【证书】进入【新建证书】页面 点击【新建证书】按钮: 根据需求选中对应的【证书类型】,我选的是【Apple Distribution】, 开发者证书选择【Apple Devel…

react antd TreeSelect实现自定义标签

<ProFormTreeSelectlabel"接收对象"name"receiverObjects"colProps{{ span: 16 }}labelCol{{span: 6,}}wrapperCol{{span: 18,}}rules{[{ required: true }]}fieldProps{{showSearch: true,multiple: true,// autoClearSearchValue: true,filterTreeNod…

探索条形码与二维码的秘密:pyzbar库的神奇之旅

文章目录 探索条形码与二维码的秘密&#xff1a;pyzbar库的神奇之旅背景&#xff1a;为什么选择pyzbar&#xff1f;pyzbar是什么&#xff1f;如何安装pyzbar&#xff1f;简单库函数使用方法场景应用常见Bug及解决方案总结 探索条形码与二维码的秘密&#xff1a;pyzbar库的神奇之…

数字化与进制转换

1.数字化是什么&#xff1f; 数字化是将事物的属性转化为计算机可处理对象的过程。 2.数字化的好处&#xff1f; 可以让我们的生活&#xff0c;学习和工作更加便捷&#xff0c;大大提升我们学习和工作的效率。 3.如何将采集到的数据进行数字化&#xff1f; 可以通过两种信…

爬取央视热榜并存储到MongoDB

1. 环境准备 在开始之前&#xff0c;确保你已经安装了以下Python库&#xff1a; pip install requests pymongo2. 爬取网页内容 首先&#xff0c;我们需要爬取央视热榜的网页内容。通过requests.get()方法&#xff0c;我们可以获取网页的HTML内容&#xff0c;并通过re.finda…