51单片机的串口

目录

一、串口的介绍

 1、硬件电路

二、51单片机的UART

1、串口参数及时序图

2、串口模式图

3、串口和中断系统结构图

4、串口相关寄存器

 三、串口向电脑发送数据

1、通过STC-ISP软件

四、电脑通过串口控制LED

1、主函数

2、 UART串口通信模块

一、串口的介绍

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

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

51但潘集内部自带UART(通用异步收发器),可实现单片机的串口通信

 1、硬件电路

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

TXD与RXD要交叉连接

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

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

注:电平标准

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

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

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

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

扩展:常见通信接口比较

二、51单片机的UART

STC89C52有一个UART

STC89C52的UART有四种工作模式:

模式0:同步移位寄存器

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

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

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

注:我们这里也主要用模式1的形式

1、串口参数及时序图

2、串口模式图

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

3、串口和中断系统结构图

4、串口相关寄存器

这里我们根据串口中断结构图通过串口寄存器来配置,开启串口通信

 三、串口向电脑发送数据

1、通过STC-ISP软件

在STC-ISP软件中,有自带的波特率计算器,可以计算定时器的初值

如果板子型号是89C52RC,则选择如下参数

系统频率:11.0592MHZ

波特率:4800

UART选择:串口1

UART数据位:8位数据

波特率发生器:定时器1(8位自动重载)

定时器时钟:12T(FOSC/12)

注意:在江科大视频中的板子系统频率是12MHZ,所以他选择了波特率倍速,来减小误差,但是89C52RC的频率是11.0592MHZ,因此不需要选择波特率倍速

