串口模块详细讲解

目录

1.串口介绍

2。STC-ISP串口功能介绍

3.接口及引脚定义

4.串口知识点

4.1 硬件电路

4.2 电平标准

4.3 相关术语

4.4 常见通信接口比较

4.5 51单片机的UART

4.6 串口参数及时序图

4.7 串口模式图

4.8 串口和中断系统

4.9 串口相关寄存器

5.串口向电脑发送信息代码

第一步:

第二步:

第三步:

第四步:

第五步:

第六步:

第七步:

最终代码:

代码模块:

UART.c

UART.h

main.c

6.电脑通过串口控制LED代码

第一步:

第二步:

第三步:

第四步:

第五步:

第六步:

最终代码:

代码模块:

UART.c

UART.h

main.c

补充:波特率计算


1.串口介绍

串口是一种应用十分广泛的通讯接口,串口成本低、容易使用、通信线路简单,可实现两个设备的互相通信。

单片机的串口可以使单片机与单片机、单片机与电脑、单片机与各式各样的模块互相通信,极大的扩展了单片机的应用范围,增强了单片机系统的硬件实力。

51单片机内部自带UART(Universal Asynchronous Receiver Transmitter,通用异步收发器),可实现单片机的串口通信。

2。STC-ISP串口功能介绍

向单片机发送数据(下面框),返回(上框)

3.接口及引脚定义

DB9串口传输数据(注意使用的电压是否一致)使用RS232或RS485电平

4.串口知识点

4.1 硬件电路

简单双向串口通信有两根通信线(发送端TXD和接收端RXD) TXD与RXD要交叉连接

当只需单向的数据传输时,可以直接一根通信线

当电平标准不一致时,需要加电平转换芯片

4.2 电平标准

电平标准是数据1和数据0的表达方式,是传输线缆中人为规定的电压与数据的对应关系,串口常用的电平标准有如下三种:

TTL电平:+5V表示1,0V表示0

RS232电平:-3~-15V表示1,+3~+15V表示0

RS485电平:两线压差+2~+6V表示1,-2~-6V表示0(差分信号)

4.3 相关术语

全双工:通信双方可以在同一时刻互相传输数据

半双工:通信双方可以互相传输数据,但必须分时复用一根数据线

单工:通信只能有一方发送到另一方,不能反向传输

异步:通信双方各自约定通信速率

同步:通信双方靠一根时钟线来约定通信速率

总线:连接各个设备的数据传输线路(类似于一条马路,把路边各住户连接起来,使住户可以相互交流)

4.4 常见通信接口比较

4.5 51单片机的UART

STC89C52有1个UART STC89C52的UART有四种工作模式:     

模式0:同步移位寄存器     

模式1:8位UART,波特率可变(常用)   

 模式2:9位UART,波特率固定     

模式3:9位UART,波特率可变

4.6 串口参数及时序图

波特率:串口通信的速率(发送和接收各数据位的间隔时间)

检验位:用于数据验证

停止位:用于数据帧间隔

4.7 串口模式图

SBUF:串口数据缓存寄存器,物理上是两个独立的寄存器,但占用相同的地址。写操作时,写入的是发送寄存器,读操作时,读出的是接收寄存器

4.8 串口和中断系统

4.9 串口相关寄存器

5.串口向电脑发送信息代码

第一步:

将延迟函数复制过来并导入工程里面

第二步:

配置串口控制寄存器,配置模式1最常用,REN允许接收给1,不允许接收给0(也可以给1外面不给发就行)

第三步:

发送完置1(硬件只负责),但必须软件复位置0

第四步:

将寄存器配置:

SCON=0x40(串行寄存器配置上面图红色字体部分);PCON=0(波特率)

下图为定时器配置:

这里定时器1,没有定时器0,所有要把高位修改(不影响高低位配置用“”& |“”这两个方式)

第五步:

自动重装:

第六步:

STC-ISP的串口功能,数据调节到我们这款单片机的适应的数据

第七步:

生成代码复制过来修改一下配置

发送数据端

调用单项发送完成

