【51单片机】串口(江科大)

8.1串口通信

1.串口介绍

在这里插入图片描述

2.硬件电路

在这里插入图片描述

3.电平标准

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

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

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

4.常见通信接口

在这里插入图片描述
补充:相关术语(具体可在计算机网络或通信原理中学习)

·全双工:通信双方可以在同一时刻互相传输数据

·半双工:通信双方可以互相传输数据,但必须分时复用一根数据线(在同一时刻只能单向传输)

·单工:通信只能有一方发送到另一方,不能反向传输

·异步:通信双方各自约定通信速率(没有时钟线)

·同步:通信双方靠一根时钟线来约定通信速率

·总线:连接各个设备的数据传输线路(类似于一条马路,把路边各住户连接起来,使住户可以相互交流)

5.51单片机的UART

在这里插入图片描述

6.串口参数即时序图

· 波特率:串口通信的速率(发送和接收各数据位的间隔时间)
· 检验位:用于数据验证
· 停止位:用于数据帧间隔
在这里插入图片描述

7.串口模式图

在这里插入图片描述
SBUF: 串口数据缓存寄存器,物理上是两个独立的寄存器,但占用相同的地址。写操作时,写入的是发送寄存器,读操作时,读出的是接收寄存器

当要发送数据时,数据从总线传输到SBUF,通过控制门传输到TXD,将数据发送出去,控制门是一些控制逻辑电路,不用关心,发送数据由发送控制器来进行控制。接收数据时,数据从RXD接收到,通过接收控制器将数据送到移位寄存器,再送到SBUF。接收数据是由中断来进行的,数据传输速率由中间的逻辑电路(定时器1)来控制(波特率)

8.串口和中断系统

在这里插入图片描述

9.串口相关寄存器

在这里插入图片描述

8.2串口向电脑发送数据

1.配置寄存器

(1)SCON
在这里插入图片描述
该单片机使用模式一,8位UART
SMO/FE用于帧错误检测,8为UART不需要,所以SMO/FE=0
在这里插入图片描述

SM0=0,SM1=1
在这里插入图片描述
因为只有方式1,所以SM2不用管,配为0

REN:允许/禁止串行接收控制位。由软件置位REN,即REN=1允许串行接收状态,可启动串行接收器RxD,开始接收信息。软件复位REN,即REN=0,则禁止接收。此时不需要,先给0

TB8:在方式2或方式3,它为要发送的第9位数据,按需要由软件置位或清0。
RB8:在方式2或方式3,是接收到的第9位数据。
方式1不需要,所以TB8=0,RB8=0

TI:发送中断请求标志位。在方式0,当串行发送数据第8位结束时,由内部硬件自动置位,即TI=1,向主机请求中断,响应中断后必须用软件复位,即TI=0。在其他方式中,则在停止位开始发送时由内部硬件置位,必须用软件复位。
RI:接收中断请求标志位。在方式0,当串行接收到第8位结束时由内部硬件自动置位RI=1,向主机请求中断,响应中断后必须用软件复位,即RI=0。在其他方式中,串行接收到停止位的中间时刻由内部硬件置位,即RI=1(例外情况见SM2说明),必须由软件复位,即RI=0。
初始化配置TI=0,RI=0
在这里插入图片描述
综上SCON=0x40;
(2)SBUF
SBUF为接收发送寄存器,初始化不需要配置
(3)PCON
在这里插入图片描述
(4)IE,IPH,IP,SADEN,SADDR都不需要配置

2.配置定时器

在这里插入图片描述

在这里插入图片描述
所以TMOD &= 0x0F; TMOD |= 0x20;

3.定时器初值

定时器初值与波特率有关,可以用STC-ISP软件生成波特率,完成串口的配置

本单片机是11.0592MHz的频率,没有误差,所以在直接就用9600波特率,不需要波特率倍速来减小误差
在这里插入图片描述

SCON先改为0x40

STC89C52没有AUXR这个寄存器,直接将那两行删除就行

定时器1只用作波特率发生器,不需要其产生中断,故与中断相关的配置就不需要了

main.c

#include <REGX52.H>
#include "Delay.h"
#include "UART.h"unsigned char Sec;void main()
{UART_Init();			//串口初始化while(1){UART_SendByte(Sec);	//串口发送一个字节Sec++;				//Sec自增Delay(1000);		//延时1秒}
}

UART.c

