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

学习STC51单片机18(芯片为STC89C52RCRC)

每日一言

        你远比自己想象中强大,咬咬牙,再坚持一下。

UART(Universal Asynchronous Receiver/Transmitter)即通用异步收发传输器,是一种在单片机和嵌入式系统中广泛使用的串行通信协议。它通过两根线(TX 发送、RX 接收)实现全双工通信,特点是异步传输(无需共享时钟信号),使用特定的帧格式和波特率进行数据传输。

核心概念

异步通信

    1. 没有共享时钟,依赖双方约定的波特率(如 9600、115200bps)同步数据。
    2. 发送方和接收方各自使用独立的时钟源,通过起始位和停止位标识数据边界。

数据帧格式

    1. 起始位(1 位,低电平):标志数据开始。
    2. 数据位(通常 5-8 位):实际传输的数据,默认 8 位可表示一个字节。
    3. 奇偶校验位(可选):用于简单错误检测。
    4. 停止位(1 或 2 位,高电平):标志数据结束。

常见参数

    1. 波特率:每秒传输的比特数,需双方一致。
    2. 数据位:通常为 8 位(兼容 ASCII 和字节操作)。
    3. 校验位:无校验、奇校验或偶校验。
    4. 停止位:1 位或 2 位。

工作原理

发送流程

    1. 空闲状态:线路保持高电平(逻辑 1)。
    2. 发送起始位(低电平),通知接收方准备接收数据。
    3. 按位发送数据(低位在前)。
    4. 可选校验位。
    5. 发送停止位(高电平),恢复空闲状态。

接收流程

    1. 检测到起始位(高→低跳变)后,启动定时器采样数据位。
    2. 按约定的波特率和数据位逐位读取数据。
    3. 验证校验位(如有)。
    4. 根据停止位判断数据结束。

优缺点

  • 优点:实现简单、成本低、兼容性强,适合短距离通信。
  • 缺点:传输速率较低(相比 SPI、I²C),抗干扰能力较弱。

应用场景

  • 单片机与传感器、模块(如 GPS、蓝牙模块)通信。
  • 调试信息输出(如 STM32 的串口打印)。
  • 设备间的简单数据传输。

我们来了讲讲波特率吧:波特率就是因为双方硬件不同,所以要设置相同的传输率(波特率),主要用于衡量每秒传输的数据位数,比如9600波特率,就是表示每秒传输9600位数据

首先我们想要进行串口通信那么肯定是要先将的波特率初始化,那么我们现在不会写,我们这个STCISP烧录软件有这个初始化波特率的

那么关键来了计算波特率和晶振有关,我们为什么要选晶振为11.0592Mhz,那是因为和这边计算波特率有关,我们这个参数算波特率是最准的,误差率为0.00%

我们在计算初始波特率参数TH1,TL1的时候需要用到晶振的实际频率数值所以晶振提供稳定的时钟信号,决定了定时器的计时精度,而定时器又常用来设置波特率,控制数据传输速度。比如在一些单片机中,通过设置定时器的参数,结合晶振频率,就能精准地设定波特率

因为在计算波特率以及单片机相关参数时,使用的公式和算法都是基于基本单位 “赫兹” 来设计的哦

单片机和pc就等于是两个硬件,都有自己的发送和接收缓冲区,,但是pc自己的缓冲区不叫做SUBF

这个接受缓冲区是pc的接收缓冲区   这个发送缓冲区是单片机的发送缓冲区也就是SUBF,单片机的发送缓冲区叫做SUBF,接收缓冲区也叫做SUBF

串口通信1:发送一个字符b给pc

以下是代码

我们要先初始化波特率,在我们还不会自己配置波特率的时候,可以用软件生成的方式来

例如以下这种方式:

这个串口我们选择通用1,8位数据,选择定时器1,8位自动重载,定时器时钟选择12T

??为什么选择8位数据

在异步通信中,数据通常以字节为单位传输,也就是 8 位数据位。这样的设置是为了方便数据的打包和传输,而且和计算机系统中字节的定义相匹配,通用性很强。不同的单片机可能在具体设置上有点差异,但 8 位数据位是很常见的。

复习一下

bit 是位,是计算机中最小的数据单位,只有 0 和 1 两种状态。而字节(Byte)是由 8 个 bit 组成的,它是信息存储中常用的基本单位呢

好的知道了之后我们讲解main函数里面的操作我们的目的是输入a发送后,pc循环接收到a

那么我们要先将b赋值到data_info (好看的作用),然后将data_info赋值到SUBF,也就是发送缓冲区

发送缓冲区就是SUBF = data_info 这样的用法目的是 把东西放在发送缓冲区啊.....哈哈哈哈,要把东西发送出去,肯定要往发送缓冲区装东西啊 哈哈哈

然后就好了,我们加了延时1秒循环发送和pc循环接收反馈到stcisp软件上如下

我们只需要打开串口就有这样的效果啦

这个是第一个串口通信的案例

http://www.xdnf.cn/news/9384.html

相关文章:

  • 干货|VR全景是什么?
  • 并发解析hea,转为pdf格式
  • Unity数字人开发笔记——讯飞超拟人语音
  • uniapp|实现多端图片上传、拍照上传自定义插入水印内容及拖拽自定义水印位置,实现水印相机、图片下载保存等功能
  • 实测!横屏影视素材转竖屏 无损转换 +参数可调 抖音 快手竖屏视频一键适配
  • C++ 复制构造函数:创建对象的 “拷贝大师”
  • Ajax(Asynchronous JavaScript and XML)
  • 无人机分布式协同算法解析!
  • 采用Bright Data+n8n+AI打造自动化新闻助手:每天5分钟实现内容日更
  • promptfoo:让语言模型评测不再“靠感觉”——一站式 LLM 自动化测评神器深度解读
  • C#学习26天:内存优化的几种方法
  • 【开源解析】基于PyQt5+Folium的谷歌地图应用开发:从入门到实战
  • 在 Ubuntu 22.04 LTS 上离线安装 Docker
  • 002 flutter基础 初始文件讲解(1)
  • 解码 Skate:打造链间可组合应用栈,构建跨越虚拟机的无状态未来
  • 使用 Selenium 进行自动化测试:入门指南
  • sl4j+log4j日志框架
  • 苍穹外卖 09 WebSocket来单提醒客户催单营业额统计
  • 【C++】string类的使用(万字详解)
  • ZYNQ-PS与PL端BRAM数据交互
  • Tesseract OCR 安装与中文+英文识别实现
  • RK3568DAYU开发板-平台驱动开发:I2C驱动(原理、源码、案例分析)
  • 中山大学无人机具身导航新突破!FlightGPT:迈向通用性和可解释性的无人机视觉语言导航
  • 概念流水账:PHY、PCS、PRBS
  • Vue 项目中 Sass 与 Less 的对比
  • 社区造数服务接入MCP|得物技术
  • 中间件redis 功能篇 过期淘汰策略和内存淘汰策略 力扣例题实现LRU
  • UE5 编辑器工具
  • [原创](现代Delphi 12指南):[macOS 64bit App开发]: 按钮大小设置的小技巧
  • WHAT - 学习 WebSocket 实时 Web 开发