单片机 - MSB先发的串行数据收发 知识点整理

MSB 先发的串行数据收发知识点整理

在嵌入式通信或低级协议设计中,数据通常需要按照位(bit)进行串行传输。其中 “MSB 先发”(Most Significant Bit First) 是常见的数据传输方式,即 最高位(MSB)最先发送,最低位(LSB)最后发送

1. MSB 先发串行通信的基本概念

在串行通信中,数据是 按位(bit)依次发送的

  • MSB 先发(Most Significant Bit First):最高位最先传输,最低位最后传输。
  • LSB 先发(Least Significant Bit First):最低位最先传输,最高位最后传输。

MSB 先发的传输方式
假设数据 0xA5(十六进制)即 1010 0101(二进制):

发送顺序(MSB 先发):
1 0 1 0  0 1 0 1  (最高位 → 最低位)

LSB 先发的传输方式

发送顺序(LSB 先发):
1 0 1 0  0 1 0 1  (最低位 → 最高位)

本文只讨论 MSB 先发 的情况。

2. MSB 先发的串行数据发送代码

目标:按位输出 8-bit 数据,每次发送 1 位

#include <stdio.h>/* * 串行数据发送(高位先发,MSB First)* 目标:按位输出 8-bit 数据,每次发送 1 位*/void sendData(unsigned char data) {printf("发送数据: 0x%X\n", data);// 逐位发送数据,从最高位(MSB)到最低位(LSB)for (int i = 7; i >= 0; i--) {unsigned char bit = (data >> i) & 0x01;  // 取出最高位printf("%d", bit);  // 输出当前位}printf("\n");
}int main() {unsigned char data = 0xA5;  // 8-bit 数据 (1010 0101)sendData(data);return 0;
}

3. 代码解析

  1. sendData(unsigned char data)

    • 传入 8-bit 数据 data,并将其按位发送。
  2. 逐位提取和发送

    • 使用 for (int i = 7; i >= 0; i--),确保从 最高位(MSB) 依次处理到 最低位(LSB)
    • bit = (data >> i) & 0x01; 通过 右移 i 并与 0x01 按位与,获取 data 的第 i 位。
    • printf("%d", bit); 模拟数据线上传输 01

4. MSB 先发的串行数据接收代码

目标:模拟从串行输入接收 8-bit 数据,并存储到变量中

#include <stdio.h>/* * 串行数据接收(高位先收,MSB First)* 目标:模拟从串行输入接收 8-bit 数据,并存储*/unsigned char receiveData(unsigned char data) {unsigned char received = 0;  // 存储接收的数据printf("接收数据: 0x%X\n", data);// 逐位接收数据,从最高位(MSB)到最低位(LSB)for (int i = 7; i >= 0; i--) {received = (received << 1) | ((data >> i) & 0x01);  // 左移并存入新位}return received;
}int main() {unsigned char data = 0xA5;  // 8-bit 数据 (1010 0101)unsigned char received = receiveData(data);printf("重构后的数据: 0x%X\n", received);return 0;
}

5. 代码解析

  1. receiveData(unsigned char data)

    • 传入 模拟接收的 8-bit 数据 data,然后进行 按位接收 处理。
  2. 逐位提取和存储

    • for (int i = 7; i >= 0; i--) 确保从 最高位 依次处理到 最低位
    • received = (received << 1) | ((data >> i) & 0x01);
      • 先左移 received 1 位,为新位腾出空间。
      • 提取 data 的第 i,并存入 received 变量。

6. 代码输出

如果运行这两段代码,会得到:

发送数据: 0xA5
10100101接收数据: 0xA5
重构后的数据: 0xA5

说明数据正确地 按位发送并接收,且 数据完整性保持不变

7. 关键知识点总结

MSB 先发的串行数据发送

  1. 数据按位逐次发送,最高位(MSB)先发。
  2. 右移 i 位 & 0x01 提取当前位,再输出。
  3. 可以通过时钟信号触发传输(在实际硬件上)。

MSB 先发的串行数据接收

  1. 数据按位逐次接收,最高位(MSB)先收。
  2. 左移 received 1 位,再存入新位,确保数据位置正确。
  3. 最终数据应与原始 data 相同,保证正确传输。

