51单片机快速入门之 串行通信 2024/10/21
51单片机快速入门之 串行通信
并行通信:
- 好处:传输快 适合短距离通信
- 弊端:占用大量io
- 接线形式为8对8
串行通信
异步通信:
数据一帧一帧传送,传输完一帧之后,可继续或者等待(等待时为高电平)
其帧细分为(图片来源)

起始位:数据帧开始,一定为 0 外部设备只有接受到 0 之后才会开始接收数据
数据位:低位到高位传输 可是5-8位
奇偶校验: 验证数据有无错误,
说白了就是通过计算数据中一共有几个 1 然后判断其为 奇数 还是 偶数
举例: 传输 1111 0000 这里有4个1 为偶数 我们用奇数校验 就 应设置为 1
如果传输错误 比方说 1101 0000 1 由于校验位为1 此时构成偶数 奇数验证失败,数据传输异常
帧 0 1111 0000 1 1
奇偶校验只能检测到单比特错误,而且只能确定数据中有错误,但不能定位具体是哪一位出错。
如果数据发生多位错误,奇偶校验可能无法检测到。
因此,奇偶校验的可靠性相对较低,通常用于内存等对可靠性要求不高的场合。
停止位:简单的说就是 必须为高电平,其他不考虑 哪怕 是 占用 2位 也可以 例如 0 1111 0000 1 11
只要停止位后或停止位 等于0 即为下一帧起始位!
有四种传输方式:
- 方式0: 只有 数据8位 无起始位 无停止位 通常用于 并行IO 的拓展 一共8位
- 方式1:起始位 数据8位 停止位 一共10位
- 方式2:起始位 数据8位 可编程位 停止位 一个11位
- 方式3:起始位 数据8位 可编程位 停止位 一个11位 (不同点: 波特率设置不同)
缺点:数据传输速度较慢
同步通信:
同步信号 数据 数据 数据 .....
同步信号取代了起始位,后方可以跟很多数据 且取消了停止位
优点:高速设备数据传输时常用
缺点:需要复杂的电路支持,单片机一般不用这种!
串行通信的数据传输方向
第一种:单工方式
一个方向传输 只能过去 回不来
T(发送) >>>> R(接收)
第二种:半双工方式
可以过去 也可以回来 但是得吃完了饭才能回来 不可同时
T(发送)>>>>R(接收) 没吃完不准走
R(接收)<<<<T(发送) 吃完饭你走吧
第三种:全双工方式
T====T 可同时
R====R
打包边走边吃,饭也吃了,家也回了.
测试这四种传输方式51单片机串行通信(异步通信):
方式0:
只有 数据8位 无起始位 无停止位 通常用于 并行IO 的拓展 一共8位
74LS164
https://baike.so.com/doc/5430847-5669134.html

