当前位置: 首页 > news >正文

51单片机快速入门之 串行通信 2024/10/21

51单片机快速入门之 串行通信 

并行通信:

  1. 好处:传输快 适合短距离通信
  2. 弊端:占用大量io 
  3. 接线形式为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 即为下一帧起始位

有四种传输方式:

  1. 方式0: 只有     数据8位 无起始位 无停止位 通常用于 并行IO 的拓展    一共8位
  2. 方式1:起始位  数据8位 停止位  一共10位     
  3. 方式2:起始位  数据8位 可编程位 停止位  一个11位     
  4. 方式3:起始位  数据8位 可编程位 停止位  一个11位 (不同点: 波特率设置不同)                 
缺点:数据传输速度较慢 

 同步通信:

同步信号 数据 数据 数据 .....

同步信号取代了起始位,后方可以跟很多数据 且取消了停止位

优点:高速设备数据传输时常用

缺点:需要复杂的电路支持,单片机一般不用这种!


串行通信的数据传输方向

第一种:单工方式

一个方向传输    只能过去 回不来

T(发送) >>>> R(接收)


第二种:半双工方式

可以过去 也可以回来   但是得吃完了饭才能回来   不可同时

T(发送)>>>>R(接收)  没吃完不准走

R(接收)<<<<T(发送)  吃完饭你走吧


第三种:全双工方式

T====T                      可同时

R====R

打包边走边吃,饭也吃了,家也回了.


测试这四种传输方式51单片机串行通信(异步通信):

方式0:

只有     数据8位 无起始位 无停止位 通常用于 并行IO 的拓展    一共8位

74LS164icon-default.png?t=O83Ahttps://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 icon-default.png?t=O83Ahttp://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" 几个阶段 第一步&#xff1a;vue2 升级到最新 第一步&#xff1a;升级 vue2 至最新版本&#xff0c;截止到目前&#xff08;2024-10-…...

【wpf】08 xml文件的存取操作

在使用wpf编程过程中&#xff0c;会用到xml的配置文件&#xff0c;实现对其读取和存储的操作是必须的。 1 xml说明 可扩展标记语言 (Extensible Markup Language, XML) &#xff0c;标准通用标记语言的子集&#xff0c;可以用来标记数据、定义数据类型&#xff0c;是一种允许…...

即时通讯代码优化

在线用户逻辑修复 在进行测试时&#xff0c;发现当前代码有个问题&#xff0c;如果test1在服务器进行连接&#xff0c;本地的test2给test1发消息&#xff0c;虽然test1能收到服务器上的信息&#xff0c;但是本地服务日志中会报teset1不在线&#xff0c;需要对该种情况进行修复…...

jmeter学习(8)界面的使用

1、新建test plan 3、 打开文件 4、保存 5、剪切 6、复制 7、粘贴 8、所有线程组展开 9、所有线程组收缩 10、置灰&#xff0c;操作后无法使用 11、执行 13、清空当前线程组结果 14、清空所有线程组结果 15、函数助手 搜索&#xff0c;可以用于搜索某个请求&#x…...

记录一次hiveserver2卡死(假死)问题

问题描述 给开发人员开通了个账号&#xff0c;连接hive进行查询&#xff0c;后来发现&#xff0c;hive服务有时候会卡死&#xff0c;查询不了&#xff0c;连不上&#xff08;所有账号/客户端都连不上hive&#xff09;&#xff0c;但在chd里面看监控&#xff0c;服务器资源状态…...

【ios】在 SwiftUI 中实现可随时调用的加载框

在 SwiftUI 项目中实现一个自定义的加载框&#xff08;loading&#xff09;功能&#xff0c;可以在任意位置调用&#xff0c;以便显示加载动画或者进度条。下面的教程将详细讲解如何创建一个可复用的 Loading 组件&#xff0c;并通过通知机制控制其显示和隐藏。 先上效果&…...

字符、解释型语言、编程语言的互操作、输出