void UartInit(void)		//波特率计算器自动生成的串口初始化
{PCON &= 0x7F;		//波特率不倍速SCON = 0x50;		//这里打开了REN接收使能位AUXR &= 0xBF;		//89C52单片机中没有这项选择,更高级单片机才有AUXR &= 0xFE;		TMOD &= 0x0F;		//设置定时器工作方式TMOD |= 0x20;		TL1 = 0xFA;		//设定定时初值TH1 = 0xFA;		//设定定时器重装值ET1 = 0;		//禁止定时器1中断TR1 = 1;		//启动定时器1
}
void UART_Init()            //简化后的串口初始化
{SCON=0x40;				//0100 0000,SM0和SM1为0 1,采用方式1,REN位为0,其他位为0PCON &= 0x7F;			//第1位SMOD波特率倍增位置0,其他位保持不变//串行通信默认使用定时器T1的方式2,8位自动重装初值定时器TMOD &= 0x0F;			//高四位清零,低四位值不变TMOD |= 0x20;			//使TMOD高四位为0010,低四位保持不变。使用定时器T1的方式2TL1 = 0xFA;				//计算出定时器初值,转化成16进制,再赋值给TLx和THxTH1 = 0xFA;				//自动重装初值,计数溢出后,TH1的值会自动给到TL1TR1 = 1;				//定时器0开始计时ET1=0;					//这里不需要用到中断,所以关闭定时器T1中断}

2、编写程序

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

UART串口通信模块

#include <REGX52.H>/*** @brief  串口初始化,4800bps@11.0592MHz* @param  无* @retval 无*/void UART_Init()			//串口初始化
{SCON=0x40;				//0100 0000,SM0和SM1为0 1,采用方式1,REN位为0,其他位为0PCON &= 0x7F;			//第1位SMOD波特率倍增位置0,其他位保持不变//串行通信默认使用定时器T1的方式2,8位自动重装初值定时器TMOD &= 0x0F;			//高四位清零,低四位值不变TMOD |= 0x20;			//使TMOD高四位为0010,低四位保持不变。使用定时器T1的方式2TL1 = 0xFA;				//计算出定时器初值,转化成16进制,再赋值给TLx和THxTH1 = 0xFA;				//自动重装初值,计数溢出后,TH1的值会自动给到TL1TR1 = 1;				//定时器0开始计时ET1=0;					//这里不需要用到中断,所以关闭定时器T1中断}/*** @brief  串口发送的一个字节数据* @param  Byte 要发送的一个字节数据* @retval 无*/void UART_SendByte(unsigned char Byte)
{SBUF=Byte;				//赋值给SBUF会直接将数据通过串口发出while(TI==0);			//TI=0时循环,发送完一帧数据后,TI=1时,跳出循环TI=0;
}

四、电脑通过串口控制LED

1、主函数

#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;					//将电脑发送到SBUF的值赋值给P2UART_SendByte(SBUF);		//将电脑发送到单片机的数据同时也发送到电脑RI=0;}}

2、 UART串口通信模块

#include <REGX52.H>/*** @brief  串口初始化,4800bps@11.0592MHz* @param  无* @retval 无*/void UART_Init()			//串口初始化
{SCON=0x50;				//0101 0000,SM0和SM1为0 1,采用方式1,REN位为1,其他位为0PCON &= 0x7F;			//第1位SMOD波特率倍增位置0,其他位保持不变//串行通信默认使用定时器T1的方式2,8位自动重装初值定时器TMOD &= 0x0F;			//高四位清零,低四位值不变TMOD |= 0x20;			//使TMOD高四位为0010,低四位保持不变。使用定时器T1的方式2TL1 = 0xFA;				//计算出定时器初值,转化成16进制,再赋值给TLx和THxTH1 = 0xFA;				//自动重装初值,计数溢出后,TH1的值会自动给到TL1TR1 = 1;				//定时器0开始计时ET1=0;					//这里不需要用到中断,所以关闭定时器T1中断EA=1;					//启动中断总允许位ES=1;					//启动串口中断
}/*** @brief  串口发送的一个字节数据* @param  Byte 要发送的一个字节数据* @retval 无*/void UART_SendByte(unsigned char Byte)
{SBUF=Byte;				//赋值给SBUF会直接将数据通过串口发出while(TI==0);			//TI=0时循环,发送完一帧数据后,TI=1时,跳出循环TI=0;
}/*串口中断函数模板
void UART_Routine() interrupt 4
{if(RI==1);{RI=0;}
}
*/

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

在Ubuntu 20.04中安装CARLA

0. 引言 CARLA (Car Learning to Act) 是一款开源自动驾驶模拟器&#xff0c;其支持自动驾驶系统全管线的开发、训练和验证&#xff08;Development, Training, and Validation of autonomous driving systems&#xff09;。Carla提供了丰富的数字资产&#xff0c;例如城市布局…

在 TextForm 字段后显示图标

问题 Expanded(child: Column(mainAxisAlignment: MainAxisAlignment.start,children: [SizedBox(height: 40),Row(children: [SizedBox(width: 8),//MENUIcon(Icons.menu,size: 34,color: AppColors.black,),Spacer(),//LOGOSizedBox(height: 60,width: 100,child: Image.ass…

Pikachu-xss实验案例-钓鱼

攻击思路&#xff1a;提供一个与攻击网站相似的登陆的钓鱼页面&#xff1b;让用户输入登陆信息 查看项目源代码&#xff0c;首先访问 fish.php ,提供输入的登陆框&#xff0c; 从登陆框获取到账号、密码后&#xff0c;重定向到xfish.php 做保存&#xff1b; 因此&#xff0c;需…

PCL 点云高斯滤波

目录 一、概述 1.1原理 1.2实现步骤 1.3应用场景 二、代码实现 2.1关键函数 2.1.1 高斯滤波实现 2.1.2 可视化函数 2.2完整代码 三、实现效果 PCL点云算法汇总及实战案例汇总的目录地址链接&#xff1a; PCL点云算法与项目实战案例汇总&#xff08;长期更新&#xf…

HCIP-HarmonyOS Application Developer 习题(四)

1、以下哪个Harmonyos的AI能力可以提供文档翻拍过程中的辅助增强功能? A.文档检测矫正 B.通用文字识别 C.分词 D.图像超分辨率 答案&#xff1a;A 分析&#xff1a;文档校正提供了文档翻拍过程的辅助增强功能&#xff0c;包含两个子功能&#xff1a; 文档检测&#xff1a;能够…

好用的股票预测八大算法的Python实现

股票预测算法通常涉及时间序列分析、统计学、机器学习和深度学习等多种方法。以下是经典的、常见的十大股票预测算法及其Python实现。这些算法各有优势&#xff0c;可以用于不同的市场预测场景。以下代码实现中&#xff0c;我们将使用yfinance下载数据&#xff0c;并展示各算法…

关于鸿蒙next 调用系统权限麦克风

使用app的时候都清楚&#xff0c;想使用麦克风、摄像头&#xff0c;存储照片等&#xff0c;都需要调用系统的权限&#xff0c;没有手机操作系统权限你也使用不了app所提供的功能&#xff0c;虽然app可以正常打开&#xff0c;但是你需要的功能是没办法使用的。今天把自己在鸿蒙学…

netty之NettyServer字符串解码器

前言 在实际开发中&#xff0c;server端接收数据后我们希望他是一个字符串或者是一个对象类型&#xff0c;而不是字节码&#xff0c;那么&#xff1b; 在netty中是否可以自动的把接收的Bytebuf数据转String&#xff0c;不需要我手动处理&#xff1f; 答&#xff1b;有&#xff…

OpenGL ES MVP/变换投影矩阵(8)

OpenGL ES MVP/变换投影矩阵(8) 简述 通过前面几节的学习&#xff0c;目前我们已经可以渲染自己想要的图像&#xff0c;也可以通过纹理加载图片进行渲染。接下来我们来学习一下MVP&#xff0c;这里的MVP不是Android应用开发里的框架MVP&#xff0c;而是Model&#xff0c;View…

TCP/UDP初识

TCP是面向连接的、可靠的、基于字节流的传输层协议。 面向连接&#xff1a;一定是一对一连接&#xff0c;不能像 UDP 协议可以一个主机同时向多个主机发送消息 可靠的&#xff1a;无论的网络链路中出现了怎样的链路变化&#xff0c;TCP 都可以保证一个报文一定能够到达接收端…

鸿蒙harmonyos next flutter混合开发之开发package

​​​​​​ 创建 package flutter create --templatepackage mypackage package代码如下&#xff1a; 创建hello_world.dart ///HelloWorld返回hello world 拼接param class HelloWorld {String helloWorld(String param) > "hello world ${param}"…

Java的学习(语法相关)

字符串存储的问题 char 和字符串都是字符的集合&#xff0c;它们之间的确有相似性&#xff0c;但在 Java 中它们有着不同的存储机制和处理方式。让我从 char 和 String 的本质区别入手来解释。 1. char 和 String 的区别 char 是基本类型&#xff1a;char 是 Java 中的基本数据…

现在别买理想L7/L8,问界M8要来暴揍友商了

文 | AUTO芯球 作者 | 雷慢 问界又一重磅炸弹要来了&#xff0c; 它就是问界M8&#xff0c; 来看&#xff0c;M8刚又曝光了大量谍照。 现在我打听的消息是这样的&#xff0c; 11月广州车展亮相预售&#xff0c; 12月底正式上市&#xff0c;25年春节前后开始交付&#xff…

TS(type,属性修饰符,抽象类,interface)一次性全部总结

目录 1.type 1.基本用法 2.联合类型 3.交叉类型 2.属性修饰符 1.public 属性修饰符 属性的简写形式 2.proteced 属性修饰符 3.private 属性修饰符 4.readonly 属性修饰符 3.抽象类 4.interface 1.定义类结构 2.定义对象结构 3.定义函数结构 4.接口之间的继…

客厅落地台灯怎么摆放?五款客厅落地台灯款式分享

客厅落地台灯怎么摆放&#xff1f;客厅落地台灯是提升光线环境在室内光线质量的关键设备。但如果不慎购买到低质量的客厅落地台灯&#xff0c;可能会导致光线效果不佳&#xff0c;进而影响视力健康。因此&#xff0c;挑选一个可靠的品牌至关重要。那么&#xff0c;客厅落地台灯…

数据治理006-数据标准的管理

元数据的分类和标准有哪些&#xff1f; 一、元数据的分类 元数据可以根据其描述的对象和属性不同&#xff0c;被分为不同的类型。以下是几种常见的元数据分类方法&#xff1a; 基于数据的类型&#xff1a;根据数据的类型&#xff0c;元数据可以被分为结构化元数据、非结构化元…

软件测试——Python和UnitTest框架

文章目录 一、软件测试1.测试计划和测试方案1.测试计划(管理类型文档)2.测试方案(技术型文档) 2.非功能测试设计3.测试报告1.核心内容 4.处理测试过程中出现不可复现的bug 二、Python1.常用语法1.切片2.字符串查找方法&#xff1a;find()3.字符串替换方法&#xff1a;replace()…

构建应用层(TCP)自定义协议:深入理解序列化与反序列化技术

&#x1f351;个人主页&#xff1a;Jupiter. &#x1f680; 所属专栏&#xff1a;Linux从入门到进阶 欢迎大家点赞收藏评论&#x1f60a; 目录 网络版计算器序列化 和 反序列化重新理解 read、write、recv、send 和 tcp 为什么支持全双工自定义协议期望的报文格式 模板方法模式…

开源大数据框架-Ambari+Bigtop如何写metainfo.xml文件

1.如何一键编译&#xff1f;一键安装&#xff1f;你没看错。 &#x1f449;&#x1f449;&#x1f449; https://gitee.com/tt-bigdata/ambari-env 你以为跟你闹着玩&#xff1f;人狠话不多&#x1f64d;‍♂️&#x1f64d;‍♂️&#x1f64d;‍♂️&#xff0c;直接上图&a…

国庆普及模拟2总结

目录 题目链接&#xff1a; 官方题解&#xff1a; 概述&#xff1a; 总结反思&#xff1a; 题目 T1: 题目分析&#xff1a; 错误代码&#xff1a; 错因&#xff1a; &#xff21;&#xff23;代码&#xff1a; T2&#xff1a; 题目分析&#xff1a; 赛时代码&#xf…