51单片机之串口通讯

1.串口简介

  串口,全称串行通信接口或串行通讯接口(通常指COM接口),是一种常用于电子设备间通讯的全双工扩展接口。
串口通讯的技术基础,指一位一位地按顺序传送数据。其特点是线路简单,只需一对传输线,即可实现双向通信,大大降低成本。串行收发模块是串口的现实载体,负责实现串行通讯,被集成到各种计算机设备中。其中,应用最广的是USART(Universal Synchronous/Asynchronous Receiver/Transmitter)——通用同/异步串行接收/发送器。
  发送设备将并行数据转换为串行数据,在数据字节前发送起始位(逻辑低电平),然后依次发送数据字节的每个Bit(最低位先发送)。数据字节发送完成后,发送设备发送停止位(逻辑高电平)。接收设备检测到起始位后开始接收数据位和停止位,并转换为并行数据输出。
随着单片机系统的广泛应用和计算机网络技术的普及,单片机的通信功能愈来  愈显得重要。在WIFI、蓝牙、GPS、GSM/GPRS等应用的控制无不体现串口通信的重要性。
  本章节将介绍串口收发功能配置方式,开发板上集成了1个串口通信电路,通过USB转串口CH340C模块实现上位机与开发板之间通讯。本串口也是作为程序下载端口。

2.协议特性

  串口通信协议是指规定了数据包的内容,内容包含了起始位、主体数据、校验位及停止位,双方需要约定一致的数据包格式才能正常收发数据的有关规范。常用的协议包括RS-232、RS-422和RS-485等。
  RS-232:用于计算机与外部设备通信的标准串口协议,传输距离短,使用±3到±15V表示逻辑信号。它只限于PC串口和设备间点对点的通信,最远距离是50英尺(约15米)。
  RS-422:使用差分信号,具有更好的抗噪声能力和更远的传输距离。它允许在相同传输线上连接多个接收节点,最多可接10个节点,即一个主设备(Master),其余为从设备(Slave),从设备之间不能通信。
  RS-485:在RS-422基础上增加了多点通信功能,支持多设备连接。它可以实现一主多从的通信结构,总线上可多接到32个设备。

3.串行通讯与并行通讯

  • 串行通讯

  串行通信是指使用一条数据线,将数据一位一位地依次传输,每一位数据占据一个固定的时间长度。其只需要少数几条线就可以在系统间交换信息,特别适用于计算机与计算机、计算机与外设之间的远距离通信。如下图所示:
在这里插入图片描述

  • 并行通讯
      并行通信通常是将数据字节的各位用多条数据线同时进行传送,通常是8位、16位、32位等数据一起传输。如下图所示:
    在这里插入图片描述

4.同步通讯与异步通讯

  • 同步通讯

  同步通讯是一种比特同步通信技术,要求发送方和接收方具有同频同相的同步时钟信号。在数据传输开始时,只需在报文的开头添加特定的同步字符,以便双方建立同步关系。此后,数据将在同步时钟的控制下逐位进行发送和接收。
  同步通讯需要严格的时序要求,依赖于共享的时钟信号来协调数据的传输。数据在同步时钟的控制下逐位发送和接收,具有较高的数据传输速率。
  同步通讯通常采用阻塞式方式,即发送方在发送数据后会阻塞,等待接收方的响应。这种方式由于数据在同一时间进行发送和接收,延迟较小,因此非常适合实时应用。
  同步通讯适用于高速数据传输和实时控制系统,如传感器接口(I2C协议)、显示屏数据传输(SPI协议)等。
在这里插入图片描述

  • 异步通讯

  异步通讯是一种不需要共享时钟信号的通信模式。发送方和接收方之间没有严格的时序要求,可以独立进行操作,而无需等待对方的响应。数据一旦在发送方准备好,就可以立即发送,接收方在收到数据后进行处理。
  异步通讯:对时序的要求较低,不需要共享时钟信号,允许在不同时刻发送和接收数据。字符之间的时间间隔可以是任意的,但字符内各位的时间间隔是固定的。需要在每个字符的开始和结束处添加标志(开始位和停止位),以确保接收方能够正确接收每个字符。
  异步通讯发送方可以在任何时刻开始发送字符,接收方在收到数据后进行处理,并通过回调机制通知发送方发送的字符已经得到了确认。
  异步通讯适用于长距离通信和低速数据传输的应用,如串口通信(UART协议)、远程数据传输等。
