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。

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

SM0SM1SM2RENTB8B8TIRI
01010000

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

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

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

相关文章

Python 开发实现登陆和注册模块

Python 开发实现登陆和注册模块 一、案例介绍 本例设计一个用户登录和注册模块,使用Tkinter框架构建界面,主要用到画布、文本框、按钮等组件。涉及知识点:Python Tkinter界面编程、pickle数据存储。本例实现了基本的用户登录和注册互动界面…

web前端 html5+css3相关知识点(跟着黑马学)8

先总结一下网页常见的布局方式: 1. 标准流 块级元素独占一行 -> 垂直布局 行内元素/行内块元素一行显示多个 -> 水平布局 2. 浮动 可以让原本垂直布局的块级元素变成水平布局。 3. 定位 可以让元素自由的摆放在网页的任意位置 一般用于盒子之间的层叠…

分布式锁(Redis)

一、序言 本文和大家聊聊分布式锁以及常见的解决方案。 二、什么是分布式锁 假设一个场景:一个库存服务部署在上面三台机器上,数据库里有 100 件库存,现有 300 个客户同时下单。并且这 300 个客户均摊到上面的三台机器上(即三台…

React 19 带来了 JSX 运行时的重要更新

在 React 的发展历程中,JSX 运行时一直扮演着重要的角色。在以前的的版本,JSX 运行时会克隆传入的 props 对象,这背后有着两大原因。 历史原因 React 保留了一些特殊的 prop 名称,如 key 和在 React 19 之前的 ref。这些 prop 并…

SpringBoot整合Swagger3生成接口文档

一:前言 Swagger 是一个 RESTful API 的开源框架,它的主要目的是帮助开发者设计、构建、文档化和测试 Web API。Swagger 的核心思想是通过定义和描述 API 的规范、结构和交互方式,以提高 API 的可读性、可靠性和易用性,同时降低 …

深度图转点云

一、理论分析 二、其他分析 1、相机内参 相机内参主要是四个参数fx,fy,u0,v0。要明白相机内参就是相机内部参数,是参考像素坐标系而言,有了这个前提,这四个参数也就很好理解了。 (1)首先,。其中F是相机的…

Oracle中的 plsql语法

01-plsql 为什么要plsql 复杂的业务逻辑 可以使用 编程语言实现 sql无法实现 plsql也可以实现复杂的业务逻辑 为不直接使用编程语言 而是学习plsql plsql会比直接使用 编程语言 速度更快 基本语法: [declare --声明变量 变量名 变量类型 ] begin --代码逻辑 …

Springboot Gateway 报错Failed to resolve “bogon”的原因及解决办法

一、问题出现原因及初步分析 今天遇到一个奇怪的错误,一个一直正确运行的微服务后台,突然无法访问,如何重启都会报错。 想到近期有人在服务器上安装过其它服务,因此,考虑可能是配置问题,可配置问题修复后…

1.基于Springboot对SpringEvent初步封装

一:前置知识 Spring Event是Spring框架提供的一种事件机制,用于处理组件之间的通信。在复杂的系统中,模块或组件之间的通信是必不可少的。Spring Event可以用于以下场景: 1.系统间解耦:模块或组件之间通过事件进行通…

账号安全基本措施1

一、系统账号清理 1.1 将用户设置为无法登录 useradd -s /sbin/nologin lisi shell类型设置为/sbin/nologin用户将无法使用bash或其他shell来登录系统。 1.2 锁定用户。passwd -l 用户名 正常情况下是可以送普通用户切换到其他普通用户的 当锁定密码后passwd -l lisi就用普…

LeetCode:组合求和III之回溯法

题目 题目链接 找出所有相加之和为 n 的 k 个数的组合,且满足下列条件:只使用数字1到9 每个数字 最多使用一次 返回 所有可能的有效组合的列表 。该列表不能包含相同的组合两次,组合可以以任何顺序返回。题目图解 ** ** cpp代码 class …

AI预测体彩排列3第2套算法实战化测试第1弹2024年4月22日第1次测试

从今天开始,开始新一轮的测试,本轮测试,以6码为基础,同步测试杀号情况,争取杀至4-5码。经过计算,假如5码命中,即每期125注,投入250元,十期共计2500元,则命中率…

牛客NC233 加起来和为目标值的组合(四)【中等 DFS C++、Java、Go、PHP】

题目 题目链接: https://www.nowcoder.com/practice/7a64b6a6cf2e4e88a0a73af0a967a82b 解法 dfs参考答案C class Solution {public:/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可*** param nums int整型…

日本二次元团建国内院线:一周一部,占据36.2%票房

从《你想活出怎样的人生》开始,到《哈尔的移动城堡》结束,日本动画正在占据国内院线的整个4月份档期。 包括《数码宝贝02:最初的召唤》、《间谍过家家 代号:白》多部作品在内,整个国内四月份院线日本动画平均一周上映…

【Linux实践室】Linux高级用户管理实战指南:Linux用户与用户组编辑操作详解

🌈个人主页:聆风吟_ 🔥系列专栏:Linux实践室、网络奇遇记 🔖少年有梦不应止于心动,更要付诸行动。 文章目录 一. ⛳️任务描述二. ⛳️相关知识2.1 🔔Linux查看用户属性命令2.1.1 👻…

数据结构PT1——线性表/链表

1:顺序存储实现(数组实现) Data: a1 a2 .....ai ai1 .... an .... typedef struct LNode *List; //指向LNode的指针,这是typedef的,你可以随时声明,而不加typedef只是创建一个 struct LNode{ //结构体成员ElementT…

【前端】掌握按钮的显示与隐藏

目录 一、前言二、实现显示与隐藏的四种方式1、CSS属性控制2、JavaScript控制3、Vue.js响应式控制 三、需求背景四、代码实现1、定义变量2、绑定事件3、监听选中的学生4、返回return 五、整体效果1、没有勾选学生2、已勾选学生 六、设置按钮显示与隐藏的优势利弊1、优势2、劣势…

MySQL慢查询怎么办?需要关注Explain的哪些关键字?

目录 1-引言:什么是慢查询1-1 慢查询定义1-2 为什么排查慢查询 2-核心:慢查询排查2-1 慢查询定位2-2 慢查询解决2-2-1 Explain 排查慢查询2-2-2 Explain 重点关键字 3-总结:慢查询知识点小结 1-引言:什么是慢查询 1-1 慢查询定义…

C# 字面量null对于引用类型变量✓和值类型变量×

编译器让相同的字符串字面量共享堆中的同一内存位置以节约内存。 在C#中,字面量(literal)是指直接表示固定值的符号,比如数字、字符串或者布尔值。而关键字(keyword)则是由编程语言定义的具有特殊含义的标…