51单片机编程应用(C语言):串口通信

目录

通信的基本概念和种类

   1.1串行通信与并行通信

​编辑

1.2同步通信与异步通信

1.3单工,半双工,全双工  

1.4通信速率 

二、波特率和比特率的关系

串口通信简介:

1.接口标准

RS-232

2、D型9针接口定义

3.通信协议:

2.串口内部结构 

51单片机串口相关寄存器 

 1.80c51串行口的控制寄存器

2.串口的使用方法 

串口实验 

1.单片机向电脑发送数据。

 2.电脑通过串口控制LED(且把数据传回电脑串口显示)


通信的基本概念和种类

   1.1串行通信与并行通信

什么是数据通信:数据通信就是指单片机与单片机之间或者单片机和其他设备之间的信息交换

而数据通信又分为串行通信并行通信

1.串行通信:

  • 串行通信:一位一位的按顺序的进行发送或接收的通信方式。优点是需要的传输线少,成本低。缺点是传输的速率慢,适合远距离的数据通信。

  • 并行通信:数据的各位同时进行发送或接收的通信方式。优点是速率高。缺点是需要的传输线多,成本高,只适合近距离的数据通信。

1.2同步通信与异步通信

同步通信与异步通信:简单来说就是发送方和接收方按照同一个时钟节拍工作就叫同步,发送方和接收方没有统一的时钟节拍,而各自按照自己的节拍工作就叫异步。

比如  烽火台      和            狼烟

(同步)

烽火台按照规定的时间发,比如7:00发一次,7:30发一次。

看狼烟的人也按规定的时间去接收,7:00看一次有没有狼烟,7:30看一次有没有狼烟。

7;05分敌人进攻了,烽火台也不会发生狼烟。看狼烟的人也不会接收到。

(异步)

烽火台按照规定的时间发,比如7:00发一次,7:05发一次。5分钟一次发

比如7:04分敌人进攻了,烽火台要到7:05发烽火,不会7:04发烽火

看狼烟的人2分钟看一下有没有狼烟。7:04看了没有狼烟,7:06才会去看

所以看狼烟的人7:06分才接受到有敌人进攻的消息。

同步通信中,通信双方按照同一节拍工作,配合很好:一般需要发送方给接收方发送信息同时发送时钟信息。接收方根据发送方给自己的时钟信号来安排自己的节奏。下图所示,时钟就是节拍。规定好的时间,计算机乙接收了节拍,就知道多少分钟拿一次数据。

同步通信用在双方信息交换频率固定,或者经常通信时。

优点:配合十分好       劣势:多了一个通讯线,专门发时钟的。

异步通信: 又叫异步通知,在双方通信频率不固定时适合,(有时3ms收发一次,有时3天才发一次),这样就不适合使用同步通信而适合异步通信。

因为另外一个CPU要眼盯着你发送,有时长时间一个都不发,有时发一堆,没有规律,这样就浪费了接收方自己的很多时间。比如,看狼烟的人不可能一直盯着天空看,有没有狼烟,这样浪费了他很多时间。他自己也是有活干的。

再举个例子,两个人聊天,一个人说,你陪我说句话吧,那个人说,好,结果,你看到QQ有消息,回QQ消息回了3小时,那个人眼盯着你回消息回三个小时,一直等你说那句话,这样他肯定会很生气。自己3小时啥都没干,所以这就是异步通信的好处。如果是异步通信,你就会说,兄弟,我现在有点忙,你先忙你的,等我忙忘了,再来找你。

异步通信时接收方不必一直在意接收方,发送方需要发送信息时会首先给接收方一个信息开始的起始信号,接收方接收到起始信号后。就认为后面紧跟着的是有效信息。才会开始注意接收信息,直到收到发送方发来的结束标志。

举例子,还是你跟一个人说一句话,这是你来电话了,你跟那个人说,你先忙你的,等你打完电话,这是你拍了拍他(发生起始信号),那个人就会转头,让你把那句话说完,你说,OK,没事了(发送结束标志),那个人就继续干自己的事。

 异步通信特点:  不要求收发双方时钟的严格一致,实现容易,设备开销较小,但每个字符要附加2~3位用于起止位,各帧之间还有间隔,因此传输效率不高。

1.3单工,半双工,全双工  

单工:只能单个方向传输。(相当于广播)单工是指数据传输仅能沿一个方向,不能实现反向传输。

 半双工(分时)(相当于对讲机)半双工是指数据传输可以沿两个方向,但是需要分时进行。

 全双工 (可以同时)(相当于电话) 全双工是指数据可以同时进行双向传输。

