day07 51单片机-串口通信

51 单片机-串口通信

1 串口通信

1.1 需求描述

本案例讲解如何通过串口和PC以9600波特率,无校验位、1停止位通信。最终实现PC向单片机发送字符串,单片机回复PC。本案例中采用串口1通信。

1.2 硬件设计

1.2.1 串口工作原理

串口是将数据按照比特逐一发送的通信接口。在串口通信中,最重要的参数是波特率。在单片机中,波特率等于1s内传输的比特数。

串口通信中,要将波特率调整为9600,要求1秒钟内刚好发送9600个时钟信号,需要一个9600Hz的时钟源。单片机使用串口通信时,必须占用定时器1作为时钟源。定时器1每溢出1次,发送一个时钟信号。只要让它每秒钟溢出9600次即可。

串口通信需要占用定时器1,同时需要设置一些基本参数。

​ 串口工作模式设置为1(8位UART,波特率可变)。

​ 波特率要设置为9600。

在这里插入图片描述

1.1.2 串口具体设置

具体参数设置方式,需要配置串口通信,初始化流程如下:

在这里插入图片描述

1)SCON

在这里插入图片描述

​ SM0、SM1:本案例中采用 0、1工作方式。

在这里插入图片描述

​ SM2:在方式1时,如果SM2位为1,则只有在接收到有效的停止位时才置位中断请求标志位RI为1,如果SM2为0,则无论是否接收到有效的停止位都可以置位RI。官方推荐模式1,SM2应设置为0。

​ REN:允许/禁止串行接收控制位。由软件置位REN,即REN=1为允许串行接收状态,可启动串行接收器RxD,开始接收信息。软件复位REN,即REN=0,则禁止接收。

​ TI:发送中断请求标志位。在方式0,当串行发送数据第8位结束时,由内部硬件自动置位,即TI=1,向主机请求中断,响应中断后必须用软件复位,即TI=0。在其他方式中,则在停止位开始发送时由内部硬件置位,必须用软件复位。

​ RI:接收中断请求标志位。在方式0,当串行接收到第8位结束时,由内部硬件自动置位RI=1,向主机请求中断,响应中断后必须用软件复位,即RI=0。在其他方式中串行接收到停止位的中间时刻由内部硬件置位,即RI=1,必须由软件复位即RI=0。

从以上内容中可以看出,我们应该进行如下设置:

SM0 SM1 SM2 REN TB8 B8 TI RI
0 1 0 1 0 0 0 0

2)PCON

在这里插入图片描述

​ SMOD:波特率选择位。当用软件置位SMOD,即SMOD=1,则使串行通信方式1、2、3的波特率加倍;SMOD=0,则各工作方式的波特率加倍。复位时SMOD=0。

PCON的主要作用是波特率选择。

#define FOSC     11059200 // 晶振频率
#define NT       12 // 单片机的工作周期为12T

#define T2TEMP    256 - (FOSC / NT / 32 / BAUD_RATE)

3)SBUF

在这里插入图片描述

SBUF是串行口缓冲寄存器,地址为99H,实际上是2个缓冲器,发送SBUF和接收SBUF。写SBUF的操作完成待发送数据的加载,读SBUF的操作可获得已接收到的数据。STC89C5xRC.H中已有如下声明。

sfr SBUF = 0x99;

对该变量赋值即可写入发送SBUF寄存器,读取该变量即可读取接收SBUF寄存器。

4)定时器1相关变量

在这里插入图片描述

目前为止我们已经可以通过设置TH1的值来设置串口波特率。TH1这个变量属于定时器1,也就是说当串口工作时,定时器1要被占用。关于定时器1的寄存器如下:

TL1/TH1:定时器相关变量:

在这里插入图片描述

其中关于定时器0的相关变量解释:

变量 作用
TF1 定时器T1溢出标志。T1被允许计数以后,从初值开始加1技术。当最高位产生溢出时由硬件置“1”TF1,向CPU请求中断,一直保持到CPU响应中断时,才由硬件清“0”TF1。这一位的置位和清零都可以由硬件控制,不需要软件控制。
TR1 定时器1运行开关,置1开启定时器0,置0关闭定时器0
GATE 计数器模式外部输入控制(定时器模式必须置为0)
C/T(——) 置0表示定时器模式,1表示计数器模式
M1、M0(低4bit) M1=1,M0=0表示8位自动重载定时器,当溢出时将TL1存放的值自动重装入TH1.
TL1 定时器1低8位寄存器
TH1 定时器1高8位寄存器