MSB 先发 与 LSB 先发

  • MSB 先发:最高位先发送,适用于 SPI、I²C、RS232 等多种协议。
  • LSB 先发:最低位先发送,部分 UART、某些专用协议可能采用。

8. 适用场景

  • 嵌入式系统(单片机、ARM)
  • 低级硬件通信(I²C、SPI、UART)
  • 数字信号处理(DSP)
  • 软件模拟串行通信(Bit-Banging)

(完)

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

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

相关文章

反向 SSH 隧道技术实现内网穿透

反向 SSH 隧道技术实现内网穿透 场景描述 有一台内网的 Linux PC 机&#xff0c;想在其他地方&#xff08;如家中&#xff09;使用浏览器&#xff0c;在浏览器中能够使用内网 Linux PC 机的命令行。 实现思路 内网 Linux PC 机在内网可以使用 SSH 进行连接&#xff0c;但内…

[MRCTF2020]套娃

一。 按F12看源代码 发现代码 读代码发现 1.我们传的参数中不能存在_和%5f&#xff0c;可以通过使用空格来代替_&#xff0c;还是能够上传成功。 2.正则表达式"/^23333/ " &#xff0c;开头结尾都被 " " 和 " /"&#xff0c;开头结尾都被&qu…

基于Windows11的WSL2通过Ollama平台安装部署DeepSeek-R1模型

DeepSeek-R1模型各参数版本硬件要求 一、在Windows上安装Linux子系统WSL2 检查电脑是否支持虚拟化&#xff0c;按住<font style"color:rgb(199, 37, 78);background-color:rgb(249, 242, 244);">WindowsR</font>输入<font style"color:rgb(199,…

PHP回调后门小总结

目录 1.call_user_func 函数说明 蚁剑连接 2.数组操作造成的单参数回调后门 array_filter 函数说明 蚁剑连接 array_map 函数说明 蚁剑连接 3.二参数回调函数 uasort 函数说明 uksort array_reduce array_udiff 蚁剑连接 4.三参数的回调后门 array_walk 函数说…

MinGW与使用VScode写C语言适配

压缩包 通过网盘分享的文件&#xff1a;MinGW.zip 链接: https://pan.baidu.com/s/1QB-Zkuk2lCIZuVSHc-5T6A 提取码: 2c2q 需要下载的插件 1.翻译 找到VScode页面&#xff0c;从上数第4个&#xff0c;点击扩展&#xff08;以下通此&#xff09; 搜索---Chinese--点击---安装--o…

-PHP 应用SQL 盲注布尔回显延时判断报错处理增删改查方式

#PHP-MYSQL-SQL 操作 - 增删改查 1 、功能&#xff1a;数据查询(对数据感兴趣&#xff09; 查询&#xff1a; SELECT * FROM news where id$id 2 、功能&#xff1a;新增用户&#xff0c;添加新闻等&#xff08;对操作的结果感兴趣&#xff09; 增加&#xff1a; INSERT INT…

Linux一步部署主DNS服务器

#!/bin/bash #部署DHCP服务 #userli 20250319 if [ "$USER" ! "root" ] then echo "错误&#xff1a;非root用户&#xff0c;权限不足&#xff01;" exit 0 fi #防火墙与高级权限 systemctl stop firewalld && systemctl disable …

Softmax 回归 + 损失函数 + 图片分类数据集

Softmax 回归 softmax 回归是机器学习另外一个非常经典且重要的模型&#xff0c;是一个分类问题。 下面先解释一下分类和回归的区别&#xff1a; 简单来说&#xff0c;分类问题从回归的单输出变成了多输出&#xff0c;输出的个数等于类别的个数。 实际上&#xff0c;对于分…

视频管理平台-信息泄露漏洞

一&#xff1a;漏洞描述 EasyCVR 部分版本存在用户信息泄露漏洞&#xff0c;攻击者可直接通过此漏洞获取所有用户的账号密码。 二&#xff1a;fofa查询 title"EasyCVR" 三&#xff1a;漏洞复现 在fofa中寻找有漏洞的url 并访问 poc:/api/v1/userlist?pageinde…

gz sim机器人SDF模型 [持续更新]

机器人SDF模型 linklink的一级pose材质 plugin话题信息通信键盘操作plugin Sensor传感器imu 不算教学&#xff0c;个人的记录 sdf的格式跟urdf有所不同&#xff0c;必须是完整的一个包括&#xff0c;比如< pose></ pose>这样前一个后一个&#xff0c;urdf中是有<…

