51单片机入门:串口通信

串行通信的初步认识

通信方式分类

1、按照数据传送方式:

并行通信:通信时数据的各个位同时传送,可以实现字节为单位的通信。

但是通信线多,占用资源多,成本高。

串行通信:一次只能发送一位,要发送8次才能发送一个字节。(从低位开始发送)

2、按照数据同步方式:

同步通信:发送端在发送串行数据的同时,提供一个时钟信号,并按照一定的约定(例如:在时钟信号的上升沿的时候,将数据发送出去)发送数据,接收端根据发送端提供的时钟信号来接收数据。如:I2C、SPI等有时钟信号的协议,都属于这种通信方式。

异步通信:接收方并不知道数据什么时候会到达,收发双方可以有各自自己的时钟。发送方发送的时间间隔可以不均,接收方是在数据的起始位和停止位的帮助下实现信息同步的。

3、按照数据传输方向:

单工通信:只允许一方向另外一方传送信息(即单方面传送),比如电视遥控机等。

半双工通信:数据可以在双方之间相互传播,同一时间只能其中一方发给另外一方,比如对讲机。

全双工通信:发送数据的同时也能够接收数据,两者可以同时进行,比如视频通话。

UART串口通信

UART(通用异步收发器)是一种通用串行数据总线,用于异步通信。该总线双向通信,可以实现全双工传输和接收。通过发送和接收数据来使单片机与单片机、单片机与电脑、单片机与各式各样的模块互相通信。

对于51单片机,以STC89C52RC为例,有两个引脚专门用来通信:一个是RXD,一个是TXD,其基本模型如下:

f5235e5a0e694ba69129b2fe81efa695.jpg

其中,GND必须连接在一起,因为GND是电平基准。

如果单片机1要给单片机2发送11110 0100这个数据,先发送一个0,持续一段时间,再发送一个0,再持续一段时间......以此类推,逐次把所有的位都发送出去。

1、持续时间是多长时间?

引入波特率,也叫比特率:发送二进制数据的速率,习惯上用baud表示。发送一位二进制数据的持续时间为:1/baud。

如果单片机1和单片机2要通信,必须要保持波特率的一致。

2、数据什么时候开始、结束?

UART串口通信里规定:当没有通信信号发生的时候,通信线路保持高电平。在发送数据之前,先发送一个0表示起始位(这个0的持续时间也是1/baud)。之后再发送8位的数据位,最后再发送一位1表示停止位

61b83f8d2ec3421081036a2fcfd361b5.jpg


RS232通信接口

串口通信可以实现单片机与单片机通信,也可实现单片机与电脑通信。对于电脑,其CPU就相当于一个单片机。

通常,台式电脑上有RS232接口(九针九孔,也叫公头母头),但笔记本电脑一般没有,通常用USB虚拟的串口。

RS232接口及其各个针孔功能:

05b349b0c4e94292b9e7a492527353cf.jpg

RS232电平标准:

高电平1:-3V~-15V;低电平0:+3V~+15V,为负逻辑。

其不能直接与单片机相连(会烧坏单片机),通常情况下用MAX232转换芯片来实现我们单片机电压与电脑电压之间的转换。

缺点:传输距离有限,最大传输距离标准值为50英尺,实际上也只能用在15米左右。且接口使用一根信号线和一根信号返回线而构成共地的传输形式,这种共地传输容易产生共模干扰,所以抗噪声干扰性弱。


电平转换芯片

MAX232转换芯片

f6df51a3e9864aa08e249ee6dbe52d07.jpg

MAX232芯片是美信(MAXIM)公司专为RS-232标准串口设计的单电源电平转换芯片,使用+5v单电源供电。

TTL/CMOS数据从11引脚(T1IN)、10引脚(T2IN)输入转换成RS-232数据从14(T1OUT)、7脚(T2OUT)送到电脑DB9插头;DB9插头的RS-232数据从13引脚(R1IN)、8引脚(R2IN)输入转换成TTL/CMOS数据后从12引脚(R1OUT)、9引脚(R2OUT)输出。

USB转串口通信

我们在工业上常使用RS232串口通信,但在商业上大部分为USB转UART技术。

USB转串口设备是一种将计算机的USB接口转换为通用串口(如RS232、RS485等)的转换器这种设备使得没有串口的老式设备(如编程器、机械控制系统等)能够通过USB接口与现代计算机连接。


串行口通信相关寄存器

SCON:串行控制寄存器

地址D7D6D5D4D3D2D1D0
98HSM0/FESM1SM2RENTB8RB8TIRI

SCON用于选择串行通信的工作方式,和某些控制功能,其格式如上,可位寻址通常只考虑SM0、SM1、REN、TI和RI

SM0/FE:当PCON寄存器中的SMOD0为1,该位用于帧错误检测;当PCON寄存器中的SMOD0为0时,该位与SM1一起指定串行通信的工作方式,具体如下:

