51单片机学习9 串口通讯

51单片机学习9 串口通讯

  • 一、串口通讯简介
    • UART
    • STC89C51RC/RD+的串口资源
  • 二、51单片机串口介绍
    • 1. 内部结构
    • 2. 寄存器
      • (1)串口控制寄存器SCON
      • (2)电源控制寄存器PCON
    • 3. 计算波特率
    • 4. 串口配置步骤
  • 三、 开发示例
    • 1. 硬件电路
    • 2. 代码实现

在这里插入图片描述

一、串口通讯简介

51单片机的串口通信是通过内置的串行通信口(UART)实现的,常用于与外部设备进行数据交换。
串口通信是一种基于串行传输的数据通信方式,通过一根数据线和一根时钟线(或不需要时钟线)进行数据传输。数据按照一定的规则和时序被发送和接收。

UART

串口通信通常使用异步串行通信协议(UART),其中数据按照一定的帧格式进行传输,包括起始位、数据位、校验位和停止位等。常见的串口通信速率(波特率)有9600、19200、38400等。

STC89C51RC/RD+的串口资源

STC89C51RC/RD+内置2个互相独立的接收、发送缓冲器,可以同时发送和接收数据。 两个缓冲器可以共用一个地址码 99H。
两个缓冲器统称串行通信特殊功能寄存器SBUF。

二、51单片机串口介绍

1. 内部结构

在这里插入图片描述
如图所示:

  • TXD:接P3.1引脚
  • RXD:接P3.0引脚
  • SBUF 是缓冲区,分为发送缓冲区和接收缓冲区。
  • TH1和TL1是定时器1的功能,需要工作在方式2(自动重载模式),用来设置波特率;
  • 接收数据时,数据从引脚接收,通过移位寄存器接收到 SBUF,然后控制寄存器把RI置1(接收中断),然后触发中断;
  • 发送数据时,SBUF传到控制门,由发送控制器控制TI 触发中断;

2. 寄存器

(1)串口控制寄存器SCON

SCON 寄存器结构

Bit:   7      6      5      4      3      2      1      0┌────┬────┬────┬────┬────┬────┬────┬────┐│ SM0 │ SM1 │ SM2 │ REN │ TB8 │ RB8 │ TI  │ RI  │└────┴────┴────┴────┴────┴────┴────┴────┘

SCON 寄存器各位的功能

  • 位7-5:SM0、SM1、SM2(串口工作模式位)
  • 这三位用于设置串口工作的不同模式。它们的具体含义如下:
  • SM0、SM1:用于设置串口工作的模式,共有四种工作模式,包括模式0、模式1、模式2和模式3。
SM1SM0工作模式描述
00模式0移位寄存器,波特率固定
01模式110位异步收发器(8位数据),波特率可变
10模式211位异步收发器(9位数据),波特率固定
11模式311位异步收发器(9位数据),波特率可变
  • SM2:用于设置串口是否工作在多机通信模式,一般工作在单机模式时,该位为0。

  • 位4:REN(接收允许位): 该位用于控制串口的接收功能,置1时允许串口接收数据,清0时禁止串口接收数据。

  • 位3:TB8(发送位8): 该位用于设置在串口工作在模式2或模式3时发送的数据的第9位,通常用于设置奇偶校验位。

  • 位2:RB8(接收位8): 该位用于存储在串口接收到的数据的第9位,通常用于接收端的奇偶校验检测。

  • 位1:TI(发送中断标志位): 该位用于指示串口发送数据的中断标志,发送完一帧数据后会被置1,需要在中断服务程序中清零。

  • 位0:RI(接收中断标志位): 该位用于指示串口接收数据的中断标志,接收到一帧数据后会被置1,需要在中断服务程序中清零。

(2)电源控制寄存器PCON

PCON全称为Power Control Register(电源控制寄存器),它包含了一些与单片机的电源管理相关的控制位。

PCON寄存器结构

Bit:   7      6      5      4      3      2      1      0┌────┬────┬────┬────┬────┬────┬────┬────┐│ SMOD │ SMOD0│---- │ ---- │ ---- │ ---- │ POF0 │ POF1 │└────┴────┴────┴────┴────┴────┴────┴────┘

PCON寄存器各位的功能

  • 位7:SMOD(串口波特率倍增控制位)

    • SMOD用于控制串口波特率是否加倍。置1时,串口波特率加倍;清0时,不加倍。
  • 位6:SMOD0(串口0波特率倍增控制位)

    • 该位是SMOD的扩展位,一般在多串口通信时使用。SMOD置1时,SMOD0表示串口0的波特率是否加倍;SMOD清0时,该位无效。
      其它位与串口通讯没大关系。

3. 计算波特率

使用本文开源地址里的 51 波特率计算.exe 工具:
注意软件里设置定时器1的定时器方式,不是串口的工作方式。
SMOD:是否倍频(不是波特率加倍,只是计算初始值变化)。

在这里插入图片描述
晶振频率最好使用11.0592,这样误差比较小。