发送代码实现 :
#include <STC89C5xRC.H>
void delay(unsigned int t);//延时函数声明void main()
{SCON=0X10; //设置串行控制器0 0 0 1 0000 方式0 允许接受SBUF=0xfe; //发送1111 1110while(1);//防止程序重复运行}void delay(unsigned int t) //简单延迟函数
{while(t--);}
方式0发送效果:默认1/12 X 波特率
数据从低位到高位 我们发送的 是1111 1110 先发送的是0 然后是1 1 1 1111 所以Q7是输出值的最低位

接收请参考:
74LS165
http://www.doc88.com/p-810688043108.html
方式1: 波特率与定时器/计数器 SMOD的设置有关
起始位 数据8位 停止位 一共10位
代码实现:
#include <STC89C5xRC.H>void delay(unsigned int t); // 延时函数声明
void init();unsigned char str[] = "abcd"; // 定义一个字符数组来存储字符串unsigned char i;
void main()
{init(); SBUF=0; //发送起始位while(!TI);TI = 0; // 清除发送中断标志位 for(i = 0; str[i] != '\0'; i++) {SBUF = str[i]; // 逐个字符发送 while(!TI);TI = 0; // 清除发送中断标志位 delay(200); // 添加一点延迟,以便接收端有时间处理 } SBUF=1; //发送停止位while(!TI);TI = 0; // 清除发送中断标志位 P22 = 0; // 假设 P22 是你想要控制的某个输出引脚 while(1); // 防止程序重复运行
}void init()
{SCON = 0x50; // 设置串口工作在模式1,8位UART,允许接收 TMOD |= 0x20; // 设置定时器1为模式2,8位自动重装载 TH1 = 253; // 设置波特率为9600(假设晶振频率为11.0592MHz)TR1 = 1; // 启动定时器1PCON = 0x00; // SMOD = 0,波特率不加倍 EA = 1; // 开启全局中断 ES = 1; // 允许串口中断
}void delay(unsigned int t) // 简单延迟函数
{ while(t--);
}
方式一效果展示:

单片机必须是11.0592mhz 程序也得是,不然会出错
方式2:与SMOD 有关=0时 1/64 x 波特率 =1时 1/32 x 波特率
起始位 数据8位 可编程位 停止位 一个11位
代码实现:
#include <reg51.h> // 包含51单片机的寄存器定义头文件 // 初始化串口模式2和定时器1
void init_serial() {SCON = 0x80; // 设置串口模式2,REN = 0(不允许接收),TB8 = 0(第9位数据为0) PCON=0X80; //设置smod=1 模式2工作在 加倍环境 12mhz 的 32分之一 也就是 375kbit/s
} void delay(unsigned char t){while(t--);}unsigned char dat[]= "modd"; // 要发送的字符串 unsigned char i;
// 主函数
void main() {init_serial(); for (i = 0; dat[i] != '\0'; i++) {SBUF = dat[i]; // 将字符发送到串口缓冲区while (!TI); // 等待发送完成TI = 0; // 清除发送中断标志delay(1000);} while (1) {} // 主循环,保持程序运行
}
程序效果:

方式3:起始位 数据8位 可编程位 停止位 一个11位 (不同点: 波特率设置不同)
1和3 波特率求法 2^smod/32 x T1溢出率(溢出脉冲频率)
相关文章:
51单片机快速入门之 串行通信 2024/10/21
51单片机快速入门之 串行通信 并行通信: 好处:传输快 适合短距离通信弊端:占用大量io 接线形式为8对8 串行通信 异步通信: 数据一帧一帧传送,传输完一帧之后,可继续或者等待(等待时为高电平) 其帧细分为(图片来源) 起始位:数据帧开始,一定为 0 外部设备只有接受到 0 之后…...
webpack 老项目升级记录:node-sass 规定的 node v8 提升至支持 node v22
老项目简介 技术框架 vue 2.5.17webpack 4.16.5"webpack-cli": "3.1.0""node-sass": "^4.7.2" 几个阶段 第一步:vue2 升级到最新 第一步:升级 vue2 至最新版本,截止到目前(2024-10-…...
【wpf】08 xml文件的存取操作
在使用wpf编程过程中,会用到xml的配置文件,实现对其读取和存储的操作是必须的。 1 xml说明 可扩展标记语言 (Extensible Markup Language, XML) ,标准通用标记语言的子集,可以用来标记数据、定义数据类型,是一种允许…...
即时通讯代码优化
在线用户逻辑修复 在进行测试时,发现当前代码有个问题,如果test1在服务器进行连接,本地的test2给test1发消息,虽然test1能收到服务器上的信息,但是本地服务日志中会报teset1不在线,需要对该种情况进行修复…...
jmeter学习(8)界面的使用
1、新建test plan 3、 打开文件 4、保存 5、剪切 6、复制 7、粘贴 8、所有线程组展开 9、所有线程组收缩 10、置灰,操作后无法使用 11、执行 13、清空当前线程组结果 14、清空所有线程组结果 15、函数助手 搜索,可以用于搜索某个请求&#x…...
记录一次hiveserver2卡死(假死)问题
问题描述 给开发人员开通了个账号,连接hive进行查询,后来发现,hive服务有时候会卡死,查询不了,连不上(所有账号/客户端都连不上hive),但在chd里面看监控,服务器资源状态…...
【ios】在 SwiftUI 中实现可随时调用的加载框
在 SwiftUI 项目中实现一个自定义的加载框(loading)功能,可以在任意位置调用,以便显示加载动画或者进度条。下面的教程将详细讲解如何创建一个可复用的 Loading 组件,并通过通知机制控制其显示和隐藏。 先上效果&…...
字符、解释型语言、编程语言的互操作、输出
字符 同样是1,有人看到的是数字,有人看到的是字符,还有人看到的是一个小目标。 不同语言的字符 正则表达式把字符分成普通字符和元字符,元字符为了搭配匹配。比如.代表任意非换行字符,这对于通配很简便,用\…...
基于Python的自然语言处理系列(39):Huggingface中的解码策略
在自然语言生成任务中,如何选择下一步的单词或者词语对生成的文本质量影响巨大。Huggingface 提供了多种解码策略,可以在不同的场景下平衡流畅度、创造力以及生成效率。在这篇文章中,我们将逐步介绍 Huggingface 中的几种常见解码策略&#x…...
如何将视频格式转为mp4?好好看看下面这几个方法
如何将视频格式转为mp4?在数字化时代,视频已成为信息传播与娱乐消遣的重要载体。无论是学习、工作还是日常生活,我们几乎每天都会接触到各式各样的视频内容。然而,不同设备、平台或软件生成的视频文件往往采用不同的编码格式&…...
景区智慧公厕系统,监测公厕异味,自动清洁除臭
随着旅游业的快速发展,景区的公共厕所管理成为提升游客体验的重要环节。传统的公厕管理方式存在诸多不足,如卫生条件差、异味严重等问题。为了改善这些问题,许多景区开始采用智慧公厕系统。这种系统能够实时监测公厕内的异味,并自…...
GitLab CVE-2024-6389、CVE-2024-4472 漏洞解决方案
极狐GitLab 近日发布安全补丁版本17.3.2, 17.2.5, 17.1.7,修复了17个安全漏洞,本分分享其中两个漏洞 CVE-2024-6389、CVE-2024-4472 两个漏洞详情及解决方案。 极狐GitLab 正式推出面向 GitLab 老旧版本免费用户的专业升级服务,为 GitLab 老…...
hashCode的底层原理
HashCode是计算机科学中一个广泛使用的概念,特别是在Java等编程语言中,它扮演着重要的角色。为了详细解释hashCode的底层原理,以下从几个方面进行阐述: 一、hashCode的基本概念 HashCode,即哈希码,是一个将…...
hadoop_hdfs详解
HDFS秒懂 HDFS定义HDFS优缺点优点缺点 HDFS组成架构NameNodeDataNodeSecondary NameNodeClient NameNode工作机制元数据的存储启动流程工作流程 Secondary NameNode工作机制checkpoint工作流程 DataNode工作机制工作流程数据完整性 文件块大小块太小的缺点块太大的缺点 文件写入…...
【Linux】Linux命令行与环境变量
1.命令行 前⾯写C语⾔时,很少关注过 main 函数的参数,也没有考虑过 main 为什么会有参 数。 实际上在C语⾔中, main 函数⼀共有三个参数,在命令⾏部分先关注前两个参数: 1. argc:表示 main 函数接收到参…...
改变函数调用上下文:apply与call方法详解及实例
目录 改变函数调用上下文:apply与call方法详解及实例 一、什么是 apply 方法? 1、apply 语法 2、apply 示例 二、什么是 call 方法? 1、call 语法 2、call 示例 三、apply 和 call 的共同与差异 1、apply 和 call 的共同点 2、apply…...
k8s中的微服务
一、什么是微服务 用控制器来完成集群的工作负载,那么应用如何暴漏出去?需要通过微服务暴漏出去后才能被访问 Service是一组提供相同服务的Pod对外开放的接口。 借助Service,应用可以实现服务发现和负载均衡。 service默认只支持4层负载均…...
树莓派--AI视觉小车智能机器人--1.树莓派系统烧入及WiFi设置并进入jupyterlab
一、Raspberry Pi 系统烧入 使用树莓派,我们是需要有操作系统的。默认情况下,树莓派会在插入的SD卡上查找操作系统。这需要一台电脑将存储设备映像为引导设备,并将存储设备插入该电脑。大多数树莓派用户选择microSD卡作为引导设备。 1.1 下载…...
MacOS安装BurpSuite
文章目录 一、下载地址二、下载注册机三、安装教程四、启动burpsuit五、免责声明 一、下载地址 https://portswigger-cdn.net/burp/releases/download?productpro&version2024.7.1&typeMacOsx二、下载注册机 https://github.com/NepoloHebo/BurpSuite-BurpLoaderKey…...
【AI工具大全】《史上最全的AI工具合集》
一.AI编程类工具 1.CodeArts Snap CodeArts Snap是华为云研发的智能开发助手,覆盖软件开发全生命周期,提供代码生成、研发知识问答、智能协同等功能。通过自然语言编程,它能自动生成代码、解释代码逻辑、提供调试与检查,提升开发效率和软件质量。 2.ModelArts ModelArt…...
深度学习在微纳光子学中的应用
深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向: 逆向设计 通过神经网络快速预测微纳结构的光学响应,替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...
Docker 离线安装指南
参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性,不同版本的Docker对内核版本有不同要求。例如,Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本,Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...
【kafka】Golang实现分布式Masscan任务调度系统
要求: 输出两个程序,一个命令行程序(命令行参数用flag)和一个服务端程序。 命令行程序支持通过命令行参数配置下发IP或IP段、端口、扫描带宽,然后将消息推送到kafka里面。 服务端程序: 从kafka消费者接收…...
突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合
强化学习(Reinforcement Learning, RL)是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程,然后使用强化学习的Actor-Critic机制(中文译作“知行互动”机制),逐步迭代求解…...
盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来
一、破局:PCB行业的时代之问 在数字经济蓬勃发展的浪潮中,PCB(印制电路板)作为 “电子产品之母”,其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透,PCB行业面临着前所未有的挑战与机遇。产品迭代…...
shell脚本--常见案例
1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件: 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...
SCAU期末笔记 - 数据分析与数据挖掘题库解析
这门怎么题库答案不全啊日 来简单学一下子来 一、选择题(可多选) 将原始数据进行集成、变换、维度规约、数值规约是在以下哪个步骤的任务?(C) A. 频繁模式挖掘 B.分类和预测 C.数据预处理 D.数据流挖掘 A. 频繁模式挖掘:专注于发现数据中…...
前端导出带有合并单元格的列表
// 导出async function exportExcel(fileName "共识调整.xlsx") {// 所有数据const exportData await getAllMainData();// 表头内容let fitstTitleList [];const secondTitleList [];allColumns.value.forEach(column > {if (!column.children) {fitstTitleL…...
服务器硬防的应用场景都有哪些?
服务器硬防是指一种通过硬件设备层面的安全措施来防御服务器系统受到网络攻击的方式,避免服务器受到各种恶意攻击和网络威胁,那么,服务器硬防通常都会应用在哪些场景当中呢? 硬防服务器中一般会配备入侵检测系统和预防系统&#x…...
现代密码学 | 椭圆曲线密码学—附py代码
Elliptic Curve Cryptography 椭圆曲线密码学(ECC)是一种基于有限域上椭圆曲线数学特性的公钥加密技术。其核心原理涉及椭圆曲线的代数性质、离散对数问题以及有限域上的运算。 椭圆曲线密码学是多种数字签名算法的基础,例如椭圆曲线数字签…...