在这里插入图片描述

5.通讯波特率

  衡量通信性能的一个非常重要的参数就是通信速率,通常以比特率(Bitrate)来表示。比特率是每秒钟传输二进制代码的位数,单位是:位/秒(bps)。如每秒钟传送240个字符,帧格式为1位起始位+8位数据位+1位停止位,即传输一个字符需要10位数据。这时的比特率为:

10位×240个/秒 = 2400bps

6.串口相关寄存器

在这里插入图片描述

6.1 串口控制寄存器SCON

  地址:0x98 可位寻址
在这里插入图片描述
在这里插入图片描述

6.2 电源控制寄存器PCON

  地址:0x87 不可位寻址
在这里插入图片描述
在这里插入图片描述

6.3 串口数据寄存器SBUF

  地址:0x99
  STC89xx系列单片机的串行口缓冲寄存器(SBUF)的地址是99H,实际是2个缓冲器,写SBUF的操作完成待发送数据的加载,读SBUF的操作可获得已接收到的数据。两个操作分别对应两个不同的寄存器,1个是只写寄存器,1个是只读寄存器。
  串行通道内设有数据寄存器。在所有的串行通信方式中,在写入SBUF信号的控制下,把数据装入相同的9位移位寄存器,前面8位为数据字节,其最低位为移位寄存器的输出位。根据不同的工作方式会自动将“1”或TB8的值装入移位寄存器的第9位,并进行发送。
  串行通道的接收寄存器是一个输入移位寄存器。在方式0时它的字长为8位,其他方式时为9位。当一帧接收完毕,移位寄存器中的数据字节装入串行数据缓冲器SBUF中,其第9位则装入SCON寄存器中的RB8位。如果由于SM2使得已接收到的数据无效时,RB8和SBUF中内容不变。
  由于接收通道内设有输入移位寄存器和SBUF缓冲器,从而能使一帧接收完将数据由移位寄存器装入SBUF后,可立即开始接收下一帧信息,主机应在该帧接收结束前从SBUF缓冲器中将数据取走,否则前一帧数据将丢失。SBUF以并行方式送往内部数据总线。

7.软件设计

  配置串口工作模式为方式1,设置波特率为9600,使能串口接收中断。串口初始化代码如下:

void USART_Init(void)//设置波特率为9600
{
  PCON=0x80;//波特率加倍
  SCON=0x50;//设置串口为工作方式1
  TMOD|=0x20;//设置定时器1为工作方式2:8位自动重装载
  //波特率
  TH1=0xFA;
  TL1=0xFA;
  //开启中断
  ES=1;//串口中断
  EA=1;//总中断
  TR1=1;//使能串口1
}

  串口中断服务函数如下:

void usart_irq(void) interrupt 4
{
  u8 dat;
  RI=0;//清除标志位
  dat=SBUF;//读取数据
  SBUF=dat;
  while(TI==0){}//等待发送完成
    TI=0;
}

  串口发送数据函数:

void USART_SendCha(u8 cha)
{
  ES=0;//串口中断
  TI=0;
  SBUF=cha;
  while(TI==0){}//等待发送完成
  TI=0;
  ES=1;//串口中断
}
/*串口发送数据*/
void USART_Sendstr(u8 *dat)
{
  while(*dat)
  {
    USART_SendCha(*dat++);
    Delay_Us(3);
  }
}

  主函数

#include "main.h"
#include "delay.h"
#include "key/key.h"
#include "TIMER/timer.h"
#include "usart/usart.h"
sbit BEEP=P2^5;
void BEEP_Ctl(u16 time)
{
  if(time<=0)return ;
  while(time--)
  {
    BEEP=!BEEP;
    Delay_Us(50);//频率2~5KHZ
  }
}

int main()
{
  u8 i=0;
  u8 key;
  char buffer[10];
  u8 *str="12345";
  u8 cnt=100;
  key_Init();
  LED=0xFF;//关闭所有LED
  //Timer0_Init(0xFBC3);
  Timer0_Init(164);
  USART_Init();//串口初始化
  USART_Sendstr("51单片机 串口初始化完成\r\n");
  USART_Sendstr(buffer);
  while(1)
  {
    key=Key_GetValue();
    if(key)
    {     
      BEEP_Ctl(100);
      Delay_Ms(20);
      BEEP_Ctl(0);
      LED=~LED;
    }
	}	
}