4. 串口配置步骤

  1. 通过TMOD寄存器 确定定时器T1工作方式2(自动重载) ;
  2. 通过SCON寄存器 确定串口工作方式 ;
  3. 计算T1的初值,设定波特率,装载 TH1,TL1;
  4. 启动定时器T1;
  5. 开启中断;
  6. 串口初始化;

三、 开发示例

1. 硬件电路

在这里插入图片描述
开发板使用USB转串口电路,同时也是下载模块的电路。

2. 代码实现

本代码效果: 串口接收数据后,原样返回串口。

uart_utils.c

#include "uart_utils.h"
#include <reg52.h>/**
* @brief 串口初始化
*/
void uart_init(u8 baud){// 设置计数器1的工作方式2TMOD = 0x20;// 设置定时器1的工作方式1SCON = 0x50; // 0b01010000 // 波特率倍频PCON = 0x80; // 0b10000000// 计数器初始值TH1 = baud;TL1 = baud;// 打开接收中断ES = 1; // 打开总中断EA = 1;// 启动定时器1TR1 = 1;
}
/**
* @brief 串口发送数据
*/
void uart_send(u8 dat){SBUF = dat;while(!TI);TI = 0;
}
/**
* @brief 使用中断接收串口数据
*/
void uart_recv() interrupt 4{u8 dat;if(RI){RI = 0;dat = SBUF;uart_send(dat);}
}

main.c

#include <reg52.h>
#include "led_utils.h"
#include "common_utils.h"
#include "types.h"
#include "timer_utils.h"
#include "uart_utils.h"/**
* @brief 主函数
*/
main()
{// 关闭所有ledled_all_off();uart_init(0xfa);while(1){}
}

操作步骤:

  1. 烧录程序;
  2. 在电脑打开串口调试助手,连接开发板串口,点打开,如下图所示;
  3. 在发送区输入字符,点发送。

调试效果:
在这里插入图片描述
本文代码开源地址:
https://gitee.com/xundh/learn51.git

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

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

相关文章

网络面试——浏览器输入url到显示主页的过程

浏览器输入URL到显示主页的过程通常可以分为以下步骤&#xff1a; 1. **URL解析**&#xff1a; - 当用户在浏览器的地址栏中输入URL时&#xff0c;浏览器会首先对该URL进行解析。 - 解析URL包括识别协议&#xff08;例如HTTP、HTTPS&#xff09;、主机名&#xff08;例如…

YOLOv5-小知识记录(一)

0. 写在前面 这篇博文主要是为了记录一下yolov5中的小的记忆点&#xff0c;方便自己查看和理解。 1. 完整过程 &#xff08;1&#xff09;Input阶段&#xff0c;图片需要经过数据增强Mosaic&#xff0c;并且初始化一组anchor预设&#xff1b; &#xff08;2&#xff09;特征提…

MSA7T10 DVBT2高清机顶盒方案

一、方案描述 MSA7T10系列芯片是Mstar推出的极富竞争力的DVB-T2机顶盒FTA方案&#xff0c;芯片内置64MB DDR2和T2解调器&#xff0c;支持T2 1.3.1规范&#xff0c;支持HEVC&#xff0c;H.264&#xff0c;MPEG高清视频&#xff0c;支持PVR/Timeshit功能&#xff0c;支持各种多媒…

曲线生成 | 图解Reeds-Shepp曲线生成原理(附ROS C++/Python/Matlab仿真)

目录 0 专栏介绍1 什么是Reeds-Shepp曲线&#xff1f;2 Reeds-Shepp曲线的运动模式3 Reeds-Shepp曲线算法原理3.1 坐标变换3.2 时间翻转(time-flip)3.3 反射变换(reflect)3.4 后向变换(backwards) 4 仿真实现4.1 ROS C实现4.2 Python实现4.3 Matlab实现 0 专栏介绍 &#x1f5…

如何利用社媒群组如何高效开发国外客户

现在社媒营销也是越来越流行了&#xff0c;很多外贸人都开始做社媒营销。社媒营销相对来说是比较有温度的一个营销&#xff0c;因为大部分社媒平台都支持在线聊天&#xff0c;触达的即时性是比较高的&#xff0c;效果也比传统的一些方法要好一些。 当然做社媒也是有难度的&…

西藏实景三维技术研讨交流会成功举办

2024年3月21-22日&#xff0c;西藏自治区“实景三维技术研讨交流会”在拉萨成功举办。 本次会议由西藏自治区自然资源厅、自然资源部重庆测绘院指导&#xff0c;西藏自治区测绘学会、西藏自治区地理信息产业协会主办&#xff0c;武汉大势智慧科技有限公司&#xff08;后简称“…

数据库-索引快速学

索引 当表中数据量庞大时&#xff0c;往往搜索一条数据就会耗费很长的时间等待 索引是帮助数据库高效获取数据的数据结构 create index 索引名 on 数据表名&#xff08;字段名&#xff09;;为该表下的某一字段创建索引&#xff0c;检索耗时会大大的减小 索引的优缺点 优点&…

【Python BUG】CondaHTTPError解决记录