所以每一个通信方式在这三种都要进行选择,当然每一个芯片都有自己的设定方式。

1.4通信速率 

 也叫比特率:衡量通信速度的快慢。

  比特率是每秒钟传输二进制代码的位数,单位是:位 / 秒(bps)。比如每秒钟传送240个字符,而每个字符格式包括10位(1个起始位,1个停止位,8个数据位),这时的比特率为:

10位 x 240个/秒 = 2400 bps

波特率:可以看成比特率。是每秒钟传输多少个码元,

 码元:在通信系统中,携带数据信息的信号单元称为码元,也称为符号(symbol)

比如0V,同二进制0,5V同二进制1,所以一个码元等于二进制的比特位,可以存储0或1.

此时波特率等于比特率

0V,2V,4V,6V,分别用二进制00 01 10 11 表示的话,8个比特,4个码元,所以波特率等于比特率一半。

 举例说明:日常生活中乘坐公共交通工具出行,每个人就是一个比特,公共交通工具就是码元,单位时间的发车数量就是波特率,单位时间运输的人数就是比特率 。

在串口通信中,每秒发送的比特(0或1)是波特率,每秒钟发送的bit数为比特率。 所以,通常情况下,波特率等于比特率

二、波特率和比特率的关系

由此可以得出,假设码元状态为N,则此码元所需要的比特位数如下:

频谱带宽:频谱带宽其实是通信信号的最高频率和最低频率的差值。信号的波特率越高,在通信信道中传输此信号时,占用的通信信道频谱宽度就越大。比如在运输系统中,车型越大,行车占用的道路宽度就越大。

受硬件芯片处理速度的限制,为提升比特率,可通过提升波特率以及单个码元比特位数,进而提升比特率。此外,通信系统还要求设备芯片波特率≥信号波特率 ,通常芯片波特率有45GB、 69GB、 96GB、 128GB。如果所设计的信号波特率大于设备芯片波特率,则说明此信号是无法实现的,因为没芯片可以支持此信号的产生。

同时根据香农定理和经验,信号所需的频谱宽度数值应大于信号波特率的1.2倍,才能保证信号可以被高质量传输。在不考虑其它影响传输的因素,我们可以根据香农定理和经验,粗略算出波特率与所需频谱带宽的关系。

在主机和从机传输信号的过程中,主机和从机需要设置相同的波特率,否则会出现数据传输乱码现象或者数据传输失败现象。

串口通信简介:

1.接口标准

什么是串口:串口,全称为串行接口(Serial Port),是一种计算机通信接口,主要用于连接计算机和其他外部设备,如键盘、鼠标、打印机等。串口通过串行通信的方式工作,这意味着数据是以位(bit)为单位依次发送的。这种通信方式的一个显著特点是可以使用简单的双绞线实现双向通信,这在成本降低方面非常有用,尤其适合于长距离通信。尽管串口的速度相对较慢,但它提供了可靠的数据传输和低成本的解决方案,因此在许多应用中仍然被广泛使用。

串口是一种接线标准,他的接口一定要一致,如下图:

串口通信遵循特定的通信协议,这些协议定义了数据位的位数、波特率、校验位和停止位等参数。不同的串口技术,如通用异步收发器(UART)、TTL电平转换和RS-232/RS-485,虽然它们的电气特性可能有所不同,但它们都遵循相似的通信时序协议,因此都可以统称为串口。

总结来说,串口是一种使用串行通信技术的物理接口,提供了一种低成本且易于使用的数据传输方法,广泛应用于各种外设产品和数据采集系统中。

我们举个例子:

RS-232

RS-232接口符合美国电子工业联盟(EIA)制定的串行数据通信的接口标准,全双工,其中 RS 为英文 “Recomend Standard” 的缩写,中文翻译为“推荐标准”,232为标识号。原始编号全称是EIA-RS-232(简称232,RS232)。它被广泛用于计算机串行接口外设连接,连接电缆和机械、电气特性、信号功能及传送过程,其输出的电平称为 RS232 电平。

1、RS-232电平逻辑
RS-232不同于TTL的电平逻辑,为负逻辑,最简单的RS232通信由三条数据线组成,即 TxD、RxD 和GND。负12V代表高电平,即-15V ~ -3V为逻辑1,正12V代表低电平,即+3V ~ +15V为逻辑0,电压也有标准范围。这里的电平,是TXD线(或者RXD线)相对于 GND 的电压。

2、D型9针接口定义

记住一点,这种接口的协议只有两种:RS-232和RS-485。不会是TTL电平的(除非特殊应用)。