模块化串口设置(完整代码)

串口初始化和单片机向电脑发送一个字节递增数据数据

调用

最终代码:

代码模块:

Delay.c和Delay.h可以在小编往期的博客里面找到

UART.c

#include <REGX52.H>/***@brief	串口初识化,4800bps@12.000MHz*@param	无*@retval	无*/
void UART_Init()
{SCON = 0x40;PCON |= 0x80;	TMOD &= 0x0F;			//设置定时器模式TMOD |= 0x20;			//设置定时器模式TL1 = 0xF3;			//设置定时初始值TH1 = 0xF3;			//设置定时重载值ET1 = 0;			//禁止定时器中断TR1 = 1;			//定时器1开始计时
}/***@brief	串口发送一个字节数据*@param	Byte 要发送的一个字节数据*@retval	无*/
void UART_SendByte(unsigned char Byte)
{SBUF = Byte;while(TI == 0);TI = 0;
}

UART.h

#ifndef __UART_H__
#define __UART_H__void UART_Init();
void UART_SendByte(unsigned char Byte);#endif

main.c

#include <REGX52.H>
#include "Delay.h"
#include "UART.h"unsigned char Sec;void main()
{UART_Init();while(1){UART_SendByte(Sec);Sec++;Delay(1000);}
}

6.电脑通过串口控制LED代码

第一步:

复制一份一修改(收:要中断系统,配置寄存器REN置1接收使能)

所有寄存器设置如下配置:

第二步:

配置中断

中断配置代码如下:

第三步:

中断寄存器修改后总如下,其他不用修改

第四步:

中断号4:

第五步:

中断验证:

接收中断标志RI

第六步:

函数不能在主函数又在中断函数里面,调用,向单片机发送数据代码:第二功能实现:

最终代码:

代码模块:

UART.c

#include <REGX52.H>/***@brief	串口初识化,4800bps@12.000MHz*@param	无*@retval	无*/
void UART_Init()
{SCON = 0x50;PCON |= 0x80;	TMOD &= 0x0F;			//设置定时器模式TMOD |= 0x20;			//设置定时器模式TL1 = 0xF3;			//设置定时初始值TH1 = 0xF3;			//设置定时重载值ET1 = 0;			//禁止定时器中断TR1 = 1;			//定时器1开始计时EA = 1;ES = 1;
}/***@brief	串口发送一个字节数据*@param	Byte 要发送的一个字节数据*@retval	无*/
void UART_SendByte(unsigned char Byte)
{SBUF = Byte;while(TI == 0);TI = 0;
}/*串口中断函数模板,要用的时候移到主函数里面
void UART_Routine() interrupt 4
{if(RI == 1){RI = 0;}
}
*/

UART.h

#ifndef __UART_H__
#define __UART_H__void UART_Init();
void UART_SendByte(unsigned char Byte);#endif

main.c

#include <REGX52.H>
#include "Delay.h"
#include "UART.h"void main()
{UART_Init();while(1){}
}void UART_Routine() interrupt 4 //中断子函数
{if(RI == 1){P2 = ~SBUF;UART_SendByte(SBUF);RI = 0;}
}

补充:波特率计算

我们串口初识化位0xF3(十六进制数字)=243(十进制数字),寄存器每个256会溢出一次,也就是每隔13us会溢出一次,寄存器的溢出率位1/13约等于0.07692MHZ。根据串口模式图计算 波特率:0.07692/16约等于0.00480769MHZ=4807.69HZ

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

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

相关文章

基于大模型的腰椎管狭窄术前、术中、术后全流程预测与治疗方案研究报告

目录 一、引言 1.1 研究背景与意义 1.2 研究目的与创新点 二、腰椎管狭窄概述 2.1 定义与分类 2.2 发病原因与机制 2.3 临床表现与诊断方法 三、大模型技术原理与应用现状 3.1 大模型的基本原理 3.2 在医疗领域的应用案例 3.3 选择大模型预测腰椎管狭窄的依据 四、…

【2025年前端高频场景题系列】使用同一个链接,如何实现PC打开是web应用、手机打是-个H5 应用?

