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溢出率(溢出脉冲频率)      

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

北京大学冯惠:与卓越者同行,方能更快的成长 | OceanBase数据库大赛获奖选手访谈

本文邀请2022 OceanBase 数据库大赛的季军&#xff0c;来自北京大学的冯惠同学&#xff0c;与我们分享如何寻找自己的兴趣&#xff1b;在一番经历后&#xff0c;对于产品与研发的职业方向观察&#xff1b;以及如何在学生时期提升个人专业能力&#xff0c;和参加数据库大赛的个人…

微信小程序用开发工具在本地真机调试可以正常访问摄像头,发布了授权后却无法访问摄像头,解决方案

今天开发上线了一个拍照的微信小程序&#xff0c;用uniapp的Vue3开发的&#xff0c;调用的camera组件&#xff0c;相关代码如下&#xff1a; <!-- 微信小程序相机组件 --><view v-if"showCamera" class"camera-container"><camera :device…

Ability内页面的跳转和数据传递(router和want显/隐跳转)

目录 案例:使用router完成页面跳转 1.创建一个Arkts项目 2.创建第二个页面 3.手动创建第三个页面 4.编写跳转路由 5.编写接受路由 6.编写返回上一个页面的代码 7.第三个界面代码完善 8.效果 案例:使用want启动Ability 1.创建一个新的项目 2.创建第二个界面 3.创建一个Ability 4…

23年408数据结构

第一题&#xff1a; 解析&#xff1a; 第一点&#xff0c;我们要知道顺序存储的特点&#xff1a;优点就是随用随取&#xff0c;就是你想要查询第几个元素可以直接查询出来&#xff0c;时间复杂度就是O(1)&#xff0c;缺点就是不适合删除和插入&#xff0c;因为每次删除和插入一…

android app执行shell命令视频课程补充android 10/11适配-千里马android