一般用的最多的是RXD、TXD、GND,三个信号。9针如上图右所示。

引脚功能图如下:

通常我们在串口通信只会用2 3 7脚D25模式下 

3.通信协议:

串行通信是一种概念,是指一个bit一个bit的收发数据,相对于并行通信可一次性可以同时收发n个bit而言。包括普通的串口通信,包括IIC,包括SPI等等。串口通信是一种通信手段/方式,是相对于以太网方式、红外方式、蓝牙方式、usb方式(usb广义也算串行通信)等而言,是一种比较低级的通信手段。

了解各种通信还需要多去实验,后面我会主要介绍几种常用的通信协议。

2.串口内部结构 

51单片机串口相关寄存器 

 1.80c51串行口的控制寄存器

    △ SM2,多机通信控制位,主要用于方式2和方式3。当接收机的SM2=1时可以利用收到的RB8来控制是否激活RI(RB8=0时不激活RI,收到的信息丢弃;RB8=1时收到的数据进入SBUF,并激活RI,进而在中断服务中将数据从SBUF读走)。当SM2=0时,不论收到的RB8为0和1,均可以使收到的数据进入SBUF,并激活RI(即此时RB8不具有控制RI激活的功能)。通过控制SM2,可以实现多机通信。 在方式0时,SM2必须是0。在方式1时,如果SM2=1,则只有接收到有效停止位时,RI才置1。

 △ REN,允许串行接收位。由软件置REN=1,则启动串行口接收数据;若软件置REN=0,则禁止接收

    △ TB8,在方式2或方式3中,是发送数据的第九位,可以用软件规定其作用。可以用作数据的奇偶校验位,或在多机通信中,作为地址帧/数据帧的标志位。在方式0和方式1中,该位未用。

 △ RB8, 在方式2或者方式3中,是接收到数据的第九位,作为奇偶校验位或地址帧/数据帧的标志位。在方式1时,若SM2=0,则RB8是接收到的停止位。

  △ TI,发送中断标志位。在方式0时,当串行发送第8位数据结束时,或在其它方式,串行发送停止位的开始时,由内部硬件使TI置1,向CPU发中断申请。在中断服务程序中,必须用软件将其清0,取消此中断申请。

  △ RI,接收中断标志位。在方式0时,当串行接收第8位数据结束时,或在其它方式,串行接收停止位的中间时,由内部硬件使RI置1,向CPU发中断申请。也必须在中断服务程序中,用软件将其清0,取消此中断申请。

2.串口的使用方法 

 

根据自己需要按步骤来设置。 

串口实验 

发送和接收都“可以”触发中断,只是在发送的时候中断允许没有打开,所以“不会”发生中断。至于为什么发送的时候为什么不打开中断允许,看个人需要。(个人理解,错了指正)

为什么串口发电脑不要中断,串口接收电脑要中断

因为发送之后不需要单片机做什么,接受的时候需要单片机来记录下数据

4.只要RI>=1或者TI>=1就会触发串口中断。前提是程序打开了总中断和串口中断。

此时发送和接受都触发了中断,而且我们打开了中断,所以我们要区分(串口发电脑我们没有打开总的中断)

1.首先和内部结构有关,要结合串口通信内部结构来理解。

2.有数据发送过来,RI和TI会由硬件自动置1.

1.单片机向电脑发送数据。

写在while循环外面就要按复位键,不然一直停止while循环里面

下面是代码:完成单片机每次向电脑发送递增的数据(16进制)

这里没有用中断,定时器一只是可以计数,这样有溢出来产生波特率

#include <REGX52.H>
#include "Delay.h"unsigned char  Sec;void UART_Init(void)		//4800bps@11.0592MHz
{PCON |= 0x80;		//使能波特率倍速位SMODSCON = 0x40;		//8位数据,可变波特率   REN接收使能没打开TMOD &= 0x0F;		//设置定时器模式TMOD |= 0x20;		//设置定时器模式TL1 = 0xF4;		//设置定时初始值TH1 = 0xF4;		//设置定时重载值ET1 = 0;		//禁止定时器%d中断TR1 = 1;		//定时器1开始计时
}void UART_sendByte(unsigned char Byte)
{SBUF=Byte;while(TI==0);TI=0;
}void  main()
{UART_Init();//UART_sendByte(0x11);while (1){UART_sendByte(Sec);Sec++;Delay(1000);}
}

 2.电脑通过串口控制LED(且把数据传回电脑串口显示)

用的是串口中断。无法知道电脑什么时候发送,如果电脑发送数据了,触发串口中断,在中断中处理数据

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;}
}

UART.c

