单片机之串口通信

目录

串口介绍

通信的基本概念

并行通信和串行通信

同步通信和异步通信

串行异步通信方式

串行同步通信方式

通信协议

单片机常见通信接口

串行通信三种模式

串口参数

传输速度

​串口的连接

电平标准

串行口的组成

串口数据缓冲寄存器

串行口控制寄存器

串口工作方式 

电源控制寄存器

单片机内部串口模式图

波特率发生器

T1初值的设定

fosc采用11.0592MHz的原因

晶振频率和波特率初值对照表

串行口的初始化编程

串口通信案例

keil文件

串口介绍

  • 串口是一种应用十分广泛的通信接口,串口成本低,容易使用,通信线路简单,可实现两个设备的互相通信。
  • 单片机的串口可以使单片机与单片机、单片机与电脑、单片机与各式各样的模块的相互通信,极大的拓展了单片机的应用范围,增强了单片机系统的硬实力
  • 51单片机内部自带UART(通用异步收发器)可实现单片机的串口通信

通信的基本概念

含义:通信就是两个设备之间进行的数据传输。

并行通信和串行通信

  • 并行通信:在同一时刻,可以传输多个bit位的信号,有多少信号位就需要多少根信号线。
  • 串行通信:同一时刻只能传输一个bit位的信号,只需要一根信号线。

注意:

  • 并行通信的传输速率比串行通信块,但是稳定性不如串行通信好。
  • 并行传输要传输8位数据需要8根线,串行传输仅需要1根
  • 并行结合传输快的特点多用于板子内部,串行多用于板子外部

同步通信和异步通信

前言:串行通信按信息的格式又可以分为异步通信和同步通信两种方式。

串行异步通信方式

理解:异步通信是指数据传送按位发送,基本以一个字符为单位,字符与字符之间的传送是完全异步的,一个字符中位与位之间的传送基本上是同步的。

注意:异步通信要求双方要有相同的传输速度(波特率)才可以通信。 

串行同步通信方式

理解:同步通信是指数据传送以数据块(一组字符)为单位,字符与字符之间,字符内部的位与位之间都同步。(时钟同步)

注意:同步通信过程中双方都要有时钟引脚,双方的2个时钟clk引脚是连在一起的,通信时由主机传送时钟信号提供同步脉冲,双方要根据这个时钟信号来确定发送或接收每个位,确保数据传输时完全同步。

通信协议

前言:沟通的双方需要遵守一套既定的规则,这就是通信的协议。

  • 硬件层协议:硬件层面是指设备的物理结构和接口,包括了连接线、接口类型、信号电平等。这些因素决定了设备之间如何进行物理连接,以及如何传输和接收数据。
  • 软件层协议:软件层面是指设备上的操作系统和应用程序规范,它们负责管理和控制设备的硬件资源,以及实现与其他设备的通信。

注意:

  • 硬件层协议和软件协议之间要相互配合工作;比如要使用Motobus RTU协议,那硬件接口就要使用RS232或者485等。
  • 单片机与计算机两边设备通信协议不统一,一边是USB,另一边UART;这样就不能直接对接因此需要加上CH340芯片进行翻译
  • CH340的作用就是把计算机传到USB口的数据信号通过一定的转换传到单片机UART串口的TXD和RXD引脚;如此单片机的CPU就能解读计算机传过来的数据了

单片机常见通信接口

注意:

  • 此外还有CAN、USB等接口。
  • 同步传输的都带有时钟信号线,SCL、SCLK

串行通信三种模式

  • 单工通信:在一个信道内信号只能往一个方向传输,任何时候都不能改变信号的传输方向
  • 半双工:在一个信道内信号可以双向传输,但必须是交替进行,同一个时间只能往一个方向传输
  • 全双工:一个信道同一时间允许双向进行数据的传输

注意:MCS-51单片机具有一个异步全双工UART串口,可以同时发送、接受数据,发送,接收数据可通过查询或中断方式处理,使用十分灵活。

串口参数

  • 波特率:串口通信的速度(发送和接收各数据位的间隔时间)
  • 检验位:用于数据验证
  • 停止位:用于数据帧间隔

