51单片机入门:串口通信

news2024/9/28 3:12:48

串行通信的初步认识

通信方式分类

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 重新赋值了。

 

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

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

相关文章

Linux:进程概念(三.详解进程:进程状态、优先级、进程切换与调度)

上次讲了进程这些内容:Linux:进程概念(二.查看进程、父进程与子进程、进程状态详解) 文章目录 1.Linux中的进程状态1.1前台进程和后台进程运行状态睡眠状态磁盘休眠状态停止状态kill指令—向进程发送信号 死亡状态 2.僵尸进程2.1僵…

零售全渠道营销业务链分析,让企业管控能力大幅加强!

对于传统的、规模化的零售快消企业来讲,面临着很大的渠道管理和建设问题,如何尽快实现整个营销体系的全渠道数字化转型是当务之急、重中之重。 面对错综分散的经销商,零售快消企业订货流程会越复杂,加之对门店管理较为粗放&#…

武汉星起航:亚马逊母亲节选品指南,热销产品助卖家赢取节日商机

随着母亲节的脚步日益临近,全球消费者纷纷开始为这一特殊的节日挑选礼物,以表达对母亲的深深感激和无尽爱意。作为跨境电商的重要平台,亚马逊凭借其丰富的商品种类和便捷的购物体验,成为消费者选购母亲节礼物的首选之地。那么&…

【数据结构陈越版笔记】第1章 概论

我最近准备以陈姥姥的数据结构教材为蓝本重新学一下数据结构,写一下读书笔记 第1章 概论 1.1 引子 概论中首先描述了,数据结构的定义没有具体的定义,初学者可以不用管这个定义的问题,但是我理解的和维基百科的说法是一样的“数…

[已解决]ModuleNotFoundError: No module named ‘tqdm‘

😎 作者介绍:我是程序员行者孙,一个热爱分享技术的制能工人。计算机本硕,人工制能研究生。公众号:AI Sun,视频号:AI-行者Sun 🎈 本文专栏:本文收录于《AI实战中的各种bug…

如何批量删除多个不同路径的文件但又保留文件夹呢

首先,需要用到的这个工具: 度娘网盘 提取码:qwu2 蓝奏云 提取码:2r1z 1、我准备了三个文件夹(实际操作的时候可能是上百个文件夹,无所谓),里面都放了两个图片 2、然后打开工具&am…

RustDesk 自建服务器部署和使用教程

RustDesk 是一个强大的开源远程桌面软件,是中国开发者的作品,它使用 Rust 编程语言构建,提供安全、高效、跨平台的远程访问体验。可以说是目前全球最火的开源远程桌面软件了,GitHub 星星数量达到了惊人的 64k! 与 Team…

AIGC|将GPTBots与10000+主流软件连接,实现应用场景全覆盖

一、自动化工作流的无限可能,由AI带来 当前市场上存在许多自动化工作流工具,这些工具在很大程度上提升了人们的工作效率,为企业节省了大量时间和人力成本。然而,这些工具并非万能,它们在实际应用中仍存在一定的局限性…

如何在自己的服务器上快速搭建第一个网站(其一)

根据上篇文章相信很多人以及成功搭建服务器啦。今天我们讲下如何在自己的服务器快速搭建第一个网站的一些重要配置,以及搭建网站的必备环境。干货满满,希望大家能够关注点赞收藏。 我会不定期更新一些实用的工具,欢迎大家私信评论喔&#xf…

工作中使用Optional处理空指针异常

工作中使用Optional处理空指针异常 实体类以前对空指针的判断Optional处理空指针测试结果 实体类 package po;import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor;import java.io.Serializable;Data AllArgsConstructor NoArgsConstruct…

kafka生产者消费者举例

文章目录 kafka介绍生产者消费者例子一、生产者二、消费者三、效果 KafkaTemplate KafkaListener kafka介绍 Kafka 是一款分布式流处理平台,它被设计用于高吞吐量、持久性、分布式的数据流处理。 Kafka 简介: Kafka 是一个高吞吐、分布式、基于发布 订阅…

NSS刷题

[SWPUCTF 2021 新生赛]jicao 类型&#xff1a;PHP、代码审计、RCE 主要知识点&#xff1a;json_decode()函数 json_decode()&#xff1a;对JSON字符串解码&#xff0c;转换为php变量 用法&#xff1a; <?php $json {"ctf":"web","question"…

2024年数维杯B题完整代码和思路论文讲解与分析

2024数维杯数学建模完整代码和成品论文已更新&#xff0c;获取↓↓↓↓↓ https://www.yuque.com/u42168770/qv6z0d/bgic2nbxs2h41pvt?singleDoc# 2024数维杯数学建模B题45页论文和代码已完成&#xff0c;代码为全部问题的代码 论文包括摘要、问题重述、问题分析、模型假设、…

怎么让电脑耳机和音响都有声音

电脑耳机音响不能同时用没声音怎么办 一般来说&#xff0c;重新开机后问题能够得到解决。右击“我的电脑”---“属性”---“硬件”---“设备管理器”&#xff0c;打开“声音、视频和游戏控制器”有无问题&#xff0c;即看前面有没有出现黄色的“”。 如果您的 电脑 耳机能正常…

SQL注入(sqli-labs第一关)

sqli-labs第一关 方法一&#xff1a;手工注入 来到第一关&#xff0c;图上说我们需要一个数字的参数 于是我们先手工注入?id1 and 11 跟?id1 and 12发现页面没有报错 每张截图上面页面中有select查询语句&#xff0c;这是我在第一关的源码中加上了echo "$sql ";…

基于UDP协议Python通信网络程序(服务器端+客户端)及通信协议在自动驾驶场景应用示例

一、UDP协议 UDP&#xff08;用户数据报协议&#xff09;是一种无连接的传输层协议&#xff0c;具有简单、高效的特点&#xff0c;适用于一些对数据可靠性要求不高的应用场景。UDP的主要特点包括无连接、不可靠和面向数据报。这意味着在发送数据之前不需要建立连接&#xff0c…

【Spring之依赖注入】2. Spring处理@Async导致的循环依赖失败问题

使用异步Async注解后导致的循环依赖失败详解 1 问题复现1.1 配置类1.2 定义Service1.3 定义Controller1.4 启动springboot报错 2.原因分析&#xff1a;看Async标记的bean注入时机2.1 循环依赖生成过程2.2 自检程序 doCreateBean方法 3.解决方案3.1 懒加载Lazy3.1.1 将Lazy写到A…

根据部门id删除该部门下的员工(事务)

application.properties&#xff1a; 或&#xff1a; application.yml&#xff1a; 新表&#xff1a; 日志对象类&#xff1a; 日志service类&#xff1a; 日志service接口&#xff1a; 日志mapper类&#xff1a; 部门service类&#xff1a; 员工mapper类&#xff1a;

某大型集团SAP数字化转型方案(95页PPT)

一、资料介绍 《某大型集团SAP数字化转型方案》是一份详尽的95页PPT资料&#xff0c;旨在为某大型集团提供一套全面而深入的SAP数字化转型方案。该方案紧密结合了集团的业务特点和发展需求&#xff0c;以SAP系统为核心&#xff0c;通过数字化技术的运用&#xff0c;实现业务流…

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

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