串口模块详细讲解

目录

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.mfbz.cn/a/263.html

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

相关文章

计算机视觉----时域频域在图像中的意义、傅里叶变换在图像中的应用、卷积核的频域解释

1、时域&#xff08;时间域&#xff09;——自变量是时间,即横轴是时间,纵轴是信号的变化。其动态信号x&#xff08;t&#xff09;是描述信号在不同时刻取值的函数。 2、频域&#xff08;频率域&#xff09;——自变量是频率,即横轴是频率,纵轴是该频率信号的幅度,也就是通常说…

鸿蒙 核心与非核心装饰器

HarmonyOS NEXT 版本中完整的 ArkTS 装饰器分类整理&#xff08;含核心与非核心装饰器&#xff0c;已剔除废弃特性&#xff09; 一、核心装饰器&#xff08;Essential Decorators&#xff09; 1. 组件基础 装饰器功能Entry应用入口组件&#xff0c;每个模块必须且仅有一个&am…

Spring Boot之Web服务器的启动流程分析

如何判断创建哪种web容器&#xff1a;servlet&#xff1f;reactive&#xff1f; 我们在启动Spring Boot程序的时候&#xff0c;会使用SpringApplication.run方法来启动&#xff0c;在启动流程中首先要判断的就是需要启动什么类型的服务器&#xff0c;是servlet&#xff1f;或者…

影刀RPA开发-采集爬取京东读书书籍

1.采集京东读书 我们先梳理下操作流程 首先&#xff0c;在首页输入要爬取的书籍名称&#xff0c;输入后&#xff0c;搜索 出现搜索结果后&#xff0c;会有很多版本的书籍 我们点击热门筛选&#xff0c;让书记排序&#xff0c;这样可以将最符合我们需求的书籍显示在第一位 点击…

VScode 的插件本地更改后怎么生效

首先 vscode 的插件安装地址为 C:\Users\%USERNAME%\.vscode\extensions 找到你的插件包进行更改 想要打印日志&#xff0c;用下面方法 vscode.window.showErrorMessage(console.log "${name}" exists.); 打印结果 找到插件&#xff0c;点击卸载 然后点击重新启动 …

前端项目2-01:个人简介页面

目录 一.代码显示 二.效果图 三.代码分析 1. 文档声明和 HTML 基本结构 2. CSS 样式部分 全局样式 body 样式 页面主要容器 box 样式 左侧区域 l 样式 右侧区域 r 样式 左侧区域中头像容器 to 样式 头像图片样式及悬停效果 左侧区域中个人信息容器 tit 样式 个人…

针对面试-mysql篇

1.如何定位慢查询? 1.1.介绍一下当时产生问题的场景(我们当时的接口测试的时候非常的慢&#xff0c;压测的结果大概5秒钟))&#xff0c;可以监测出哪个接口&#xff0c;最终因为是sql的问题 1.2.我们系统中当时采用了运维工具(Skywalkin就是2秒&#xff0c;一旦sql执行超过2秒…

无偿帮写毕业论文

以下教程教你如何利用相关网站和AI免费帮你写一个毕业论文。毕竟毕业论文只要过就行&#xff0c;脱产学习这么多年&#xff0c;终于熬出头了&#xff0c;完成毕设后有空就去多看看亲人好友&#xff0c;祝好&#xff01; 一、找一个论文模板(最好是overleaf) 废话不多说&#…

Spring MVC 根据请求头 (如 Accept) 怎么返回 JSON 或 XML 数据?

Spring MVC 通过 内容协商 (Content Negotiation) 来根据客户端请求的 Accept 头决定返回 JSON、XML 还是其他格式的数据。 以下是核心机制和步骤&#xff1a; 客户端请求中的 Accept 头: 客户端&#xff08;如浏览器、curl、Postman等&#xff09;在发起HTTP请求时&#xff0…

Java 线程的堆栈跟踪信息

Java 线程的堆栈跟踪信息&#xff0c;展示了线程的当前状态和执行位置。以下是详细解释&#xff1a; 线程基本信息 "Thread-0" #16 prio5 os_prio0 cpu0.00ms elapsed16.29s tid0x00000243105a4130 nid0x5384 waiting on condition [0x0000007687ffe000]线程名称…

机器学习管道 pipeline

知识回顾: 转化器和估计器的概念管道工程ColumnTransformer和Pipeline类 作业&#xff1a; 整理下全部逻辑的先后顺序&#xff0c;看看能不能制作出适合所有机器学习的通用pipeline 基础概念 pipeline在机器学习领域可以翻译为“管道”&#xff0c;也可以翻译为“流水线”&…

硬件工程师笔记——电子器件汇总大全

目录 1、电阻 工作原理 欧姆定律 电阻的物理本质 一、限制电流 二、分压作用 三、消耗电能&#xff08;将电能转化为热能&#xff09; 2、压敏电阻 伏安特性 1. 过压保护 2. 电压调节 3. 浪涌吸收 4. 消噪与消火花 5. 高频应用 3、电容 工作原理 &#xff08;…