综上所述,最终串口的初始化代码如下:

//波特率
#define BAUD_RATE 9600
//定时器初始值
#define T2TEMP    256 - (FOSC / NT / 32 / BAUD_RATE)

void Dri_UART_Init()
{
    // 设置串口工作模式
    SM0 = 0;
    SM1 = 1;
    SM2 = 0;
    REN = 1;

    //接受和发送完成标识
    //TI 1 :已经有数据
    //TI 0 :无数据数据
    //RI 1 :数据正在接收
    //RI 0 :无数据在接收
    TI  = 1

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Vs Code npm install 报错解决方法

用的人家的前端框架发现是封装过的,要修改人家前端的话还得把前端源码放在Vs Code 上运行,后端放在IDEA上运行,然后前后端并行开发,在配置前端环境时遇到: npm install 这个的原因是我把node下载到D盘了权限不够框框爆…

css 文字左右抖动效果

<template><div class"box"><div class"shake shape">抖动特效交字11</div></div> </template><script setup></script><style scope> .shape {margin: 50px;width: 200px;height: 50px;line-heigh…

yolov5 的几个问题,讲的比较清楚

yolov5, 几个问题 【BCELoss】pytorch中的BCELoss理解 三个损失函数原理讲解 https://zhuanlan.zhihu.com/p/458597638 yolov5源码解析–输出 YOLOv5系列(十) 解析损失部分loss(详尽) 1、输入数据是 xywh, 针对原图的, 然后,变成 0-1, x/原图w, y/原图h, w/原图w, h/原图h,…

助力突发异常事件预警保障公共安全,基于YOLOv7【tiny/l/x】模型开发构建公共生活场景下危险人员持刀行凶异常突发事件检测预警识别系统

基于AI目标检测模型的暴力持刀行凶预警系统是当下保障人民生命安全的新途径&#xff0c;近年来&#xff0c;公众场合下的暴力袭击事件频发&#xff0c;不仅给受害者及其家庭带来了深重的伤害&#xff0c;也对社会的稳定和安全造成了极大的威胁。在这种背景下&#xff0c;如何有…

思维树(Tree of Thoughts)的概念

思维树&#xff08;Tree of Thoughts&#xff0c;简称ToT&#xff09;是一种利用大型语言模型进行问题解决的框架。这个框架借鉴了人类认知研究的成果&#xff0c;特别是关于人类在做决策时的两种思维方式&#xff1a;快速、自动、无意识的模式&#xff08;称为“系统1”&#…

Mysql 在Windows Server系统下修改数据文件存储路径遇到的坑

因项目需要搭建一个Mysql数据库&#xff0c;为了方便日常运维操作开始选择了Windows Server 2012R2(已有的虚拟机)&#xff0c;考滤到要300G空间&#xff0c;原来的盘空间不够了,就是给虚拟机加了磁盘&#xff0c;Mysql 8.0.26社区版安装路径没得选择&#xff0c;默认就装在C&a…

微服务两种方式登录

目录 1.restTemplate方式 1.1页面 1.2消费者 1.3生产者 1.4效果 2.Feign方式 2.1Service 2.2生产者 三个生产者 一个消费者&#xff0c;三个生产者需要用mysqlmybatis 三个不同的数据库。 页面输入用户名和密码&#xff0c;提交到后端消费者&#xff0c;消费者传到生产…

深入C语言,发现多样的数据之枚举和联合体

一、枚举 枚举 是列出某些有穷序列集的所有成员的程序&#xff0c;或者是一种特定类型对象的计数。这两种类型经常&#xff08;但不总是&#xff09;重叠。是一个被命名的整型常数的集合。简单来说就将某种特定类型的对象一一进行列举&#xff0c;一一列举特定类型可能的取值。…

通过创新的MoE架构插件缓解大型语言模型的世界知识遗忘问题

在人工智能领域&#xff0c;大型语言模型&#xff08;LLM&#xff09;的微调是提升模型在特定任务上性能的关键步骤。然而&#xff0c;一个挑战在于&#xff0c;当引入大量微调数据时&#xff0c;模型可能会遗忘其在预训练阶段学到的世界知识&#xff0c;这被称为“世界知识遗忘…

解决在服务器中减少删除大文件夹耗时太久的问题

在数据驱动的现代商业环境中&#xff0c;企业对服务器的高效运作有着极高的依赖性。然而&#xff0c;IT管理员们常常面临一个棘手的问题&#xff1a;删除服务器上的大型文件夹过程缓慢&#xff0c;这不仅降低了工作效率&#xff0c;还可能对用户体验造成负面影响。本文将介绍一…

rCore-Turorial-Book第三课(计算机启动流程和程序内存布局与编译流程探索)

本节任务&#xff1a;梳理程序在操作系统中被编译运行的全流程&#xff0c;大体了解我们在没有操作系统的情况下&#xff0c;我们会面对那些困难 重点 1. 计算机组成基础 面对的困难&#xff1a;没有操作系统&#xff0c;我们必须直面硬件资源&#xff0c;管理起他们并为应用程…

Syncovery for Mac v10.14.3激活版:文件备份和同步工具

Syncovery for Mac是一款高效且灵活的文件备份与同步工具&#xff0c;专为Mac用户设计&#xff0c;旨在确保数据的安全性和完整性。该软件支持多种备份和同步方式&#xff0c;包括本地备份、网络备份以及云备份&#xff0c;用户可以根据实际需求选择最合适的方案。 Syncovery f…

全科都收!1区毕业水刊,影响因子狂涨至9.8,无预警记录!国人评价高!

本期&#xff0c;小编给大家解析的是一本创刊于2014年&#xff0c;且于同年被WOS数据库收录的毕业“水刊”——SCIENTIFIC DATA。 截图来源&#xff1a;期刊官网 SCIENTIFIC DATA&#xff08;ISSN&#xff1a;2052-4463&#xff09;是一本致力于数据的开放获取期刊&#xff0c…

linux将一个文件移动或复制到另一个目录下(超详细)

问题&#xff1a;需要在linux中将一个文件移动或复制到另一个目录下 下面提到的目录&#xff0c;可以直观理解为window中的文件夹 1、mv命令 mv是"move"的缩写&#xff0c;用于移动文件或目录到另一个位置。 将 文件 a.txt 移动到 目录home下 mv a.txt home将 目录…

基于SpringBoot的宠物领养网站管理系统

基于SpringBootVue的宠物领养网站管理系统的设计与实现~ 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringBootMyBatis工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 主页 宠物领养 宠物救助站 宠物论坛 登录界面 管理员界面 摘要 基于Spr…

二叉搜索树中的搜索(力扣700)

解题思路&#xff1a;因为二叉搜索树的左小右大特点&#xff0c;中只是寻找比较目标&#xff0c;怎么序遍历都可以&#xff0c;终止条件就是遍历完毕和找到了&#xff0c;然后就遍历左右子树开始寻找就好了 具体代码如下: class Solution { public: TreeNode* searchBST(Tre…

基于springboot+vue+Mysql的房产销售平台

开发语言&#xff1a;Java框架&#xff1a;springcloudJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a…

Pycharm破解流程

1.下载pycharm 网上很多&#xff0c;随便找一个&#xff0c;懒得找的话&#xff0c;或者去我传上去的资源pycharm部分直接取 2.下载文件 文件部分&#xff0c;我放在pycharm文件里面一起 打开下载好的激活包 3.执行脚本 先执行unisntall-all-users.vbs,直接双击打开&#xff0c…

Rumble Club上线时间+配置要求+游戏价格+加速器推荐

Rumble Club上线时间配置要求游戏价格加速器推荐 Rumble Club是一款基于物理的玩家大乱斗游戏&#xff0c;该作拥有丰富饱满的视觉效果和趣味性十足的游玩极致&#xff0c;让玩家可以各种富有想象力的方式&#xff0c;推搡、戏耍好友。该作即将正式上线&#xff0c;为了避免玩…

DDP、pytorch的分布式 torch.distributed.launch 训练说明

0、DDP的运行原理 执行步骤&#xff1a; 将data分为多个不同的batch&#xff0c;每个gpu得到batch都是不一样的然后将每个batch放在每个gpu上独立的执行最后得到的梯度求平均将平均梯度平分给每个gpu执行下一次迭代 这也就意味着你有多少个gpu&#xff0c;训练的速度也会提升…