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

每日一言

        那些让你喘不过气的日子,正是蜕变的开始。

 

串口编程寄存器分析(红色框里面的这个是串口助手里面生成的波特率初始化函数哈)

我们就根据以上的寄存器分析,因为这个是配置波特率的需要的寄存器

PCON

smod= 0 就是PCON的bit 7 这个位置为0 也就是 我们用8421法可以推算出 0x7F 为 0111 1111 ,那么&上个0x7F那么就会等于 &上一个0111 1111  那么我们smod这个位置就会为0  ,那么我们的波特率就不会加倍

SCON

SCON寄存器的话是控制串口工作模式  有4种方式 ,然后这个TH1也是通过这个SCON寄存器里面的讲解来算的

先介绍一下8 位 UART 的含义

在串口工作模式 1(你代码中使用的模式)中,“8 位 UART” 指:

  • 数据位为 8 位:每次传输 1 个字节(8 位)的数据,例如 ASCII 字符(如'A'对应二进制0100 0001)。
  • 无第 9 位:与模式 2/3(9 位 UART)不同,模式 1 不使用 TB8/RB8 位,适合简单的数据传输(如发送文本、传感器数据等)。

TMOD

这个就是老朋友了,定时器的工作模式

我们一般用按位与和按位或来设置

我们对于串口通信的定时器的模式的话我们就设置为8位的自动重装载模式

波特率的计算和定时器不可分家

TL1 和TH1 这个啊就是定时器1的两个8位寄存器

在串口通信中啊,一般使用的是8位自动重载的模式,这个模式是什么意思呢,就是为了计算波特率的准确度,在TL1溢出的时候,TH1会自动将自身的值给TL1,这样就不会有误差,精度更高,所以在配置串口通信的时候,我们会将TH1和TL1的值设置成相同的,就是为了计算波特率的精准度高。

Tips:这个scon的8位UART和TMOD 8位自动装载的这个是没有一点关系的,不要以为都是8就有什么关系,他们的功能都是独立的!!!

但实际应用中,模式 1(8 位 UART)+ 定时器 1 模式 2 是最常用的组合,因为:

  • 8 位数据格式满足大多数场景(如 ASCII、传感器数据)。
  • 定时器模式 2 的自动重装机制简化了波特率控制。

5. 关键区别总结

参数

8 位 UART(SCON)

8 位自动重装(Timer1)

作用

定义串口数据帧格式

生成稳定的波特率时钟

相关位

SM0=0, SM1=1 (模式 1)

TMOD.6=1, TMOD.5=0 (模式 2)

数据位数

每帧 8 位数据

与数据位无关

波特率控制

依赖定时器溢出率

直接决定溢出率

总结

  • 8 位 UART(SCON)和定时器 1 模式 2(8 位自动重装)是串口通信的黄金组合,但两者功能独立。

讲完这个寄存器那我们就要根据这个寄存器为什么要这样配置我们要搞懂原理

PCON为什么配置PCON &=0x7F?

 这行代码使用了按位与操作 。0x7F 转换为二进制是 0111 1111 ,PCON 寄存器与 0x7F 按位与,会将 PCON 寄存器的最高位(即 SMOD 位 )清零,其他位保持不变 ,从而确保 SMOD = 0,使串口波特率不加倍 。

SCON为什么配置成0x50??

        因为0x50相当于 0101 0000 就是我不用后面的四位不用的位都上0,就是TB8 RB8 TI RI,然后用8421法算出来就是0x50,那为什么是前面4位都是0101呢  因为和他们的工作方式有关,这边我们选择是是8位UART 所以SM0是0,SM1是1,还有我们运行串口通信所以REN要设为1,所以就是0101 0000 转换为0x50

TMOD为什么设置为TMOD &= 0x0F; TMOD |= 0x20;????

        因为我们定时器用的是定时器1,所以只用定时器1,定时器0不变,然后定时器1我们还要设置其为8位的自动重装载模式,所以先定时器M1M0的位置要为1、0,也说明了这个模式的作用,所以我们先TMOD &= 0x0F;    0x0F是00001111 &上这个之后 定时器0不变,定时器1清0,因为这个是按位&,后面TMOD |= 0x20就是让M1M0的位置要为1、0 所以就是 0010 0000  | 上这个之后定时器1有1为1全0为0 ,所以此时定时器就算设置好了 然后这个0010 0000利用8421法就直接变成 0x20