REN:允许/禁止穿行接收控制位。由软件置位REN,REN=1为允许串行接收状态,可启动串行接收器RXD,开始接收信息;软件复位REN,即REN=0,则禁止接收;

TI:发送中断请求标志位。在模式1中,停止位开始发送时由内部硬件置1,表示向主机请求中断;中断响应后需要软件复位,即TI=0。初始化为0。

RI:接收中断请求标志位。在模式1中,接收到停止位时由内部硬件置1;中断响应后由软件复位0,初始化为0。

PCON:电源控制寄存器

地址D7D6D5D4D3D2D1D0
87HSMODSMOD0/POFGF1GF0PDIDL

不可位寻址

SMOD:波特率选择位,就是决定波特率是否加倍。用软件置位SMOD,当SMOD=1时,使波特率加倍;当SMOD=0时,各工作方式的波特率不加倍。复位时默认SMOD=0。

SMOD0:帧错误检测有效控制位,当SMOD0=1时,SCON寄存器中的SM0/FE位用于FE功能(帧错误检测);当SMOD0=0时,SCON寄存器中的SM0/FE位用于SM0功能,与SM1一起指定串行口工作方式。

SBUF:串行口数据缓冲寄存器

SBUF寄存器有2个,一个是发送寄存器,另一个是接收寄存器(名字都一样),但在逻辑上SBUF只有一个(地址都为99H),物理结构上,这是俩个完全独立的寄存器。如果CPU写SBUF,数据就会被送入发送寄存器准备发送;如果CPU读SBUF,则读入的数据一定来自接收寄存器。

简单来讲:a=SBUF,代表单片机从计算机接收到了数据(接收到的数据自动存在接收寄存器SBUF中)并且从接收寄存器SBUF读取数据并赋给a。SBUF=a,代表单片机要给计算机发送a数据,只需将a赋给发送寄存器SBUF就行,发送寄存器SBUF会自动给计算机发送SBUF中的数据。


波特率的设置

为选择波特率,关键在于定时器/计数器1的溢出率。

溢出率:单位时间内(1秒)定时器/计数器溢出的次数。

通常用的是定时器T1的模式2。模式2中,不再是 TH1 代表高 8 位,TL1 代表低 8 位了,而只有 TL1 在进行计数,当 TL1 溢出后,不仅仅会让 TF1 变 1,而且还会将 TH1 中的内容重新自动装到 TL1 中。这样有一个好处,就是我们可以把想要的定时器初值提前存在 TH1 中,当 TL1 溢出后,TH1 自动把初值就重新送入 TL1 了,全自动的,不需要程序中再给 TL1 重新赋值了。

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

机器学习-Numpy

机器学习-Numpy 如果一个人拒绝提高自己的思想觉悟,那么他只能处在弱小、可怜、凄惨的境地。 目录 机器学习-Numpy 1.Numpy:生成矩阵 做矩阵运算 1)创建矩阵 ①使用列表创建 ②使用元组创建 2)矩阵取值 3)numpy…

【栈】Leetcode 字符串解码

题目讲解 394. 字符串解码 算法讲解 这道题有四种情况:1.遍历的时候遇到数字,我们计算并保存数字,将它加入到数字栈中;2.遍历的时候遇到[,我们就把字符保存,加入到字符栈中;3.当遇到]&#x…

全栈开发之路——前端篇(9)插槽、常用api和全局api

全栈开发一条龙——前端篇 第一篇:框架确定、ide设置与项目创建 第二篇:介绍项目文件意义、组件结构与导入以及setup的引入。 第三篇:setup语法,设置响应式数据。 第四篇:数据绑定、计算属性和watch监视 第五篇 : 组件…

【2024亚马逊云科技峰会】Amazon Bedrock + Llama3 生成式AI实践

在 4 月 18 日,Meta在官网上公布了旗下最新大模型Llama 3。目前,Llama 3已经开放了80亿(8B)和700亿(70B)两个小参数版本,上下文窗口为8k,据称,通过使用更高质量的训练数据…

HTML实现3D相册

目录 写在前面 HTML简介 完整代码 代码分析 注意事项 系列推荐 写在最后 写在前面 本期小编给大家推荐一个炫酷的3D相册,可以更换照片哦,一起来看看吧~ HTML简介 HTML,即HyperText Markup Language,是一种广泛应用的超文…

扩展van Emde Boas树以支持卫星数据:设计与实现

扩展van Emde Boas树以支持卫星数据:设计与实现 1. 引言2. vEB树的基本概念3. 支持卫星数据的vEB树设计3.1 数据结构的扩展3.2 操作的修改3.3 卫星数据的存储和检索 4. 详细设计和实现4.1 定义卫星数据结构体4.2 修改vEB树节点结构4.3 插入操作的伪代码4.4 C语言实现…

GPIO输出速度(ARM-GD32)

