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位
74LS164https://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…...
ES6从入门到精通:前言
ES6简介 ES6(ECMAScript 2015)是JavaScript语言的重大更新,引入了许多新特性,包括语法糖、新数据类型、模块化支持等,显著提升了开发效率和代码可维护性。 核心知识点概览 变量声明 let 和 const 取代 var…...
uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖
在前面的练习中,每个页面需要使用ref,onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入,需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...
Oracle11g安装包
Oracle 11g安装包 适用于windows系统,64位 下载路径 oracle 11g 安装包...
Java求职者面试指南:Spring、Spring Boot、Spring MVC与MyBatis技术解析
Java求职者面试指南:Spring、Spring Boot、Spring MVC与MyBatis技术解析 一、第一轮基础概念问题 1. Spring框架的核心容器是什么?它的作用是什么? Spring框架的核心容器是IoC(控制反转)容器。它的主要作用是管理对…...

篇章二 论坛系统——系统设计
目录 2.系统设计 2.1 技术选型 2.2 设计数据库结构 2.2.1 数据库实体 1. 数据库设计 1.1 数据库名: forum db 1.2 表的设计 1.3 编写SQL 2.系统设计 2.1 技术选型 2.2 设计数据库结构 2.2.1 数据库实体 通过需求分析获得概念类并结合业务实现过程中的技术需要&#x…...
WEB3全栈开发——面试专业技能点P4数据库
一、mysql2 原生驱动及其连接机制 概念介绍 mysql2 是 Node.js 环境中广泛使用的 MySQL 客户端库,基于 mysql 库改进而来,具有更好的性能、Promise 支持、流式查询、二进制数据处理能力等。 主要特点: 支持 Promise / async-await…...

聚六亚甲基单胍盐酸盐市场深度解析:现状、挑战与机遇
根据 QYResearch 发布的市场报告显示,全球市场规模预计在 2031 年达到 9848 万美元,2025 - 2031 年期间年复合增长率(CAGR)为 3.7%。在竞争格局上,市场集中度较高,2024 年全球前十强厂商占据约 74.0% 的市场…...
HTML中各种标签的作用
一、HTML文件主要标签结构及说明 1. <!DOCTYPE html> 作用:声明文档类型,告知浏览器这是 HTML5 文档。 必须:是。 2. <html lang“zh”>. </html> 作用:包裹整个网页内容,lang"z…...

OPENCV图形计算面积、弧长API讲解(1)
一.OPENCV图形面积、弧长计算的API介绍 之前我们已经把图形轮廓的检测、画框等功能讲解了一遍。那今天我们主要结合轮廓检测的API去计算图形的面积,这些面积可以是矩形、圆形等等。图形面积计算和弧长计算常用于车辆识别、桥梁识别等重要功能,常用的API…...
Cursor AI 账号纯净度维护与高效注册指南
Cursor AI 账号纯净度维护与高效注册指南:解决限制问题的实战方案 风车无限免费邮箱系统网页端使用说明|快速获取邮箱|cursor|windsurf|augment 问题背景 在成功解决 Cursor 环境配置问题后,许多开发者仍面临账号纯净度不足导致的限制问题。无论使用 16…...