面试情境与问题引入 哈喽大家伙,我是布鲁伊。在前端开发面试中,面试官经常会抛出一些看似简单却能考察多方面能力的问题。"如何实现同一个链接在PC端和移动端展示不同应用?"就是这样一个典型问题。为什么面试官喜欢问这个问题?因为它能同时考察候选人的设备适配…

医疗实时操作系统方案:手术机器人的微秒级运动控制

一、引言 手术机器人作为现代医疗技术的重要突破&#xff0c;正不断推动着外科手术向精准化、微创化和智能化的方向发展。直觉外科&#xff08;Intuitive Surgical&#xff09;作为手术机器人领域的领军企业&#xff0c;其达芬奇手术机器人系统已被广泛应用于全球众多医疗机构…

数据结构基础--蓝桥杯备考

1.优缺点总述 STL中各容器对比图 各类线性数据结构优缺点 1.数组 1.优点 1.简单&#xff0c;容易理解 2.访问快捷&#xff0c;只需要用下标就可以 3.有某些应用场景直接对应&#xff0c;例如二维数组对应平面 2.缺点 删除和插入数据非常耗时 2.链表 1.优点 插入和删…

运用数组和矩阵对数据进行存取和运算——NumPy模块 之六

目录 NumPy模块介绍 3.6.1 数组之间的运算 3.6.2 算术运算 3.6.3 比较运算 3.6.4 逻辑运算 3.6.5 矩阵运算 3.6.6 广播运算 3.6.7 聚合运算 3.6.8 三角函数与指数对数运算 3.6.9 位运算 3.6.10 条件运算 3.6.11 数组的统计运算 3.6.12 关键问题:数组之间的运算对数组的维度有要…

JGL066生活垃圾滚筒筛分选机实验装置

JGL066生活垃圾滚筒筛分选机实验装置 一.实验目的 本实验对生活垃圾滚筒分选机进行垃圾分选的实验。通过实验达到以下目的&#xff1a; 1.了解分选的原理、方法和影响分选效果的主要因素。 2.确定分选的适宜条件。 二.技术指标 1.生活垃圾分选机处理量分为0.5~2t/h。 2.运动参数…

Excelize 开源基础库发布 2.9.1 版本更新

Excelize 是 Go 语言编写的用于操作 Office Excel 文档基础库&#xff0c;基于 ECMA-376&#xff0c;ISO/IEC 29500 国际标准。可以使用它来读取、写入由 Excel、WPS、OpenOffice 等办公软件创建的电子表格文档。支持 XLAM / XLSM / XLSX / XLTM / XLTX 等多种文档格式&#xf…

xss-labs靶场基础8-10关(记录学习)

前言&#xff1a; 内容&#xff1a; 第八关 关卡资源网站&#xff0c;html编码网站&#xff08;两个网站&#xff0c;一个是实体编号转义&#xff08;只对特殊字符有效&#xff0c;字母无效&#xff09;、实体符号转义&#xff09; 在线Html实体编码解码-HTML Entity Encodi…

Kafka topic 中的 partition 数据倾斜问题

在 Kafka 中&#xff0c;如果一个 Topic 有多个 Partition&#xff0c;但这些 Partition 中的消息数量或流量分布不均衡&#xff0c;就会出现 数据倾斜&#xff08;Data Skew&#xff09; 的问题。 ✅ 什么是数据倾斜&#xff1f; 数据倾斜指的是&#xff1a; 某些 Partitio…

Retrofit vs Feign: 介绍、对比及示例

1. 介绍 Retrofit Retrofit 是 Square 公司开发的一个类型安全的 HTTP 客户端库&#xff0c;主要用于 Android 和 Java 应用。它将 HTTP API 转换为 Java 接口&#xff0c;通过注解来描述 HTTP 请求。 主要特点: 基于注解的 API 定义支持同步和异步调用支持多种数据格式转换…

SpringBoot整合MyBatis-Plus:零XML实现高效CRUD