(https://blog.csdn.net/learnframework/article/details/120103471) https://blog.csdn.net/learnframework/article/details/120103471 hi&#xff0c;有学员在学习跨进程通信专题课程时候&#xff0c;在实战app执行一个shell命令的项目时候&#xff0c;对课程本身的android …

MySQL-13.DQL-聚合函数

一.DQL-分组查询 二.聚合函数 -- DQL:分组查询 -- 聚合函数 -- 1.统计该企业员工数量 count select count(id) from tb_emp; select count(job) from tb_emp;select count(A) from tb_emp; select count(*) from tb_emp;-- 2.统计该企业最早入职的员工 min select min(entr…

Pyside6 布局管理器(3)--- 控件尺寸、尺寸策略与布局的关系详解

在学习QWidget时我们已经学习了控件尺寸的一些基本设置&#xff0c;比如设置其作为顶层窗口时resize()方法&#xff0c;setGeometry()等方法。但在将控件添加到布局中后我们会发现&#xff0c;这些方法对于QWidget做为子控件时却是无效的。而布局的显示与大小也受到控件的影响。…

网络资源模板--Android Studio 实现简易新闻App

目录 一、项目演示 二、项目测试环境 三、项目详情 四、完整的项目源码 一、项目演示 网络资源模板--基于Android studio 实现的简易新闻App 二、项目测试环境 三、项目详情 登录页 用户输入&#xff1a; 提供账号和密码输入框&#xff0c;用户可以输入登录信息。支持“记…

RabbitMQ最新版本4.0.2在Windows下的安装及使用

RabbitMQ 是一个开源的消息代理和队列服务器&#xff0c;提供可靠的消息传递和队列服务。它支持多种消息协议&#xff0c;包括 AMQP、STOMP、MQTT 等。本文将详细介绍如何在 Windows 系统上安装和使用最新版本的 RabbitMQ 4.0.2。 前言 RabbitMQ 是用 Erlang 语言开发的 AMQP&…

【Linux】【命令】diff

diff DescriptionsArgumentsExamples直接使用diff命令-u 输出格式-c 输出格式并列输出-s 和 -q 脚本示例示例1&#xff1a;目录及文件差异 Descriptions diff命令用于对比两个文件或者两个文件夹的不同之处&#xff0c;求基本语法如下所示&#xff1a; diff [OPTION]... FILES…

信号与噪声分析——第一节-确定信号的分析

目录 1.确定信号的分析 1.1确定信号的分类&#xff1a; 1.周期信号与非周期信号&#xff1a; 周期信号的定义&#xff1a; 性质&#xff1a; 2.能量信号与功率信号&#xff1a; 定义 区别&#xff1a; 3.基带信号与频带信号&#xff1a; 基带信号的定义&#xff1a; …

使用Matplotlib绘制箱线图:详细指南与示例

在数据分析和可视化领域&#xff0c;箱线图&#xff08;Box Plot&#xff09;是一种强大的工具&#xff0c;用于展示数据的分布特征&#xff0c;包括中位数、四分位数、异常值等。本文将详细介绍如何使用Matplotlib库在Python中绘制箱线图&#xff0c;并通过一个实际的血压数据…

基于微信小程序二手物品调剂系统设计与实现

文章目录 前言项目介绍技术介绍功能介绍核心代码数据库参考 系统效果图文章目录 前言 文章底部名片&#xff0c;获取项目的完整演示视频&#xff0c;免费解答技术疑问 项目介绍 二手物品调剂系统是一种在线平台&#xff0c;旨在促进用户之间的二手物品交易。该系统提供了一个…

数智合同 | 业财一体与履约联动的数字化转型

随着信息化技术的发展&#xff0c;合同数智化管理为应对合同管理挑战提供了新机遇。企业需要深入思考数智化手段在合同管理中的应用&#xff0c;以提高合同管理水平&#xff0c;应对新形势下的市场竞争挑战与合规要求&#xff0c;实现企业的高质量发展。 2024年5月&#xff0c;…

数据中心母线槽测温监控装置的优势和如何选型

在当今数字化高速发展的时代&#xff0c;数据中心成为了信息存储与处理的核心枢纽。而确保数据中心的稳定运行&#xff0c;对于企业和社会来说至关重要。其中&#xff0c;母线作为数据中心电力传输的关键环节&#xff0c;其正常运行直接关系到整个数据中心的可靠性。为了保障数…

2024新手攻略:项目管理工具+PMP备考经验不容错过!

&#xff08;一&#xff09;热门工具大盘点 禅道是一款专注于软件开发项目管理的工具。它涵盖了项目管理的各个环节&#xff0c;包括需求管理、任务分配、缺陷跟踪等。禅道的优势在于其对软件开发流程的深入理解和支持&#xff0c;能够帮助开发团队更好地管理项目进度和质量。…

免费的国标设备端模拟器,支持自定义编程,批量模拟大量国标GB28181设备

GB/T 28181是中国国家公共安全视频监控联网系统&#xff08;简称“国标GB28181”&#xff09;的一套标准&#xff0c;主要用于规范视频监控系统的互联互通。这套标准的实施旨在推动不同厂家设备之间的互操作性&#xff0c;促进视频监控市场的健康发展。本软件是针对GB28181标准…

算法01----移动零(C++)

题目展示 算法原理 我们这里要用到的算法是双指针移动&#xff0c;和我们之前学的快排的核心思想是一样的。我们看看怎么做吧。我会以图片的形式将我的思路告知大家。 这就是整个题目的整体思想算法&#xff0c;大家理解一下&#xff0c;其实这道题目还是很简单的。 代码编写…

02篇 机械考研复试简历保姆级教程,考研简历联系导师邮件复试调剂超全攻略 导师喜欢看到的简历(附模板)

考研复试简历怎么写&#xff1f;导师喜欢看到的简历&#xff08;附模板&#xff09; 复试简历&#xff0c;重要程度max&#xff01;绝非小事一桩&#xff01;它就像是你硬核经历的闪亮外衣&#xff0c;条理清晰、逻辑严谨且设计感十足&#xff0c;一定能在导师心中留下深刻印象…

基于neo4j知识图谱的菜谱推荐系统

&#x1f374; AI菜谱推荐系统让你“煮”事半功倍&#xff01; &#x1f374; 找不到做饭灵感的时候&#xff0c;是不是总觉得“今天吃啥”这道选择题简直是终极挑战&#xff1f;别急&#xff0c;我们基于Neo4j知识图谱的菜谱推荐系统&#xff0c;正是为了解决你的困扰而设计&a…