问题描述 CondaHTTPError: HTTP 429 TOO MANY REQUESTS for url https://mirrors.ustc.edu.cn/anaconda/pkgs/free/win-64/current_repodata.json Elapsed: 00:26.513315 解决方案 找到用户路径下的 .condarc文件&#xff0c;建议用这个方法前和我一样做个备份&#xff0c;方…

python中类的导入与使用

1、类的介绍 与C中面向对象思想类似&#xff0c;有时候为了方便&#xff0c;需要专门创建一个类&#xff0c;将相关的函数全部写入到该类中&#xff0c;方便后续创建对象&#xff0c;再使用类中函数。那么如何创建完类&#xff0c;在其他文件中使用类中函数&#xff0c;这是这篇…

Python Flask框架 -- flask-migrate迁移ORM模型

# 之前使用的这个db.create_all()很有局限性&#xff0c;它不能把在class里修改的东西同步上数据库&#xff0c;所以不用了 # with app.app_context(): # 请求应用上下文 # db.create_all() # 把所有的表同步到数据库中去 例如&#xff0c;在User类中增加一个email字段&…

STM32和GD32内部时钟与外部时钟讲解

STM32F103为例: 1. 当 HSI 被用作 PLL 时钟输入时,可以实现的最大系统时钟频率为 64 MHz。 2. 要使 USB 功能可用,必须同时启用 HSE 和 PLL,并使 USBCLK 运行在 48 MHz。 3. 要实现 ADC 转换时间为 1 s,APB2 必须为 14 MHz、28 MHz 或 56 MHz。 ①. HSE = 高速外部时钟信号…

[linux初阶][vim-gcc-gdb] OneCharter: vim编辑器

一.vim编辑器基础 目录 一.vim编辑器基础 ①.vim的语法 ②vim的三种模式 ③三种模式的基本切换 ④各个模式下的一些操作 二.配置vim环境 ①手动配置(不推荐) ②自动配置(推荐) vim是vi的升级版,包含了更加丰富的功能. ①.vim的语法 vim [文件名] ②vim的三种模式 命令…

爬取搜狗翻译项目实例

视频中讲解的是百度翻译&#xff0c;但是视频中的方法现在已经不适用了&#xff0c;因为他们对 URL 的参数进行了修改&#xff0c;导致没法直接修改参数来爬取对应的翻译结果&#xff0c;这里我使用搜狗翻译来做演示&#xff0c;原理是一样的。 我们搜索的关键字会返回在 URL 中…

家用超声波清洗机高端品牌推荐!4款值得入手的热门超声波清洗机

急着洗眼镜的朋友先不要慌&#xff0c;虽然洗眼镜是日常生活中最常见的操作&#xff0c;但是在清洗眼镜方面也是有讲究的&#xff0c;不是随随便便把眼镜擦一下就算清洁干净了&#xff01;因为我们拿眼镜布擦眼镜的时候&#xff0c;布料粗糙的微粒就会跟砂纸一样打磨着镜片&…

【python】flask模板渲染引擎Jinja2中的模板继承,简化前端模块化开发

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

什么是Prompt Tuning?

本文是观看视频What is Prompt Tuning?后的笔记。 大语言模型&#xff08;如ChatGPT &#xff09;是基础模型&#xff0c;是经过互联网上大量知识训练的大型可重用模型。 他们非常灵活&#xff0c;同样的模型可以分析法律文书或撰写文章。 但是&#xff0c;如果我们需要用其解…

cocos3.0 关于UI组件学习

Sprite 图片&#xff1a;官方文档 Size Mode: 1.Raw&#xff1a;原始大小 2.TRIMMED: 默认&#xff0c;会裁切原始图片透明像素 3.Custom&#xff1a;自定义&#xff0c;只要修改ContentSize&#xff0c;会自动设置 Type 1.Simple:普通,会铺满&#xff0c;一张图。 2.Sliced…

力扣热门算法题 89. 格雷编码,92. 反转链表 II,93. 复原 IP 地址

89. 格雷编码&#xff0c;92. 反转链表 II&#xff0c;93. 复原 IP 地址&#xff0c;每题做详细思路梳理&#xff0c;配套Python&Java双语代码&#xff0c; 2024.03.24 可通过leetcode所有测试用例。 目录 89. 格雷编码 解题思路 完整代码 Python Java 92. 反转链表…

苹果智能戒指专利获批,Find My功能为智能穿戴提供智能防丢

根据美国商标和专利局&#xff08;USPTO&#xff09;近日公示的清单&#xff0c;苹果公司获得了一项关于智能戒指的专利&#xff0c;展示了多种交互手势&#xff0c;不仅支持捏合、画圈等&#xff0c;而且支持玩“石头剪刀布”游戏。 这项新专利名为“皮肤间接触检测”&#xf…

南京观海微电子---Vitis HLS设计流程介绍——Vitis HLS教程

1. 传统的FPGA设计流程 传统的RTL设计流程如下图所示&#xff1a; 传统的FPGA RTL设计流程主要是采用VHDL、VerilogHDL或System Verilog进行工程的开发&#xff0c;同时也是通过硬件描述语言来编写测试案例&#xff08;Test Bench&#xff09;对开发的工程进行仿真验证。 随后…