字符 同样是1&#xff0c;有人看到的是数字&#xff0c;有人看到的是字符&#xff0c;还有人看到的是一个小目标。 不同语言的字符 正则表达式把字符分成普通字符和元字符&#xff0c;元字符为了搭配匹配。比如.代表任意非换行字符&#xff0c;这对于通配很简便&#xff0c;用\…...

基于Python的自然语言处理系列(39):Huggingface中的解码策略

在自然语言生成任务中&#xff0c;如何选择下一步的单词或者词语对生成的文本质量影响巨大。Huggingface 提供了多种解码策略&#xff0c;可以在不同的场景下平衡流畅度、创造力以及生成效率。在这篇文章中&#xff0c;我们将逐步介绍 Huggingface 中的几种常见解码策略&#x…...

如何将视频格式转为mp4?好好看看下面这几个方法

如何将视频格式转为mp4&#xff1f;在数字化时代&#xff0c;视频已成为信息传播与娱乐消遣的重要载体。无论是学习、工作还是日常生活&#xff0c;我们几乎每天都会接触到各式各样的视频内容。然而&#xff0c;不同设备、平台或软件生成的视频文件往往采用不同的编码格式&…...

景区智慧公厕系统,监测公厕异味,自动清洁除臭

随着旅游业的快速发展&#xff0c;景区的公共厕所管理成为提升游客体验的重要环节。传统的公厕管理方式存在诸多不足&#xff0c;如卫生条件差、异味严重等问题。为了改善这些问题&#xff0c;许多景区开始采用智慧公厕系统。这种系统能够实时监测公厕内的异味&#xff0c;并自…...

GitLab CVE-2024-6389、CVE-2024-4472 漏洞解决方案

极狐GitLab 近日发布安全补丁版本17.3.2, 17.2.5, 17.1.7&#xff0c;修复了17个安全漏洞&#xff0c;本分分享其中两个漏洞 CVE-2024-6389、CVE-2024-4472 两个漏洞详情及解决方案。 极狐GitLab 正式推出面向 GitLab 老旧版本免费用户的专业升级服务&#xff0c;为 GitLab 老…...

hashCode的底层原理

HashCode是计算机科学中一个广泛使用的概念&#xff0c;特别是在Java等编程语言中&#xff0c;它扮演着重要的角色。为了详细解释hashCode的底层原理&#xff0c;以下从几个方面进行阐述&#xff1a; 一、hashCode的基本概念 HashCode&#xff0c;即哈希码&#xff0c;是一个将…...

hadoop_hdfs详解

HDFS秒懂 HDFS定义HDFS优缺点优点缺点 HDFS组成架构NameNodeDataNodeSecondary NameNodeClient NameNode工作机制元数据的存储启动流程工作流程 Secondary NameNode工作机制checkpoint工作流程 DataNode工作机制工作流程数据完整性 文件块大小块太小的缺点块太大的缺点 文件写入…...

【Linux】Linux命令行与环境变量

1.命令行 前⾯写C语⾔时&#xff0c;很少关注过 main 函数的参数&#xff0c;也没有考虑过 main 为什么会有参 数。 实际上在C语⾔中&#xff0c; main 函数⼀共有三个参数&#xff0c;在命令⾏部分先关注前两个参数&#xff1a; 1. argc&#xff1a;表示 main 函数接收到参…...

改变函数调用上下文:apply与call方法详解及实例

目录 改变函数调用上下文&#xff1a;apply与call方法详解及实例 一、什么是 apply 方法&#xff1f; 1、apply 语法 2、apply 示例 二、什么是 call 方法&#xff1f; 1、call 语法 2、call 示例 三、apply 和 call 的共同与差异 1、apply 和 call 的共同点 2、apply…...

k8s中的微服务

一、什么是微服务 用控制器来完成集群的工作负载&#xff0c;那么应用如何暴漏出去&#xff1f;需要通过微服务暴漏出去后才能被访问 Service是一组提供相同服务的Pod对外开放的接口。 借助Service&#xff0c;应用可以实现服务发现和负载均衡。 service默认只支持4层负载均…...

树莓派--AI视觉小车智能机器人--1.树莓派系统烧入及WiFi设置并进入jupyterlab

