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

news2024/9/23 15:11:20

目录

一、串行通信基础

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.coloradmin.cn/o/2074453.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

云服务器在媒体处理中的应用有哪些

云服务器在媒体处理中扮演着至关重要的角色,无论是视频流服务、音频转码处理,还是图片优化服务,云服务器都提供了高效、灵活且可扩展的解决方案。以下将详细探讨云服务器在媒体处理中的应用。 首先,云服务器在视频流服务方面发挥着…

python怎么判断大小写

Python提供了isupper(),islower(),istitle()方法用来判断字符串的大小写,具体实例如下: >>> str_1 "HELLO PYTHON" # 全大写 >>> str_2 "Hello PYTHON" # 大小写混合 >>> str_3…

Spring Boot 有哪些优点?

Spring Boot 有哪些优点? 💖The Begin💖点点关注,收藏不迷路💖 Spring Boot以其简洁和高效的特点,革新了Java应用的开发和部署方式。以下是其几大核心优势,让你一目了然: 减少时间成…

5000套精美PPT免费分享

目录 部分展示目录 几乎包含各种应用场景的PPT模板 这里只展示部分目录 部分展示目录 ##PPT下载 链接:https://pan.baidu.com/s/1ckvN9xeMR82hL30lHXfJ0g 提取码:ZYNB 点击下载,记得点个赞哦

MAML算法详解

引言:MAML是元学习的经典论文,也是基于optimization based meta-learning方法的开山之作,后序很多工作都是follow这篇工作。目前已经有13140的引用,其算法思想很巧妙,值得反复品读。论文链接:http://procee…

APP备案FAQ--荣耀应用上架(可获得相关资料)

1.常见的接入商有哪些? 目前常见的接入商有:华为云、阿里云、腾讯云。关于如何选择接入商,具体还需要根据您所选择的服务器提供商而定。 2.已完成网站ICP备案还需要进行APP备案吗? 需要。即使您已完成网站ICP备案,仍需…

基于game-based算法的动态频谱访问matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 (完整程序运行后无水印) 展示了负载因子P和次级传输功率不同的HPE。 从图中可以看出,随着|hP E|扩大,用户P更好的为二级用户分配更多的…

AI在医学领域:谷歌的HeAR生物声学模型

声学非语义属性的语音可以使机器学习模型执行诸如情绪识别、说话者识别和痴呆检测等副语言任务。脑卒中、帕金森病、阿尔茨海默病、脑瘫和肌萎缩侧索硬化症(ALS)等脑血管和神经退行性疾病也可以使用非语义语音模式,如发音、共鸣和发声等来检测…

es 7.17.23安装ik插件启动失败,access denied,Permission

情况简述 windows平台,下载了7.17.23的es以及7.17.23的ik分词器的zip包之后( 下载地址(官方推荐的):Index of: analysis-ik/stable/ ),解压该ik的包到es的plugins下,目录结构&…

基于layui实现简单的计分板页面

使用Layui、HTML、CSS练手做了个简单的计分板页面(虽然HTML和CSS学的很烂,而且页面尺寸变化时对齐还有问题)。布局采用的Layui的栅格系统,同时使用Layui的按钮、弹出层模块设置样式及获取用户输入,同时调用jQuery相关功…

comfyUI使用flux模型报错got promptUsing pytorch attention in VAE,

使用的flux模型如下,应该下载的模型都已经下载好放在正确位置 但是执行之后报错如下 got prompt Using pytorch attention in VAE Using pytorch attention in VAE 然后comfyUI的命令行就强制退出了。 解决方法: 改虚拟内存为系统管理的大小即可

8月25日cs61c

小语 天主这样磨难你,试探你,终究是为了使你获得幸福。 1.啃黑书10页 14.23 1.本书着重展示硬件和软件的关系 2.学习时,除了掌握基本原理,还应了解该领域最新进展 3.为了使程序运行更快,必须将其并行化 4.量化&…

指针之旅(1)—— 指针基础概念知识(详细解析)

前言:该篇我将详细讲解指针当中的一些基本概念,有内存和地址的部分硬件知识,有专门服务于指针的操作符&和*,有指针大小固定不变的原因,还有专属于指针的运算规则。 目录 1. 内存和地址 1.1 内存地址的概念&…

力扣网页端无法进入(问题已解决)

力扣网页端无法进入(问题已解决) 这两天在刷leetcode的时候突然发现无法进入力扣主页,换了浏览器也不行,但其他网站都能正常进去,其它主机也可以。 可能是DNS解析错误 在实际应用过程中可能会遇到DNS解析错误的问题&am…

OpenCV Rect_< _Tp > 模版类详解及其成员函数用法示例

OpenCV Rect_< _Tp > 模版类是一个2维矩形模板类&#xff0c;其英文全称为Rect_< _Tp > Class Template Reference&#xff0c;其公有成员函数有以下几个&#xff1a; 其公有属性有&#xff1a; Rect_< _Tp > 模版类以左上角点tl&#xff0c;坐标_Tp x,Tp y及…

2023年高教社杯国赛b题详细代码 文章 教学 2024数模国赛教学: 多波束测深技术问题分析与建模

本系列专栏将包括两大块内容 第一块赛前真题和模型教学,包括至少8次真题实战教学,每期教学专栏的最底部会提供完整的资料百度网盘包括:真题、数据、可复现代码以及文章. 第二块包括赛中思路、代码、文章的参考助攻, 会提供2024年高教社国赛各个赛题的全套参考内容(一般36h内更新…

matlab与VS混合编程以及错误解决

目录 前言&#xff1a; 1. matlab打包生成dll文件 打包方法一&#xff1a; 打包方法二&#xff1a; 2. VS端配置 3. 代码测试 4. 错误解决 a. 1.0x0000000000000000 处有未经处理的异常(在 Project1.exe 中): 0xC0000005: 执行位置 0x0000000000000000 时发生访问冲突。…

Unity游戏开发——Unity脚本组件:游戏开发的灵魂

Unity游戏开发 “好读书&#xff0c;不求甚解&#xff1b;每有会意&#xff0c;便欣然忘食。” 本文目录&#xff1a; Unity游戏开发 Unity游戏开发Unity脚本组件&#xff1a;游戏开发的灵魂前言1.Standard Assets导入报错解决办法2. 什么是Unity脚本组件&#xff1f;3. 创建和…

vue 精选评论词云 集成echarts-wordcloud TF-IDF算法

这一期在我们的系统里集成词云组件&#xff0c;开发的功能是景区精选评论的词云展示功能。 这个界面的逻辑是这样的&#xff1a; 在数据框里输入城市&#xff0c;可以是模糊搜索的&#xff0c;选择城市&#xff1b; 选择城市后&#xff0c;发往后台去查询该城市的精选评论&a…

python,json数据格式,pyecharts模块,pycharm中安装pyecharts

json数据格式 JSON是一种轻量级的数据交互格式 可以按照JSON指定的格式去组织和封装数据 JSON本质上是一个带有特定格式的字符串 主要功能&#xff1a; json就是一种在各个编程语言中流通的数据格式&#xff0c;负责不同编程语言中的数据传递和交互. 类似于&#xff1a; 国…