#include <REGX52.H>/*** @brief  串口初始化,9600bps@11.0592MHz* @param  无* @retval 无*/
void UART_Init()
{SCON=0x40;PCON &=0x7F;TMOD &= 0x0F;		//设置定时器模式TMOD |= 0x20;		//设置定时器模式TL1 = 0xFD;		//设定定时初值TH1 = 0xFD;		//设定定时器重装值ET1 = 0;		//禁止定时器1中断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

按下复位键,看见接收缓冲区收到数据,说明发送数据成功
在这里插入图片描述

8.3电脑通过串口控制LED

该实验需要接收数据,故SCON的REN位为1,SCON改为0x50

接收数据需要中断才能进行,所以需要中断使能(这个中断是串口中断,不是定时器1中断)
UART.c

#include <REGX52.H>/*** @brief  串口初始化,9600bps@11.0592MHz* @param  无* @retval 无*/
void UART_Init()
{SCON=0x50;PCON |= 0x7F;TMOD &= 0x0F;		//设置定时器模式TMOD |= 0x20;		//设置定时器模式TL1 = 0xFD;		//设定定时初值TH1 = 0xFD;		//设定定时器重装值ET1 = 0;		//禁止定时器1中断TR1 = 1;		//启动定时器1EA=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;}
}
*/

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)					//如果接收标志位为1,接收到了数据{P2=~SBUF;				//读取数据,取反后输出到LEDUART_SendByte(SBUF);	//将受到的数据发回串口RI=0;					//接收标志位清0}
}

补充:数据显示模式
·HEX模式/十六进制模式/二进制模式:以原始数据的形式显示

·文本模式/字符模式:以原始数据编码(ASCII码)后的形式显示

例如,发送数据为HEX模式,接收数据为文本模式,发送数据30则接收到0,因为数字0对应的ASCII码为0x30

发送数据为文本模式,接收数据为HEX模式,发送数据A则接收到41,因为A对应的ASCII码为0x41

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

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

相关文章

【QT+QGIS跨平台编译】之三十六:【RasterLite2+Qt跨平台编译】(一套代码、一套框架,跨平台编译)

文章目录 一、RasterLite2介绍二、文件下载三、文件分析四、pro文件五、编译实践一、RasterLite2介绍 RasterLite2是一个开源的轻量级栅格数据库,可以用于存储和管理各种类型的栅格数据,包括卫星遥感图像、数字高程模型等。 与传统的GIS数据存储方式不同,RasterLite2采用基…

React18原理: 时间分片技术选择

渲染1w个节点的不同方式 1 &#xff09;案例1&#xff1a;一次渲染1w个节点 <div idroot><div><script type"text/javascript">function randomHexColor() {return "#" ("0000" (Math.random() * 0x1000000 << 0).toS…

「计算机网络」物理层

物理层的基本概念 物理层的作用&#xff1a;尽可能屏蔽掉不同传输媒体和通信手段的差异物理层规程&#xff1a;用于物理层的协议主要任务&#xff1a;确定与传输媒体的接口有关的一些特性 机械特性电器特性功能特性过程特性 数据通信的基础知识 数据通信系统的模型 划分为…

【深蓝学院】移动机器人运动规划--第4章 动力学约束下的运动规划--作业

文章目录 1. T11.1 题目1.2 求解1.3 Pontryagin Minimum Principle 的拓展 2. T22.1 题目2.2 求解 3. Reference 1. T1 1.1 题目 1.2 求解 1.3 Pontryagin Minimum Principle 的拓展 2. T2 2.1 题目 2.2 求解 Listing1&#xff1a; demo_node.cpp/trajectoryLibrary() for(i…

蓝桥杯-X图形

问题描述 给定一个字母矩阵。一个 X 图形由中心点和由中心点向四个 45度斜线方向引出的直线段组成&#xff0c;四条线段的长度相同&#xff0c;而且四条线段上的字母和中心点的字母相同。 一个 X 图形可以使用三个整数 r,c,L 来描述&#xff0c;其中 r,c 表示中心点位于第 r 行…

LOL全英文界面

文章目录 前言.bat 前言 对于需要学英文的同学们来说, 玩起lol来 ,有全部界面文字都是英文. 那真是很酷对于那些改配置还不起作用的玩家来说, 我只告诉你们, 只需要写一个.bat文件, 当然我的lol是日服版. 抗日起来是非常 cool .bat 只有两行 pushd "K:\Program Files (…

Spring Security 弃用 WebSecurityConfigurerAdapter 重写登录接口 前后端分离 返回json数据格式

springboot 版本高于 2.7 之后 弃用了 WebSecurityConfigurerAdapter 推荐使用组件化配置安全组件。 原版本的2.7版本的登录接口 功能&#xff1a; 通过/api/doLogin 进行登录 package cn.devops.config;import cn.devops.model.User; import cn.devops.response.RespBe…

nginx命名location跳转的模块上下文继承

目录 1. 缘起2. 解决方案2.1 保留指定模块的上下文信息2.2 获取指定模块的上下文信息2.3 设置指定模块的上下文信息2.4 设置模块上下文是否需要继承标记2.5 对openrety lua代码的支持 1. 缘起 nginx提供了非常棒的功能&#xff0c;命名location&#xff0c;如文章nginx的locati…