TL1 TH1为什么设置为 0xFD ????

首先是定时器1,1的来头

其次要搞清楚为什么相同为什么都是一样的值

  1. 因为是我们的TMOD设置的是8位自动重装载模式,为什么要设置的是8位自动重装载模式,因为这个模式的特性是 TL1当溢出时将TH1存放的值自动重装入TL1.这样有利于我们计算波特率的精准度高,所以我们要设置成一样的初始值。

这些配完就 TR1(运行控制位)=1启动定时就可以了

别忘了AUXR这个寄存器,这个寄存器的话reg52.h里面是没有定义的,所以我们用芯片手册查出来用法为

就直接先sfr AUXR=0x8E先声明一下  后面在初始里面加入 AUXR=0x01就好了

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

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

相关文章

crud方法命名示例

以下是基于表名dste_project_indicator(项目指标表)的完整命名示例,覆盖各类增删改查场景: 1. 表名与实体类映射 // 表名:dste_project_indicator // 实体类:DsteProjectIndicatorEntity public class Ds…

AI时代新词-人工智能生成内容(AIGC)

一、什么是人工智能生成内容(AIGC)? 人工智能生成内容(Artificial Intelligence Generated Content,简称AIGC)是指利用人工智能技术生成的各种形式的内容,包括文字、图像、音频和视频等。AIGC的…

英语六级-阅读篇

目录 2023年12月大学英语真题(二) 十五选十(Section A) 单词表 短语表 译文 Passage Two(Section C) 单词表 短语表 译文 简介:其实我总结这篇文章就是平时记忆该阅读文章单词中出现的…

Python 爬虫开发