一、Raspberry Pi 系统烧入 使用树莓派&#xff0c;我们是需要有操作系统的。默认情况下&#xff0c;树莓派会在插入的SD卡上查找操作系统。这需要一台电脑将存储设备映像为引导设备&#xff0c;并将存储设备插入该电脑。大多数树莓派用户选择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详细操作--未完待续

docker介绍 docker官网: Docker&#xff1a;加速容器应用程序开发 harbor官网&#xff1a;Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台&#xff0c;用于将应用程序及其依赖项&#xff08;如库、运行时环…...

【OSG学习笔记】Day 18: 碰撞检测与物理交互

物理引擎&#xff08;Physics Engine&#xff09; 物理引擎 是一种通过计算机模拟物理规律&#xff08;如力学、碰撞、重力、流体动力学等&#xff09;的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互&#xff0c;广泛应用于 游戏开发、动画制作、虚…...

IGP(Interior Gateway Protocol,内部网关协议)

IGP&#xff08;Interior Gateway Protocol&#xff0c;内部网关协议&#xff09; 是一种用于在一个自治系统&#xff08;AS&#xff09;内部传递路由信息的路由协议&#xff0c;主要用于在一个组织或机构的内部网络中决定数据包的最佳路径。与用于自治系统之间通信的 EGP&…...

无法与IP建立连接,未能下载VSCode服务器

如题&#xff0c;在远程连接服务器的时候突然遇到了这个提示。 查阅了一圈&#xff0c;发现是VSCode版本自动更新惹的祸&#xff01;&#xff01;&#xff01; 在VSCode的帮助->关于这里发现前几天VSCode自动更新了&#xff0c;我的版本号变成了1.100.3 才导致了远程连接出…...

k8s业务程序联调工具-KtConnect

概述 原理 工具作用是建立了一个从本地到集群的单向VPN&#xff0c;根据VPN原理&#xff0c;打通两个内网必然需要借助一个公共中继节点&#xff0c;ktconnect工具巧妙的利用k8s原生的portforward能力&#xff0c;简化了建立连接的过程&#xff0c;apiserver间接起到了中继节…...

大学生职业发展与就业创业指导教学评价

这里是引用 作为软工2203/2204班的学生&#xff0c;我们非常感谢您在《大学生职业发展与就业创业指导》课程中的悉心教导。这门课程对我们即将面临实习和就业的工科学生来说至关重要&#xff0c;而您认真负责的教学态度&#xff0c;让课程的每一部分都充满了实用价值。 尤其让我…...

docker 部署发现spring.profiles.active 问题

报错&#xff1a; org.springframework.boot.context.config.InvalidConfigDataPropertyException: Property spring.profiles.active imported from location class path resource [application-test.yml] is invalid in a profile specific resource [origin: class path re…...

IP如何挑?2025年海外专线IP如何购买?

你花了时间和预算买了IP&#xff0c;结果IP质量不佳&#xff0c;项目效率低下不说&#xff0c;还可能带来莫名的网络问题&#xff0c;是不是太闹心了&#xff1f;尤其是在面对海外专线IP时&#xff0c;到底怎么才能买到适合自己的呢&#xff1f;所以&#xff0c;挑IP绝对是个技…...

tomcat指定使用的jdk版本

说明 有时候需要对tomcat配置指定的jdk版本号&#xff0c;此时&#xff0c;我们可以通过以下方式进行配置 设置方式 找到tomcat的bin目录中的setclasspath.bat。如果是linux系统则是setclasspath.sh set JAVA_HOMEC:\Program Files\Java\jdk8 set JRE_HOMEC:\Program Files…...

十九、【用户管理与权限 - 篇一】后端基础:用户列表与角色模型的初步构建

【用户管理与权限 - 篇一】后端基础:用户列表与角色模型的初步构建 前言准备工作第一部分:回顾 Django 内置的 `User` 模型第二部分:设计并创建 `Role` 和 `UserProfile` 模型第三部分:创建 Serializers第四部分:创建 ViewSets第五部分:注册 API 路由第六部分:后端初步测…...