单片机输出速度对GPIO硬件的影响 如果T为100ns 那么2/3*100ns 67ns 那么tr tf 38 ns (也就是不能超过32ns) tr 和tf和什么东西有关如何去控制 CL 是一个电容,电容会改变和影响电压变化的速率,输出高低电平也就是对电容进行充电…

【DDR 终端稳压器】Sink and Source DDR Termination Regulator [A]

Sink Source 这两个词被翻译的有点混乱了,有点“输入”“输出”的意思,但是还是不准确; 1 Sink 去到英英词典看看,母语是怎么介绍的吧。 to go down below the surface or towards the bottom of a liquid or soft substances…

uniapp 版本检查更新

总体来说uniapp的跨平台还是很不错的,虽然里面各种坑要去踩,但是踩坑也是开发人员的必修课和成长路。 这不,今天就来研究了一下版本检查更新就踩到坑了。。。先来看看检查更新及下载、安装的实现。 先来看看页面: 从左到右依次为…

了解 条码工具 Dynamsoft 在条码读取器中的形态运算

在图像处理中,术语形态学是指分析形状以填充小孔、去除噪声、提取轮廓等的一组操作。形态学操作很像空间卷积中的过滤过程。有两个部分在起作用:结构元素和预定义的计算规则。 点击下载Dynamsoft最新版https://www.evget.com/product/3691/download 结…

块元素、内联元素、行内块元素

一、介绍: CSS元素划分成块元素、行内元素(内联元素)、行内块元素等多种常用类型。也就是说:在CSS中,元素根据其在页面上的布局方式被分为不同的显示类型。 背景:HTML负责定义网页的结构和内容&#xff0c…

YOLO系列笔记(十四)——Compute Canada计算平台及其常见命令介绍

Compute Canada平台及其常见命令介绍 前言优势使用方法1. 检查模块不带版本号带版本号 2. 加载模块3. 检查模块是否加载成功4. 创建虚拟环境5. 编写作业脚本6. 提交作业7. 监控作业状态8. 查看作业开始预计时间9. 查看作业的详细输出10. 取消作业 注意结语 前言 大家好&#x…

hypack如何采集多波束数据?(上)

多波束设备有3种:多波束阵列,比如Seabat T50P;相干声纳,比如EdgeTeck 6205;多个单波束并列,比如Ross Sweep System,见下图。 辅助传感器主要有:罗经(提供航向&#xff09…

[C++核心编程-07]----C++类和对象之友元应用

🎩 欢迎来到技术探索的奇幻世界👨‍💻 📜 个人主页:一伦明悦-CSDN博客 ✍🏻 作者简介: C软件开发、Python机器学习爱好者 🗣️ 互动与支持:💬评论 &…

轻量级开源即时通讯项目:Open Im Server

Open Im Server:轻松搭建,随心沟通,让距离更近一步!- 精选真开源,释放新价值。 概览 Open IM Server 是一个基于 Go 实现的轻量级全功能开源即时通讯服务器项目,专为需要高度定制和扩展性的应用程序设计。…

GAME101-Lecture06学习

前言 上节课主要讲的是三角形的光栅化。重要的思想是要利用像素的中心对三角形可见性的函数进行采样。 这节课主要就是反走样。 课程链接:Lecture 06 Rasterization 2 (Antialiasing and Z-Buffering)_哔哩哔哩_bilibili 反走样引入 ​ 通过采样,得到…

18 分页:介绍

目录 简单例子 页表存在哪里 列表中究竟有什么 分页:也很慢 内存追踪 小结 在解决大多数空间管理问题上面,操作系统有两种方法: 第一种就是将空间分割成不同长度的分片,类似于虚拟内存管理中的分段,但是这个方法…

【redis】Redis五种常用数据类型和内部编码,以及对String字符串类型的总结

˃͈꒵˂͈꒱ write in front ꒰˃͈꒵˂͈꒱ ʕ̯•͡˔•̯᷅ʔ大家好,我是xiaoxie.希望你看完之后,有不足之处请多多谅解,让我们一起共同进步૮₍❀ᴗ͈ . ᴗ͈ აxiaoxieʕ̯•͡˔•̯᷅ʔ—CSDN博客 本文由xiaoxieʕ̯•͡˔•̯᷅ʔ 原创 CSDN 如…

设计模式 六大原则之单一职责原则

文章目录 概述代码例子小结 概述 先看下定义吧,如下: 单一职责原则的定义描述非常简单,也不难理解。一个类只负责完成一个职责或者功能。也就是说在类的设计中, 我们不要设计大而全的类,而是要设计粒度小、功能单一的类。 代码例…

提高Rust安装与更新的速度

一、背景 因为rust安装过程中,默认的下载服务器为crates.io,这是一个国外的服务器,国内用户使用时,下载与更新的速度非常慢,因此,我们需要使用一个国内的服务器来提高下载与更新的速度。 本文推荐使用字节…