文章目录 1. 常用库安装2. 基础爬虫开发2.1. 使用 requests 获取网页内容2.2. 使用 BeautifulSoup 解析 HTML2.3. 处理登录与会话 3. 进阶爬虫开发3.1. 处理动态加载内容(Selenium)3.2. 使用Scrapy框架3.3. 分布式爬虫(Scrapy-Redis&#xff…

为什么需要清除浮动?清除浮动的方式有哪些?

导语: 在前端面试中,“清除浮动”几乎是每位面试官都会问到的基础题。虽然浮动已经不如 Flex 和 Grid 那么常用了,但它在许多老项目中仍然占有一席之地。理解浮动的机制、掌握清除浮动的方式,是面试中体现你前端基础扎实度的关键点。 一、面试主题概述 浮动(float)最初是…

一键启动多个 Chrome 实例并自动清理的 Bash 脚本分享!

目录 一、📦 脚本功能概览 二、📜 脚本代码一览 三、🔍 脚本功能说明 (一)✅ 支持批量启动多个 Chrome 实例 (二)✅ 每个实例使用独立用户数据目录 (三)✅ 启动后自…

2025.05.26【Wordcloud】词云图绘制技巧

Most basic See what input file is needed to build this basic wordcloud. Text analysis A text analysis by Benjamin Tovarcis for document classification. 文章目录 Most basicText analysis 探索词云图的奥秘什么是词云图?为什么使用词云图?如…

RuoYi前后端分离框架集成UEditorPlus富文本编辑器

一、背景 采用若依框架搭建了一个小型的电子书项目,项目前端、后端、移动端就一人,电子书的章节内容是以富文本内容进行呈现的,产品设计人员直接给了一个第三方收费的富文本编辑器截图放到开发文档中,提了一沓需求点,概况下来就是要做成下图中的样子。作为一个后端开发人…

ETL 工具与数据中台的关系与区别

ETL 工具和数据中台作为数据处理领域的关键概念,虽然存在一定的关联,但二者有着明显的区别。本文将深入剖析 ETL 工具与数据中台之不同。 一、ETL 工具概述 ETL 是数据仓库技术中的核心技术之一,其全称为 Extract(抽取&#xff…

Redis(四) - 使用Python操作Redis详解

文章目录 前言一、下载Python插件二、创建项目三、安装 redis 库四、新建python软件包五、键操作六、字符串操作七、列表操作八、集合操作九、哈希表操作十、有序集合操作十一、完整代码1. 完整代码2. 项目下载 前言 本文是基于 Python 操作 Redis 数据库的实战指南&#xff0…

xdvipdfmx:fatal: File ended prematurely. No output PDF file written.

今天忽然遇到:使用xelatex或lualatex编译,一直卡住,不报错,也无法生成PDF,主动停止编译后就报错 xdvipdfmx:fatal: File ended prematurely. No output PDF file written. 然后,之前能正常编译的一些文件…

解锁未来AI:使用DACA模式和Agentic技术提高开发效率

学习Agentic AI:Dapr Agentic Cloud Ascent (DACA)设计模式的应用与演进 背景介绍 近年来,Agentic AI(代理型人工智能)的概念在学术界和产业界掀起了一阵热潮。Agentic AI指的是能够自主感知、决策和行动的智能体系统,它们不仅改变了我们与技术互动的方式,也为行业发展…

Jenkins+Docker+Harbor快速部署Spring Boot项目详解

JenkinsDockerHarbor快速部署Spring Boot项目详解 Jenkins、Docker和Harbor是现代DevOps流程中的核心工具,结合使用可以实现自动化构建、测试和部署。下面我将详细介绍如何搭建这个集成环境。 一、各工具的核心作用 Jenkins 自动化CI/CD工具,负责拉取代…

第12次04 :首页展示用户名

登录后&#xff0c;跳转到首页&#xff0c;首页会展示用户名&#xff1b;未登录时&#xff0c;首页将展示登录与注册的选项。 第一步&#xff1a;index.html <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml…

Flask 路由跳转机制:url_for生成动态URL、redirect页面重定向

在 Flask 开发中&#xff0c;url_for() 与 redirect() 是实现路由跳转逻辑的核心工具。 url_for()负责安全、灵活地生成 URL。 redirect()负责发起重定向响应。 1、url_for()&#xff1a;生成URL url_for(endpoint, **values) 是 Flask 提供的 URL 构造工具&#xff0c;可根据…

华为OD机试真题——构成正方形的数量(2025B卷:100分)Java/python/JavaScript/C++/C/GO六种最佳实现

2025 B卷 100分 题型 本文涵盖详细的问题分析、解题思路、代码实现、代码详解、测试用例以及综合分析; 并提供Java、python、JavaScript、C++、C语言、GO六种语言的最佳实现方式! 本文收录于专栏:《2025华为OD真题目录+全流程解析/备考攻略/经验分享》 华为OD机试真题《构成…

FFMPEG-AAC编码

一、流程图 二、代码解释 avcodec_find_encoder: 根据指定的AVCodecID查找注册的编码器。avcodec_alloc_context3: 为AVCodecContext分配内存。()avcodec_open2: 打开编码器。avcodec_send_frame: 将AVFrame⾮压缩数据给编码器。avcodec_receive_packet: 获取到编码后的…

RPC 协议详解、案例分析与应用场景

一、RPC 协议原理详解 RPC 协议的核心目标是让开发者像调用本地函数一样调用远程服务&#xff0c;其实现过程涉及多个关键组件与流程。 &#xff08;一&#xff09;核心组件 客户端&#xff08;Client&#xff09;&#xff1a;发起远程过程调用的一方&#xff0c;它并不关心调…

Docker基础 -- Ubuntu 22.04 AArch64 交叉编译 Docker 镜像构建指南

Ubuntu 22.04 AArch64 交叉编译 Docker 镜像构建指南 作者&#xff1a; &#xff08;填写作者&#xff09; 发布日期&#xff1a; 2025‑05‑26 1 背景与目标 在企业内网&#xff08;需要代理&#xff09;环境下&#xff0c;我们需要一套可靠、可复用的 Ubuntu 22.04 交叉编…

【ISP算法精粹】ISP算法管线的预处理算法有哪些?

1. ISP预处理算法有哪些&#xff1f; 在图像信号处理&#xff08;ISP&#xff09;流程中&#xff0c;预处理阶段主要针对图像传感器&#xff08;如CMOS/CCD&#xff09;输出的原始图像数据&#xff08;通常为拜耳格式的RAW图像&#xff09;进行初步处理&#xff0c;以校正硬件…