#include <REGX52.H>/*** @brief  串口初始化    4800bps@11.0592MHz* @param  无* @retval 无*/
void UART_Init(void)		
{PCON |= 0x80;		//使能波特率倍速位SMODSCON = 0x50;		//8位数据,可变波特率TMOD &= 0x0F;		//设置定时器模式TMOD |= 0x20;		//设置定时器模式TL1 = 0xF4;		//设置定时初始值TH1 = 0xF4;		//设置定时重载值ET1 = 0;		//禁止定时器%d中断TR1 = 1;		//定时器1开始计时EA=1;           //使用打开中断ES=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);
void UART_sendByte(unsigned char Byte);#endif

波特率计算方式,hex模式和文本模式区别听P20 47分钟后面 。

 

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

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

相关文章

嵌入式系统的前景:未来智能汽车

&#xff08;本文为简单介绍&#xff0c;个人的观点仅供参考&#xff09; 智能汽车时代已经来临!未来十年,我们的汽车将变得越来越智能化。各大汽车公司在研发自动驾驶技术,目标是实现真正的无人驾驶。要实现这一目标,嵌入式系统将发挥关键作用。 简单来说,嵌入式系统就是在汽…

【Make编译控制 01】程序编译与执行

目录 一、编译原理概述 二、编译过程分析 三、编译动静态库 四、执行过程分析 一、编译原理概述 make&#xff1a; 一个GCC工具程序&#xff0c;它会读 makefile 脚本来确定程序中的哪个部分需要编译和连接&#xff0c;然后发布必要的命令。它读出的脚本&#xff08;叫做 …

AcWing 1240 完全二叉树的权值(双指针)

[题目概述] 给定一棵包含 N 个节点的完全二叉树&#xff0c;树上每个节点都有一个权值&#xff0c;按从上到下、从左到右的顺序依次是 A 1 , A 2 , ⋅ ⋅ ⋅ A N A_1,A_2,⋅⋅⋅A_N A1​,A2​,⋅⋅⋅AN​&#xff0c;如下图所示&#xff1a; 现在小明要把相同深度的节点的权值…

算法竞赛进阶指南——搜索

树与图的遍历 可达性统计 #include<iostream> #include<cstring> #include<bitset> using namespace std; const int N 3e4 10; int h[N], e[N], ne[N], idx; //链式向前星 int q[N], hh, tt -1; //队列 int r[N], a[N]; //r是入度&#xff0c;a是拓扑序…

VitePress-13- 配置-title的作用详解

作用描述 1、title 是当前站点的标题&#xff1b;2、默认值是 &#xff1a;VitePress&#xff1b;3、当使用默认主题时&#xff0c;会直接展示在 页面的【导航条】中&#xff1b;4、一个特殊的作用 &#xff1a; 会作为单个页面的默认标题后缀&#xff01;除非又指定了【title…

一文彻底搞懂Kafka如何保证消息不丢失

文章目录 1. kafka 架构2. producer端是如何保证数据不丢失的2.1 同步发送2.2 异步发送2.3 批量发送 3. consumer端是如何保证数据不丢失的3.1 手动提交3.2 幂等性消费 4. broker端是如何保证数据不丢失的4.1 副本机制4.2 ISR机制4.3 刷盘机制 1. kafka 架构 Producer&#xff…

【从Python基础到深度学习】6. IPython使用PyCharm代码调试与使用PEP

一、IPython交互式shell Python的解释器如今有多个语言的实现&#xff0c;包括: CPython ——官方版本的c语言实现 ython ——可以运行在Java平台 IronPython ——可以运行在.NET和Mono平台PyPy —— Python实现的&#xff0c;支持JIT即时编译 1.PyCharm中 2.Ubuntu终端中 s…

一、基础算法之排序、二分、高精度、前缀和与差分、双指针算法、位运算、离散化、区间合并内容。

1.快速排序 算法思想&#xff1a;选择基准元素&#xff0c;比基准元素小的放左边&#xff0c;比基准元素大的放右边。每趟至少一个元素排好。 每一趟实现步骤&#xff1a; low>high&#xff0c;返回&#xff0c;排序完成选取基准元素xa[low],ilow,jhigh当i<j时&#x…

【人工智能】文本嵌入:向量存储与数据查询的智慧交织(12)

在当今信息激增的时代&#xff0c;将中文存储到向量数据库&#xff08;如Redis等&#xff09;并实现向量检索&#xff0c;正成为解决日常应用中文信息处理难题的关键利器。这项技术不仅赋予计算机对中文语义的理解能力&#xff0c;更让我们能够以更智能、高效的方式处理和检索中…

机器学习2---逻辑回归(基础准备)

逻辑回归是基于线性回归是直线分的也可以做多分类 ## 数学基础 import numpy as np np.pi # 三角函数 np.sin() np.cos() np.tan() # 指数 y3**x # 对数 np.log10(10) np.log2(2) np.e np.log(np.e) #ln(e)# 对数运算 # log(AB) log(A) logB np.log(3*4)np.log(3)np.log(4) #…

【MySQL】-12 MySQL索引(上篇MySQL索引类型前置-2-高性能的索引策略)

MySQL索引-高性能的索引策略 3 高性能的索引策略3.1 独立的列3.2 前缀索引和索引选择性3.3 多列索引3.4 选择合适的索引列顺序3.5 聚簇索引(Clustered Indexes)3.5.1 InnoDB和MyISAM的数据布局的比较3.5.2 按primary key的顺序插入行(InnoDB) 3.6 覆盖索引(Covering Indexes)3.…

【深度学习】: 脑部MRI图像分割

清华大学驭风计划课程链接 学堂在线 - 精品在线课程学习平台 (xuetangx.com) 代码和报告均为本人自己实现&#xff08;实验满分&#xff09;&#xff0c;只展示主要任务实验结果&#xff0c;如果需要详细的实验报告或者代码可以私聊博主&#xff0c;接实验技术指导1对1 有任…

QT入门-信号与槽

1.QT基本框架 #include "myWindow.h"#include <QApplication>int main(int argc, char *argv[]) {QApplication a(argc, argv);myWindow w;w.show();return a.exec(); } QApplicata&#xff1a;应用程序对象&#xff0c;必须有且只能有一个 Qwidget&#xff1…

Python入门:常用模块—os模块及sys模块

os模块 sys模块 import sys print(sys.argv) # 命令参数list&#xff0c;第一个元素是程序本身路径 print(sys.exit()) # 退出程序&#xff0c;正常退出是exit(0) print(sys.version) # 获取python解释程序的版本信息 print(sys.maxint()) # 最大…

【开源】JAVA+Vue.js实现衣物搭配系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、研究内容2.1 衣物档案模块2.2 衣物搭配模块2.3 衣物收藏模块 三、系统设计3.1 用例设计3.2 E-R图设计3.3 数据库设计3.3.1 衣物档案表3.3.2 衣物搭配表3.3.3 衣物收藏表 四、系统实现4.1 登录页4.2 衣物档案模块4.3 衣物搭配模块4.4…

Zustand:简化状态管理的现代React状态库

Zustand&#xff1a;简化状态管理的现代React状态库 Zustand是一个用于管理状态的现代React状态库。它提供了简洁、可扩展和高效的状态管理解决方案&#xff0c;使得在React应用中处理复杂的状态逻辑变得更加容易和直观。本文将介绍Zustand的主要特点、使用方法以及它在React开…

Zabbix6.x配置中文界面 解决乱码问题

Zabbix6.x配置中文界面 解决乱码问题 Zabbix6.x界面无法选择中文&#xff0c;通过安装语言包解决。后面也解决了zabbix6中文方块&#xff08;乱码&#xff09;问题。 配置中文语言包 系统中默认没有携带中文语言包&#xff0c;可以通过以下命令查看 localectl list-locales #…

STM32CubeMX,定时器之定时功能,入门学习,如何设置prescaler,以及timer计算PWM输入捕获方法(重要)

频率变小&#xff0c;周期变长 1&#xff0c;参考链接&#xff08;重要&#xff09; STM32CubeMX——定时器之定时功能&#xff08;学习使用timer定时器的设置&#xff09; STM32测量PWM信息&#xff08;学习使用设置pwm输入捕获&#xff09; 通用定时器中两个重要参数的设置心…

计算机网络——04接入网和物理媒体

接入网和物理媒体 接入网络和物理媒体 怎样将端系统和边缘路由器连接&#xff1f; 住宅接入网络单位接入网络&#xff08;学校、公司&#xff09;无线接入网络 住宅接入&#xff1a;modem 将上网数据调制加载到音频信号上&#xff0c;在电话线上传输&#xff0c;在局端将其…

自己动手打包element UI官方手册文档教程

经常用element ui朋友开发的比较郁闷&#xff0c;官方文档网基本上都是打不开的&#xff0c; 官方&#xff1a;https://element.eleme.io/ 一直打不开&#xff0c;分析下是里面用的cdn链接ssl证书无效。 就想着自己搭建一个element UI文档 自己搭建的&#xff1a; Element文档网…