理解JAVA EE设计模式

理解JAVA EE设计模式 在Web应用程序的设计和开发阶段,开发人员在开发类似的项目时可能会遇到相似的问题。每名开发人员可能会遇到的问题找出不同或相似的解决方案。但是,这导致一些时间和精力浪费在为相似的问题寻找解决方案上。因此,要啊节省时间和精力,需要记录常见问题…

Vulnhub靶场 DC-9

目录 一、环境搭建 二、信息收集 1、主机发现 2、指纹识别 三、漏洞复现 1、dirsearch目录探测 2、sqlmap注入测试 3、文件包含漏洞 4、Knockd敲门服务 5、ssh爆破 ​​​​​​​6、提权 四、提取flag 一、环境搭建 Vulnhub靶机下载&#xff1a; 官网地址&#xff1a;https://…

红队打靶练习:Alfa:1

下载连接点击此处即可&#xff01; 目录 信息收集 1、arp 2、nmap 3、gobuster WEB web信息收集 FTP登录 smaba服务 crunch密码生成 提权 系统信息收集 权限提升 信息收集 1、arp ┌──(root㉿ru)-[~/kali] └─# arp-scan -l Interface: eth0, type: EN10MB, …

消息中间件面试篇

消息中间件 RabbitMQ 消息不丢失 可能导致消息丢失的情况&#xff1a; 生产者发送消息丢失消息队列宕机消费者服务宕机&#xff0c;未接收到消息 生产者确认机制 该机制解决了生产者发送消息有可能丢失的问题。 RabbitMQ提供了publisher confirm机制来避免消息发送到MQ过程…

Unity下使用Sqlite

sqlite和access类似是文件形式的数据库&#xff0c;不需要安装任何服务&#xff0c;可以存储数据&#xff0c;使用起来还是挺方便的。 首先需要安装DLL 需要的DLL 我们找到下面两个文件放入Plugins目录 Mono.Data.Sqlite.dll System.Data.dll DLL文件位于Unity的安装目录下的…

「MySQL」事务

简介 定义&#xff1a;事务是一组操作的集合&#xff0c;它是一个不可分割的工作单位&#xff0c;事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求&#xff0c;即这些操作要么同时成功&#xff0c;要么同时失败 基本操作 方式1 查看/设置事务提交方式 select…

LeetCode、1143. 最长公共子序列【中等,二维DP】

文章目录 前言LeetCode、1143. 最长公共子序列【中等&#xff0c;二维DP】题目链接与分类思路2022年暑假学习思路及题解二维DP解决 资料获取 前言 博主介绍&#xff1a;✌目前全网粉丝2W&#xff0c;csdn博客专家、Java领域优质创作者&#xff0c;博客之星、阿里云平台优质作者…

Day32 贪心算法part02

买卖股票的最佳时机 太牛了我&#xff0c;随随便便双指针秒杀 md题解里面双指针都没用直接for循环秒杀 跳跃游戏 写成这样纯粹是没有看到第一次跳跃必须从第一个开始 class Solution:def canJump(self, nums: List[int]) -> bool:if len(nums) 1:return Truefor i in …

autojs自动化刷视频脚本

视频展示 视频 //悬浮窗 // var window floaty.rawWindow( // <frame gravity"center" bg"#ff00ff"> // <button id"action" w"300dp" h"300dp"> // 按钮 // </button> // </fram…

python+django咖啡网上商城网站

全网站共设计首页、咖啡文化、咖啡商城、个人信息、联系我们5个栏目以及登录、注册界面&#xff0c;让用户能够全面的了解中国咖啡咖啡文化宣传网站以及一些咖啡知识、文化。 栏目一首页&#xff0c;主要放置咖啡的起源及发展进程的图文介绍&#xff1b;栏目二咖啡文化&#xf…

第三百二十三回

文章目录 1. 概念介绍2. 使用方法2.1 基本用法2.2 缓冲原理 3. 示例代码4. 内容总结 我们在上一章回中介绍了"FadeInImage组件"相关的内容&#xff0c;本章回中将介绍CachedNetworkImage组件.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1. 概念介绍 我们在本章…

Linux-Vim的使用,快速入门Vim,Linux入门教程,精讲Linux

Vim的三种模式 输入模式&#xff0c;键入 i 或 a 或 o 都可以进入输入模式。 普通模式&#xff0c;打开Vim默认的模式。 命令模式&#xff0c;键入 : 进入命令模式。 注意&#xff1a;按下 ESC 可以从输入模式或命令模式退回到普通模式 退出 vim &#xff0c;需要在普通模式下…