前言 作为一名开发者&#xff0c;数据库操作是我们日常工作中不可或缺的部分。传统的MyBatis虽然强大&#xff0c;但需要编写大量XML映射文件&#xff0c;这在快速开发的今天显得效率不足。MyBatis-Plus&#xff08;简称MP&#xff09;作为MyBatis的增强工具&#xff0c;在保留…

SpringCloud之Gateway基础认识-服务网关

0、Gateway基本知识 Gateway 是在 Spring 生态系统之上构建的 API 网关服务&#xff0c;基于 Spring &#xff0c;Spring Boot 和 Project Reactor 等技术。 Gateway 旨在提供一种简单而有效的方式来对 API 进行路由&#xff0c;以及提供一些强大的过滤器功能&#xff0c;例如…

Redis扫盲

Redis 缓存中间件 基础篇 键值数据库 key Value 是NoSql数据库 非结构化、无关联的、非SQL、BASE&#xff08;无法满足ACID&#xff09; 命令执行是单线程&#xff0c;符合原子性。 低延迟、速度块&#xff08;基于内存&#xff0c;IO多路复用&#xff0c;良好的编码&am…

【FMMT】基于模糊多模态变压器模型的个性化情感分析

遇到很难的文献看不懂,不应该感到气馁,应该激动,因为外审估计也看不太懂,那么学明白了可以吓唬他 缺陷一:输入依赖性与上下文建模不足​​ ​​缺陷描述​​: 传统自注意力机制缺乏因果关系,难以捕捉序列历史背景多模态数据间的复杂依赖关系未被充分建模CNN/RNN类模型在…

Qt Creator 配置 Android 编译环境

Qt Creator 配置 Android 编译环境 环境配置流程下载JDK修改Qt Creator默认android配置文件修改sdk_definitions.json配置修改的内容 Qt Creator配置 异常处理删除提示占用编译报错连接安卓机调试APP闪退无法进入 debug 断点 环境 Qt Creator 版本 qtcreator-16.0.1Win10 嗯, …

使用聊天模型和提示模板构建一个简单的 LLM 应用程序

官方教程 官方案例 在上面的链接注册后&#xff0c;请确保设置您的环境变量以开始记录追踪 export LANGSMITH_TRACING"true" export LANGSMITH_API_KEY"..."或者&#xff0c;如果在笔记本中&#xff0c;您可以使用以下命令设置它们 import getpass imp…

React vs Vue:点击外部事件处理的对比与实现

React vs Vue&#xff1a;点击外部事件处理的对比与实现 在 Web 应用中&#xff0c;“点击外部事件监听”是一种常见需求&#xff0c;典型应用如&#xff1a;点击弹窗外部关闭弹窗、点击下拉菜单外关闭菜单。虽然在 React 和 Vue 中实现的原理类似——都是通过监听 document 的…

3335. 字符串转换后的长度 I

3335. 字符串转换后的长度 I class Solution:def lengthAfterTransformations(self, s: str, t: int) -> int:# 大质数mod 10**97# 创建一个长度为26的数组cnt&#xff0c;对应26个小写字母cnt [0]*26# 计算出s中26个字符分别有多少个for ch in s:cnt[ord(ch)-ord(a)] 1f…

Java详解LeetCode 热题 100(15):LeetCode 189. 轮转数组(Rotate Array)详解

文章目录 1. 题目描述2. 理解题目3. 解法一&#xff1a;使用额外数组3.1 思路3.2 Java代码实现3.3 代码详解3.4 复杂度分析3.5 适用场景 4. 解法二&#xff1a;环状替换法&#xff08;原地算法&#xff09;4.1 思路4.2 Java代码实现4.3 代码详解4.4 复杂度分析4.5 陷阱与注意事…

数据治理域——日志数据采集设计

摘要 本文主要介绍了Web页面端日志采集的设计。首先阐述了页面浏览日志采集&#xff0c;包括客户端日志采集的实现方式、采集内容及技术亮点。接着介绍了无线客户端端日志采集&#xff0c;包括UserTrack的核心设计、移动端与浏览器端采集差异以及典型应用场景崩溃分析。最后探…