注意:

  • 9位数据格式中,最后一位为校检位。
  • 串口通信为串行通信,也就是数据位是一个个的发出去,先发低位后发高位(若有校验位也会发校检位),最后跟个停止位

传输速度

  • 波特率:单位时间内传输了多少码元;单片机中采用二进制码元,因此码元就是0或1,所以可以理解——波特率是指串行通信中,单位时间内传输了多少二进制位数,单位bps。
  • 比特率:每秒传输了多少二进制位数
  • 码元:数据传输过程中等时出现的符号
  • 在单片机中,波特率和比特率代表的意义相同,但在其他领域不一定相同。

波特率(bps)=一个字符的二进制位数*字符个数/秒

总结:

  • 每秒传送200个字符,每个字符1位起始位,8个数据位,1个校检位和1个停止位。则波特率为2200bps。
  • 波特率越大,传输速度越快;但是每个芯片都有它能运行的最大波特率,超过了则反应不过来。所以对于同一个芯片,其波特率越大传输速度越快,但是也使得传错率增大。

​串口的连接

  • 简单双向串口通信有两根通信线(发送端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(差分信号)

串行口的组成

  • MCS-51单片机串行口主要由发送数据寄存器、发送控制器、输出控制门、接收数据寄存器、接收控制器、输入移位寄存器组成。
  • 从用户使用的角度,它由三个特殊功能寄存器组成:发送数据寄存器和接收数据寄存器合起用一个特殊功能寄存器SBUF(串行口数据寄存器)串行口控制寄存器SCON电源控制寄存器PCON

串口数据缓冲寄存器

SBUF:物理上是两个独立的寄存器(读和写有各自的缓冲寄存器),但是占用相同的地址。写操作时,写入的是发送寄存器,读操作时,读出的是接收寄存器(两者不会冲突)。

串行口控制寄存器

  • SM0和SM1:串行口工作方式选择位,用于选择4种工作方式。
  • SM2:用于多机通信,当需要多机通信时,该标志位置一
  • REN:是否允许单片机进行接收,当需要单片机进行接收时,该位置1否则置0
  • TB8和RB8分别表示发送和接受的第九位,当我们配置方式2和方式3的这种工作方式时,我们需要配置该位
  • TI和RI为发送和接受的中断标志位,TI为发送标志位,RI为接收标志位(这两位不会自动清零,需要我们手动清零)

串口工作方式 

  • 方式0:称为同步移位寄存器方式,一般用于外接移位寄存器芯片扩展IO接口
  • 方式1:8位异步通信方式,通常用于双机通信
  • 方式2和方式3:9位的异步通信方式,通常用于多机通信

电源控制寄存器

注意:当SMOD位为1时,波特率加倍。

单片机内部串口模式图

理解:单片机与电脑发送异步串口数据的时候,需要规定发送和接受的速度,也就是波特率,电脑可以通过串口助手设定波特率,而单片机设定波特率就需要设定T1;相对于单片机来说,它发送数据首先要将数据写入SBUF中,当发送完成后TI会置1,引发串口中断进而执行对应的操作;当单片机接收外部发送的数据,那么就会先将外部数据缓存至SBUF中,当接收完成后RI位会置1引发接收中断,进而我们可以在接收中断函数中读取SBUF的接收内容。

注意:

  • TI:表示发送是否完成标志位,当TI=1时表示发送完成,TI=0时表示还未发送
  • RI:表示接收是否完成标志位,当RI=1时表示接收完成,RI=0时表示还未接收
  • 当发送或接收完成后,若中断允许标志位打开,则会发送串口中断请求进入中断服务
  • TI和RI这两个标志位需要手动清零

波特率发生器

前言:异步通信没有统一的时钟信号保证同步,那么为了确保数据传输正确;要求通信双方的波特率(传输速度)设置必须相同。计算机的串口调试助手可以很简单的设置波特率,但是单片机也需要用相同的波特率进而保证数据传输的正确。

51提供了一个专门的波特率发生器——T1;我们想要使用9600的波特率就是想串口在传输数据的时候每1/9600s能接收或发送一位二进制数;因此只需要每1/9600s告诉串口一下要接收或发送数据;波特率发生器就可以根据我们设置的时间进行提示;我们进而可以根据1/9600s来设置T1的初值;然后启动TR1按照定时器的工作原理,他将在每次定时时间到的时候溢出进而实现了波特率发生器的功能。

注意:

  • 51默认的波特率发生器就是定时器T1,而且必须使用工作方式2(因为其具有重置初值的功能,给T1赋予了波特率发生器的功能,那么他就具有了溢出后通知串口的功能,且能自动清除溢出标志位)
  • 编程时不能开启T1的中断,也不用编写T1的中断服务程序(需要开启串口中断,编写串口中断程序)

T1初值的设定

若我们想要使用9600的波特率,首先我们看UART结构图,我们想要使用的波特率他还会进行分频(/2和/16)因此我们想要使用9600波特率,我们需要以9600*2*16的波特率(307200)来算,那么我们就希望每1/307200s初值寄存器溢出一次;;因为我们必须用T1的方式2,所以初值为256-1000000/307200/(12/fosc)

fosc采用11.0592MHz的原因

总结:由此我们可以看到,若11.0592MHz频率的晶振可以获得比较精确的9600波特率;而12MHz频率的晶振就有偏差;因此计算机用9600波特率和单片机串口通信就会有传错率。

晶振频率和波特率初值对照表

串行口的初始化编程

串行口控制寄存器SCON位的确定

  • 根据工作方式确定SM0、SM1位
  • 方式2和方式3确定SM2位
  • 若是接收端,则置允许接收位REN为1
  • 方式2和方式3发送数据,则应将发送数据的第九位写入TB8中

设置波特率

  • 方式0:不需要对波特率进行设置
  • 方式2:设置波特率仅需对PCON中的SMOD位进行设置
  • 方式1和方式3,设置初值

开启中断以及波特率发生器 

执行中断程序

串口通信案例

前言:

  • 需求:利用串口助手发送数据的方式,控制P2各个LED灯的亮灭,同时在串口助手展示向单片机发送的数据。
  • 显示接收和发送两个部分,接收采用接收中断的行式来接收数据,当接收到数据以后我们将接收到的数据发回到上位机。
  • 注意:电脑和单片机的波特率调成9600MHz,选对对应的串口,当进行调试时打开串口。

keil文件

#include <regx52.h>
unsigned char dat=0,flag=0;
void initscon(){SCON=0x50; //8位异步通信方式,允许接收数据TMOD=0x20; //配置波特率发生器T1,工作方式为2TH1=0xFD; //重置TL1TL1=0xFD; //设置初值(晶振:12MHz;波特率:9600bps)ES=1;	//开启串口中断EA=1;	//开启总中断TR1=1;	//打开波特率发生器T1
}
void main(){initscon();while(1){if(flag){SBUF=dat; //向串口助手发送数据flag=0;}}
}
void scon_isr() interrupt 4
{if(TI){TI=0; //数据发送完清TI}if(RI){RI=0;dat=SBUF;	//接收串口助手发送的值switch(dat){case 1:P2_0=~P2_0;break;case 2:P2_1=~P2_1;break;case 3:P2_2=~P2_2;break;case 4:P2_3=~P2_3;break;case 5:P2_4=~P2_4;break;case 6:P2_5=~P2_5;break;case 7:P2_6=~P2_6;break;case 8:P2_7=~P2_7;break;default:P2=0xff;}flag=1;}
}

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

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

相关文章

MTK8781安卓核心板_MT8781(Helio G99)核心板性能参数

MT8781安卓核心板搭载了八核CPU&#xff0c;其中包括两个主频高达2.2GHz的高性能Arm Cortex-A76处理器。这一处理器采用了台积电6纳米级芯片生产工艺&#xff0c;以及先进的3D图形功能的高性能Arm Mali G57级GPU。通过超快LPDDR4X内存和UFS 2.2存储供电&#xff0c;不仅提高了游…

【设计模式】中介者模式的应用

文章目录 1.概述2.中介者模式的适用场景2.1.用户界面事件2.2.分布式架构多模块通信 3.总结 1.概述 中介者模式&#xff08;Mediator Pattern&#xff09;是一种行为型设计模式&#xff0c;它用于解决对象间复杂、过度耦合的问题。当多个对象&#xff08;一般是两个以上的对象&…

|行业洞察·汽车|《2024新能源汽车行业及营销趋势报告-20页》

报告的主要内容解读&#xff1a; 新能源汽车行业概述及品牌分布&#xff1a; 近年来&#xff0c;中国新能源汽车销量增速高&#xff0c;市场占有率快速提升&#xff0c;成为汽车行业的重要增量。新能源汽车消费者趋向年轻化、女性化和高端化&#xff0c;对高科技、新体验有较高…

Android Studio控制台输出中文乱码问题

控制台乱码现象 安卓在调试阶段&#xff0c;需要查看app运行时的输出信息、出错提示信息。 乱码&#xff0c;会极大的阻碍开发者前进的信心&#xff0c;不能及时的根据提示信息定位问题&#xff0c;因此我们需要查看没有乱码的打印信息。 解决步骤&#xff1a; step1: 找到st…

STM32看似无法唤醒的一种异常现象分析

1. 引言 STM32 G0 系列产品具有丰富的外设和强大的处理性能以及良好的低功耗特性&#xff0c;被广泛用于各类工业产品中&#xff0c;包括一些需要低功耗需求的应用。 2. 问题描述 用户使用 STM32G0B1 作为汽车多媒体音响控制器的控制芯片&#xff0c;用来作为收音机频道存贮…

【漏洞复现】chatgpt pictureproxy.php SSRF漏洞(CVE-2024-27564)

0x01 漏洞概述 ChatGPT pictureproxy.php接口存在服务器端请求伪造 漏洞&#xff08;SSRF&#xff09; &#xff0c;未授权的攻击者可以通过将构建的 URL 注入 url参数来强制应用程序发出任意请求。 0x02 测绘语句 fofa: icon_hash"-1999760920" 0x03 漏洞复现 G…

云渲染中途停止渲染会保存渲染结果吗?

在数字创作领域&#xff0c;云渲染已经逐渐成为了设计师们常用的渲染工具。然而&#xff0c;很多对云渲染功能不熟的用户来说&#xff0c;一些基础的操作疑问仍然困扰着他们。例如&#xff0c;自己用的云渲染中途停止渲染会不会保存渲染结果&#xff1f; 关于这个问题&#xf…

前后端分离开发【Yapi平台】【Swagger注解自动生成接口文档平台】

前后端分离开发 介绍开发流程Yapi&#xff08;api接口文档编写平台&#xff09;介绍 Swagger使用方式1). 导入knife4j的maven坐标2). 导入knife4j相关配置类3). 设置静态资源映射4). 在LoginCheckFilter中设置不需要处理的请求路径 查看接口文档常用注解注解介绍 当前项目中&am…

洲际酒店集团持续夯实领航之势 以新高度、新策略、新方向助推行业高质量发展

“ 旅、遇&#xff0c;正当时”&#xff0c;洲际酒店集团大中华区酒店巡展圆满落幕 2024年3月28日&#xff0c;中国上海 —— 作为最早进入中国市场的国际酒店管理集团之一&#xff0c;洲际酒店集团坚守“在中国&#xff0c;为中国”的承诺&#xff0c;以行业领跑者之势&#…

22.计算机中的数据存储

文章目录 一、计算机中的数据存储二、十进制1、十进制加法2、十进制减法 三、什么是二进制&#xff1f;二进制的运算过程 四、常见的进制五、计算机为什么要用二进制存储数据&#xff1f;六、进制之间的转换1、任意进制转十进制1&#xff09;二进制101转十进制8421快速转换法 2…

《QT实用小工具·一》电池电量组件

1、概述 项目源码放在文章末尾 本项目实现了一个电池电量控件&#xff0c;包含如下功能&#xff1a; 可设置电池电量&#xff0c;动态切换电池电量变化。可设置电池电量警戒值。可设置电池电量正常颜色和报警颜色。可设置边框渐变颜色。可设置电量变化时每次移动的步长。可设置…

Qlib-Server:量化库数据服务器

Qlib-Server:量化库数据服务器 介绍 Qlib-Server 是 Qlib 的配套服务器系统,它利用 Qlib 进行基本计算,并提供广泛的服务器系统和缓存机制。通过 Qlib-Server,可以以集中的方式管理 Qlib 提供的数据。 框架 Qlib 的客户端/服务器框架基于 WebSocket 构建,这是因为 WebS…

免费翻译pdf格式论文

进入谷歌翻译网址https://translate.google.com/?slauto&tlzh-CN&opdocs 将需要全文翻译的pdf放进去 选择英文到中文&#xff0c;然后点击翻译 可以选择打开译文或者下载译文&#xff0c;下载译文会下载到电脑上&#xff0c;打开译文会在浏览器打开。

Redis命令-List命令

4.6 Redis命令-List命令 Redis中的List类型与Java中的LinkedList类似&#xff0c;可以看做是一个双向链表结构。既可以支持正向检索和也可以支持反向检索。 特征也与LinkedList类似&#xff1a; 有序元素可以重复插入和删除快查询速度一般 常用来存储一个有序数据&#xff…

element-ui autocomplete 组件源码分享

紧接着 input 组件的源码&#xff0c;分享带输入建议的 autocomplete 组件&#xff0c;在 element-ui 官方文档上&#xff0c;没有这个组件的 api 目录&#xff0c;它的 api 是和 input 组件的 api 在一起的&#xff0c;看完源码之后发现&#xff0c;源码当中 autocomplete 组件…

图片标注编辑平台搭建系列教程(3)——画布拖拽、缩放实现

简介 标注平台很关键的一点&#xff0c;对于整个图片为底图的画布&#xff0c;需要支持缩放、拖拽&#xff0c;并且无论画布位置在哪里&#xff0c;大小如何&#xff0c;所有绘制的点、线、面的坐标都是相对于图片左上角的&#xff0c;并且&#xff0c;拖拽、缩放&#xff0c;…

远程技术支持软件方案如何帮助一线客服提升效率?

远程控制在企业远程技术支持体系中&#xff0c;是非常主流的方案&#xff0c;而优秀的远程控制方案本身&#xff0c;就可以非常直观的帮助一线技术支持员工提升效率&#xff0c;降低时间与人力成本&#xff0c;其中向日葵技术支持解决方案就是很好的例子&#xff0c;这里我们来…

厨余垃圾处理设备工业监控PLC连接APP小程序智能软硬件开发之功能原理篇

接着上一篇《厨余垃圾处理设备工业监控PLC连接APP小程序智能软硬件开发之功能结构篇》继续总结一下厨余垃圾处理设备智能软硬件统的原理。所有的软硬件系统全是自己一人独自开发&#xff0c;看法和角度难免有局限性。希望抛砖引玉&#xff0c;将该智能软硬件系统分享给更多有类…

FPGA结构与片上资源

文章目录 0.总览1.可配置逻辑块CLB1.1 6输入查找表&#xff08;LUT6&#xff09;1.2 选择器&#xff08;MUX&#xff09;1.3 进位链&#xff08;Carry Chain&#xff09;1.4 触发器&#xff08;Flip-Flop&#xff09; 2.可编程I/O单元2.1 I/O物理级2.2 I/O逻辑级 3.布线资源4.其…

【STM32CubeMX(3)】GPIO上拉输入——读取按键状态

通过本节可以学习到&#xff1a; 如何在CubeMX配置上拉输入什么是上拉输入如何读取一个GPIO的输入状态 软件环境&#xff1a; STM32CubeMX version6.10.0 Keil_v5&#xff08;MDK-ARM&#xff09; version 5.32 硬件环境&#xff1a; STM32F103C8T6最小系统板&#xff08;…