极速全场景 MPP数据库starrocks介绍

目录 一、引子 二、起源 &#xff08;一&#xff09;前身 &#xff08;二&#xff09;定位 三、特点 &#xff08;一&#xff09;高性能架构 &#xff08;二&#xff09;实时分析 &#xff08;三&#xff09;高并发与扩展性 &#xff08;四&#xff09;兼容性与生态 …

计算机二级(C语言)考试高频考点总汇(二)—— 控制流、函数、数组和指针

目录 六、控制流 七、函数 八、数组和指针 六、控制流 76. if 语句可以&#xff08;嵌套&#xff09;&#xff0c; if 语句可以嵌套在另一个 if 语句内部&#xff0c;形成&#xff08;嵌套的条件判断结构&#xff09;&#xff0c;用于处理更复杂的条件判断逻辑。 77. els…

ECharts各类炫酷图表/3D柱形图

一、前言 最近鸡米花实现了各类的炫酷的图表&#xff0c;有3D柱形图、双边柱形图以及异形柱形图&#xff0c;好了&#xff0c;直接上图&#xff1a; 二、效果图 一个个来吧&#xff0c;下面就是代码啦&#xff0c;注意&#xff0c;一下图表展示的宽高均为800px*300px 三、异形横…

2024年3月全国计算机等级考试真题(二级C语言)

&#x1f600; 第1题 下列叙述中正确的是 A. 矩阵是非线性结构 B. 数组是长度固定的线性表 C. 对线性表只能作插入与删除运算 D. 线性表中各元素的数据类型可以不同 题目解析&#xff1a; A. 矩阵是非线性结构 错误。矩阵通常是二维数组&#xff0c;属…

从零构建大语言模型全栈开发指南:第三部分:训练与优化技术-3.2.3预训练任务设计:掩码语言建模(MLM)与下一句预测(NSP)

👉 点击关注不迷路 👉 点击关注不迷路 👉 点击关注不迷路 文章大纲 3.2.3 预训练任务设计:`掩码语言建模(MLM)`与下一句预测(NSP)1. 掩码语言建模(`Masked Language Modeling, MLM`)1.1 MLM的核心原理与数学形式1.2 高级掩码优化技术1.2.1 `Span Masking(SpanBER…

DeepSeek 助力 Vue3 开发:打造丝滑的表格(Table)之添加行拖拽排序功能示例6,TableView16_06 分页表格拖拽排序

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享一篇文章&#xff01;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495; 目录 Deep…

大模型训练步骤:预训练;增量预训练;微调;RLHF或者DPO

参考&#xff1a;https://blog.csdn.net/chengxuyuanyy/article/details/140949825 开发阶段分类 模型分成3个阶段: (1)、第一阶段:(Continue PreTraining)增量预训练&#xff0c;在海量领域文档数据上二次预训练GPT模型&#xff0c;以注入领域知识。 (2)、第二阶段: SFT(Sup…

多网络选择路由(windows环境)

问题 情况是这样的&#xff0c;公司环境需要连接网线才能连接内网&#xff0c;也能上网&#xff0c;但是网速贼慢&#xff0c;我就连接了自己的热点&#xff0c;但是还是很慢&#xff0c;但是一拔掉网线就快了&#xff0c;但是连不上内网环境了。 解决思路 我猜我访问外网时…

idea解决properties中文乱码

问题&#xff1a; 我的IDEA已经将文件的字符集设置成了UTF-8&#xff0c;但是中文在*.properties文件中还是会出现乱码&#xff0c;后来经同事指点修改了一项配置就ok了&#xff01;话不多说&#xff0c;看下面的对比就清楚了。 设置方法&#xff1a; Settings -> Editor…

BKA-CNN-GRU、CNN-GRU、GRU、CNN四模型多变量时序预测(Matlab)

BKA-CNN-GRU、CNN-GRU、GRU、CNN四模型多变量时序预测&#xff08;Matlab&#xff09; 目录 BKA-CNN-GRU、CNN-GRU、GRU、CNN四模型多变量时序预测&#xff08;Matlab&#xff09;预测效果基本介绍程序设计参考资料 预测效果 基本介绍 BKA-CNN-GRU、CNN-GRU、GRU、CNN四模型多…