在这里插入图片描述

   注意:串口发送数据时需要将串口中断关闭,发送完成在开启。

8.串口通讯波特率计算

   以方式1为例,方式1(SM1 SM0=01),8bit USART可变波特率,波特率加倍(SMOD=1),设置波特率为9600,计算方式如下:

波特率=(2SMOD/32)*定时器T1溢出率
9600=(2/32)*T1溢出率; T1溢出率=153600

   定时器工作在12T,溢出率计算如下:

溢出率=(sysclk/12)/(256-TH1)
153600=((11.0592*1000000)/12)/(256-TH1)
TH1=250=0xFA

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

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

相关文章

UE5 DownloadImage加载jpg失败的解决方法

DownloadImage加载jpg失败的解决方法 现象解决方案具体方法 现象 用UE自带的 DownloadImage 无法下载成功&#xff0c;从 failure 引脚出来。 接入一个由监控器自动保存起的图像&#xff0c;有些可以正常加载成功&#xff0c;有些无法加载成功。 经调查问题出现在&#xff0c;…

Springboot 整合 Java DL4J 搭建智能问答系统

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家&#xff0c;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/literature?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;…

相较于发达国家约70%的普及率,中国【台式洗碗机】渗透率仅在2%-3%之间,潜在市场增量可观

内容摘要 据 HengCe 最新调研&#xff0c;2023年中国台式洗碗机市场销售收入达到了 万元&#xff0c;预计2030年可以达到 万元&#xff0c;2024-2030期间年复合增长率(CAGR)为 %。本研究项目旨在梳理台式洗碗机领域产品系列&#xff0c;洞悉行业特点、市场存量空间及增量空间&…

自动语音识别(ASR)与文本转语音(TTS)技术的应用与发展

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

基于python的机器学习(四)—— 聚类(一)

目录 一、聚类的原理与实现 1.1 聚类的概念和类型 1.2 如何度量距离 1.2.1 数据的类型 1.2.2 连续型数据的距离度量方法 1.2.3 离散型数据的距离度量方法 1.3 聚类的基本步骤 二、层次聚类算法 2.1 算法原理和实例 2.2 算法的Sklearn实现 2.2.1 层次聚类法的可视化实…

算法知识-12-指针

概念 指针是一个变量&#xff0c;它存储的是另一个变量的内存地址。 基础使用指针 //声明 int* ptr; // 声明一个指向 int 类型的指针 //初始化 int num 5; int* ptr2 &num; // 使 ptr2 指向 num 的地址 //访问值 cout << *ptr2; // 输出 ptr2 所指向的 num …

图像上显示中文文本 - python 实现

该示例是在图像上显示中文文本&#xff0c;并用opencv的显示方式显示。 注意&#xff1a;SimHei.ttf&#xff08;黑体字体&#xff09;为字体文件&#xff0c;Windows 默认字体路径&#xff1a;C:/Windows/Fonts/SimHei.ttf 具体实现代码如下&#xff1a; # -*-coding:utf-8…

uniapp rpx兼容平板

问题: 使用uniapp开发平板端时, rpx/upx 内容过小, 没有适应屏幕 原因: uniapp 默认支持最大设备宽度为960px 而平板宽度超出了960 uniapp官方文档https://uniapp.dcloud.io/collocation/pages?idglobalstyle 解决: // pages.json 文件&#xff1a; {//..."globalSt…

【隐私计算大模型】联邦深度学习之拆分学习Split learning原理及安全风险、应对措施以及在大模型联合训练中的应用案例

Tips&#xff1a;在两方场景下&#xff0c;设计的安全算法&#xff0c;如果存在信息不对等性&#xff0c;那么信息获得更多的一方可以有概率对另一方实施安全性攻击。 1. 拆分学习原理 本文介绍了一种适用于隐私计算场景的深度学习实现方案——拆分学习&#xff0c;又称分割…

Java函数式编程基础之【Optional类】详解

一、概述 Optional 是 Java 8 引入的新特性&#xff0c;它是一种特殊的包装类&#xff0c;里面只存储一个元素&#xff08;这一点与基本数据类型的包装类有点相似&#xff09;。有的文档称其为容器类&#xff0c;但它不同于 Conllection框架中的集合类&#xff0c;它一个容器只…

stm32与ht7038的项目

最近做了一个stm32与ht7038的数据采集项目 硬件包含太阳能充电电路 ht7038采集芯片电路 buck电路 stm32最小系统电路和lora模块电路 硬件PCB如下图所示 ht7038的程序如下所示ht7038.c #include "ht7038.h" #include "stm32l0xx_hal_spi.h"typedef uint8…

AbsPlus框架介绍2

ABSPlus框架以其集成的多功能性在市场上脱颖而出。它不仅提供美观且符合主流风格的页面设计&#xff0c;还支持灵活的流程配置&#xff0c;包括算法处理流程和页面审批流程。在众多业务系统中&#xff0c;流程管理往往是核心且复杂的挑战&#xff0c;涉及数据库设计、页面开发以…

springboot基于微信小程序的食堂预约点餐系统

摘 要 基于微信小程序的食堂预约点餐系统是一种服务于学校和企事业单位食堂的智能化解决方案&#xff0c;旨在提高食堂就餐的效率、缓解排队压力&#xff0c;并优化用户的就餐体验。系统作为一种现代化的解决方案&#xff0c;为食堂管理和用户就餐提供了便捷高效的途径。它不仅…

免费的视频混剪综合处理工具介绍与下载

免费的视频混剪综合处理工具 软件截图 功能 支持&#xff1a; 这个软件主要用于视频的批量处理&#xff0c;包括添加水印、裁剪、画中画、去水印、去头尾、变速、文本和背景音乐等功能。以下是界面中一些主要功能的介绍&#xff1a; 视频队列&#xff1a;显示当前待处理的视…

2024年亚太数学建模竞赛问题C宠物产业及相关产业发展分析与对策

随着人们消费理念的发展&#xff0c;随着经济的快速发展和人均收入的提高&#xff0c;宠物产业作为一个新兴产业在全球范围内逐渐积聚势头。1992年&#xff0c;中国小动物保护协会成立&#xff0c;随后1993年&#xff0c;皇家狗狗、玛氏等国际宠物品牌进入中国市场。随着“宠物…

如何默认VS2019用管理员方式打开

1.通过快捷方式找到“Visual Studio 2019”所在文件夹。 2.继续在"Visual Studio 2019"右键菜单&#xff0c;打开“devenv.exe”所在文件夹。 3.在“devenv.exe”右键菜单&#xff0c;选择“兼容性疑难解答”。 4.选择“疑难解答程序”。 5.选择勾选“该程序需要附加…

鸿蒙UI开发与部分布局

UI开发 1. 布局概述 1.1 开发流程 1.先确定开发流程 -> 2.分析页面元素构成 ->3.选用合适的布局容器组件 1.3 布局元素组成&#xff1a;盒模型 2.1 布局分类 2.1 线性布局 线性布局是开发中最常用、最基础的布局&#xff0c;通过线性容器Row和Column构建 2.1.1 线性布…

Python中Tushare(金融数据库)入门详解

文章目录 Python中Tushare&#xff08;金融数据库&#xff09;入门详解一、引言二、安装与注册1、安装Tushare2、注册与获取Token 三、Tushare基本使用1、设置Token2、获取数据2.1、获取股票基础信息2.2、获取交易日历2.3、获取A股日线行情2.4、获取沪股通和深股通成份股2.5、获…

性能优化(二):ANR

介绍 ANR全称Application Not Responding&#xff0c;意思就是程序未响应。如果一个应用无法响应用户的输入&#xff0c;系统就会弹出一个ANR对话框&#xff0c;用户可以自行选择继续等待亦或者是停止当前程序。 Android系统会监控程序的响应状况&#xff0c;一旦出现下面情况…

神经网络问题之:梯度不稳定

梯度不稳定是深度学习中&#xff0c;特别是在训练深度神经网络时常见的一个问题&#xff0c;其本质涉及多个方面。 一、根本原因 梯度不稳定问题的根本原因在于深度神经网络的结构和训练过程中的一些固有特性。随着网络层数的增加&#xff0c;梯度在反向传播过程中会逐层累积变…