MCU-51:单片机串口详解

news2025/1/12 15:44:18

目录

  • 一、计算机通信简介
  • 二、串口通信简介
    • 2.1 同步通信
    • 2.2 异步通信
  • 三、串行通信的传输方式
  • 四、串口通信硬件电路
  • 五、常见接口介绍
  • 六、串口相关寄存器详解
    • 6.1 特殊功能寄存器SCON
    • 6.2 PCON寄存器
    • 6.3 TMOD寄存器
  • 七、代码演示-单片机和电脑通信
    • 7.1 串口向电脑发送数据
    • 7.2 电脑通过串口控制LED
  • 注意:一定要看

一、计算机通信简介

概念:计算机与外部设备或计算机与计算机之间的信息交换。
主要的通信形式有两种:并行通信和串行通信。

**并行通信:**将数据字节的多位用多根数据线连接同时进行传送。
优点:控制简单、传输速度快。
缺点:长距离通信时,成本高且接受方的各位同时接收存在困难。
在这里插入图片描述
**串行通信:**将数据字节分成一位一位的形式在一条传输线上进行数据传输。
优点:传输线少、长距离传输成本低。
缺点:传输控制相对并行困难。
在这里插入图片描述

二、串口通信简介

串口通信可以分为同步通信和异步通信。

2.1 同步通信

同步通信:一种比特同步通信技术,要求发收双方具有同频同相的同步时钟信号,只需在传送报文的最前面附加特定的同步字符,使发收双方建立同步,此后便在同步时钟的控制下逐位发送/接收。

同步通信时要建立发送方时钟对接收方时钟的直接控制,使双方达到完全同步。此时,传输数据的位之间的距离均为“位间隔”的整数倍,同时传送的字符间不留间隙,即保持位同步关系,也保持字符同步关系。发送方对接收方的同步可以通过两种方法实现
在这里插入图片描述

2.2 异步通信

异步通信:异步通信是指通信中两个字符(8位)之间的时间间隔是不固定的,而在一个字符内各位的时间间隔是固定的。

异步通信是以字符(构成的帧)为单位进行传输,字符与字符之间的间隙(时间间隔)是任意的,但每个字符中的各位是以固定的时间传送的,即字符之间不一定有“位间隔”的整数倍的关系,但同一字符内的各位之间的距离均为“位间隔”的整数倍。

通信的发送与接收设备使用格子的时钟控制数据的发送和接受过程。为了使双方的手法协调,要求发送和接收设备的时钟尽可能一致
在这里插入图片描述
异步通信特点:
1.不要求收发双方时钟的严格一致
2.容易实现
3.设备开销较小
4.每个字符需要附加2到3位用于起止位
5.各帧之间还有间隔
6.传输效率不高

三、串行通信的传输方式

传输方式有三种,分别为单工、半双工和全双工
单工:数据传输仅能延一个方向,不能实现反向传输。
半双工:数据传输可以延两个方向,但是需要分时进行(不能同时进行通信)。
全双工:数据可以同时进行双向传输(不需要要分时)。
在这里插入图片描述

四、串口通信硬件电路

1.简单的串口通信有两根通信线(发送端TXD 和 接收端RXD)。
2.TXD 和 RXD 需要交叉连接。
3.当只需要单向传输时,也可以只接一根传输线。
4.当电平标标准不一致时,需要加电平转换芯片。
在这里插入图片描述

五、常见接口介绍

在这里插入图片描述
除此之外还有CAN、USB等。

六、串口相关寄存器详解

51单片机串口通信相关寄存器有SCON、SBUF、PCON、TMOD等

6.1 特殊功能寄存器SCON

SCON:用来设定串行口的工作方式、接受/发送控制以及设置状态指示。
在这里插入图片描述
SM2:多机通讯控制位。在方式0时,SM2一定要等于0。在方式1中,当(SM2)=1则只有接收到有效停止位时,RI才置1。在方式2或方式3当(SM2)=1且接收到的第九位数据RB8=0时,RI才置1。

REN:接收允许控制位。由软件置位以允许接收,又由软件清0来禁止接收。

TB8: 是要发送数据的第9位。在方式2或方式3中,要发送的第9位数据,根据需要由软件置1或清0。例如,可约定作为奇偶校验位,或在多机通讯中作为区别地址帧或数据帧的标志位。

RB8:接收到的数据的第9位。在方式0中不使用RB8。在方式1中,若(SM2)=0,RB8为接收到的停止位。在方式2或方式3中,RB8为接收到的第9位数据。

TI:发送中断标志。在方式0中,第8位发送结束时,由硬件置位。在其它方式的发送停止位前,由硬件置位。TI置位既表示一帧信息发送结束,同时也是申请中断,可根据需要,用软件查询的方法获得数据已发送完毕的信息,或用中断的方式来发送下一个数据。TI必须用软件清0。

RI:接收中断标志位。在方式0,当接收完第8位数据后,由硬件置位。在其它方式中,在接收到停止位的中间时刻由硬件置位(例外情况见于SM2的说明)。RI置位表示一帧数据接收完毕,可用查询的方法获知或者用中断的方法获知。RI也必须用软件清0。

SM1,SM0:串行工作方式:
在这里插入图片描述

6.2 PCON寄存器

注意:改寄存器中只有一位与串行口工作有关
在这里插入图片描述
SMOD:波特率倍增位。在串口工作在方式2、方式3,波特率与SMOD有关。

当SMOD = 1时,波特率提高一倍。
当SMOD = 0时,不加倍。

6.3 TMOD寄存器

在这里插入图片描述
高四位为定时计数器1的设置,低四位是定时计数器0设置,串口通信波特率设置占用定时计数器1,这里主要说串口通信,不过多说定时计数器,只需要设置定时计数器1的工作方式即可

当GATE=1时,“与门”的输出信号K由INTx输入电平和TRx位的状态一起决定(即此时K=TRx·INTx),当且仅当TRx=1,INTx=1(高电平)时,计数启动;否则,计数停止。

当INT0引脚为高电平时且TR0置位,TR0=1;启动定时器T0;

当INT1引脚为高电平时且TR1置位,TR1=1;启动定时器T1。

当GATE=0时,“或门”输出恒为1,“与门”的输出信号K由TRx决定(即此时K=TRx),定时器不受INTx输入电平的影响,由TRx直接控制定时器的启动和停止。

当TR0=1,启动定时器T0。

当TR1=1,启动定时器T1。

C/T:定时器和计数器选择位,0为定时器,1为计数器
在这里插入图片描述

七、代码演示-单片机和电脑通信

7.1 串口向电脑发送数据

#include <REGX52.H>
#include "Delay.h"


unsigned char Sec;

void UART_Init()//4800bps@12.000MHz
{
	SCON=0x40;
	PCON=PCON|0x80;
	TMOD=TMOD&0x0F;//把TM0D的低四位清零,高四位保持不变
	TMOD=TMOD|0x20;//把TM0D的最低位置置1,高四位保持不变
	TL0=0xF3;//设置定时初值
	TH0=0xF3;//设置定时初值
	ET1=0;//禁止定时器1中断
	TR1=1;
}

void UART_SendByte(unsigned char Byte)
{
	SBUF=Byte;
	while(TI==0);
	TI=0;
}

void main()
{ 
	UART_Init();

        while(1)
        {
					UART_SendByte(Sec);
					Sec++;
					Delay(1000);
        
         }
}

7.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>

void UART_Init()//4800bps@12.000MHz
{
	SCON=0x50;
	PCON=PCON|0x80;
	TMOD=TMOD&0x0F;//把TM0D的低四位清零,高四位保持不变
	TMOD=TMOD|0x20;//把TM0D的最低位置置1,高四位保持不变
	TL0=0xF3;//设置定时初值
	TH0=0xF3;//设置定时初值
	ET1=0;//禁止定时器1中断
	TR1=1;
	EA=1;
	ES=1;
}

void UART_SendByte(unsigned char Byte)
{
	SBUF=Byte;
	while(TI==0);
	TI=0;
}

注意:一定要看

千万不要直接复制代码,因为是模块化编写,模块的代码没有往上复制,大家一定要自己动手跟着教学视屏自己大!!!!!

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

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

相关文章

YOLO-V5 算法和代码解析系列(二)—— 【train.py】核心内容

文章目录调试设置整体结构代码解析ModelTrainloader分布式训练FreezeOptimizerSchedulerEMA调试设置 调试平台&#xff1a;Ubuntu&#xff0c;VSCode 调试设置&#xff0c;打开【/home/slam/kxh-1/2DDection/yolov5/.vscode/launch.json】&#xff0c;操作如下图所示&#xff…

GNN基础知识

1. 泰勒公式 背景background 有一个很复杂的方程&#xff0c;我们直接计算方程本身的值可能非常麻烦。 所以我们希望能够找到一个近似的方法来获得一个足够近似的值 本质&#xff1a; 近似&#xff0c;求一个函数的近似值 one point is 近似的方法another point is 近似的…

【Java 数据结构】-优先级队列以及Java对象的比较

作者&#xff1a;学Java的冬瓜 博客主页&#xff1a;☀冬瓜的主页&#x1f319; 专栏&#xff1a;【Java 数据结构】 分享&#xff1a;美妙人生的关键在于你能迷上什么东西。——《球状闪电》 主要内容&#xff1a;优先级队列底层的堆&#xff0c;大堆的创建&#xff0c;插入&a…

Openssl 生成自签名证书

最近在调试Ingress需要使用多份证书&#xff0c;对证书的生成和使用做了简单的整理。 不用翻垃圾桶一条过 #!/bin/sh output_dir"/opt/suops/k8s/ingress-files/certs/fanht-create-ssl/" read -p "Enter your domain [www.example.com]: " DOMAIN echo…

C++11特性-线程

并发 一个程序执行多个独立任务&#xff0c;提高性能 单核cpu是通过(任务切换)&#xff0c;即上下文切换&#xff0c;有时间开销 多核cpu(当核数>任务数)&#xff0c;硬件并发 进程 运行起来的一个可执行程序&#xff08;一段程序的运行过程&#xff09; 资源分配的最小单…

百数应用中心上新了——餐饮门店管理系统

随着智能化时代的来临&#xff0c;传统的餐饮门店管理方式逐渐暴露出缺陷。不少餐饮业的掌门人都纷纷对管理方式进行了转型&#xff0c;由传统模式转变为数字化系统的管理。然而数字化管理方式也没那么容易进行&#xff0c;想要百分百满足需求的系统耗时耗力耗钱&#xff0c;成…

不懂PO 设计模式?这篇实战文带你搞定 PO

1080442 73.1 KB 为UI页面写测试用例时&#xff08;比如web页面&#xff0c;移动端页面&#xff09;&#xff0c;测试用例会存在大量元素和操作细节。当UI变化时&#xff0c;测试用例也要跟着变化&#xff0c; PageObject 很好的解决了这个问题&#xff01; 使用UI自动化测试工…

钉钉 ANR 治理最佳实践 | 定位 ANR 不再雾里看花

作者&#xff1a;姜凡(步定) 本文为《钉钉 ANR 治理最佳实践》系列文章首篇《定位 ANR 不再雾里看花》&#xff0c;主要介绍了钉钉自研的 ANRCanary 通过监控主线程的执行情况&#xff0c;为定位 ANR 问题提供更加丰富的信息。 后续将在第二篇文章中讲述钉钉基于分析算法得出 …

【TuyaOS开发之旅】BK7231N GPIO的简单使用

接口讲解 GPIO初始化 /*** brief gpio 初始化* * param[in] pin_id: 需要初始化的GPIO编号&#xff0c; 对应TUYA_GPIO_NUM_E枚举* param[in] cfg: gpio 配置** return OPRT_OK on success. Others on error, please refer to tuya_error_code.h*/ OPERATE_RET tkl_gpio_ini…

基于SpringBoot工程开发Docker化微服务

目录 1. 微服务容器化治理的优缺点 1.1 微服务容器化的优点 1.2 微服务容器化的缺点 2. 微服务的两种模式 2.1 Microservice SDK 2.2 ServiceMesh 3. 微服务容器化治理的推荐模式 4.Windows下开发容器化微服务&#xff08;非K8S&#xff09; 4.1 开发环境 4.2 代码框架…

全网最新、最详细的使用burpsuite验证码识别绕过爆破教程(2023最新)

1、前沿 最近一直在研究绕过验证码进行爆破的方法&#xff0c;在这里对自己这段时间以来的收获进行一下分享。在这里要分享的绕过验证码爆破的方法一共有2个&#xff0c;分为免费版本&#xff08;如果验证码比较奇怪可能会有识别错误的情况&#xff09;和付费版本&#xff08;…

【Qt】QtCreator远程部署、调试程序

1、添加远程设备 1)QtCreator 工具–> 选项 --> 设备 --> 添加 2)设备设置向导选择–> Generic Linux Device --> 开启向导 3)填写“标识配置的名称”(随便写)、设备IP、用户名 --> 下一步 4)选择配对秘密文件,第一次配对,可以不填写,点击“下一…

嵌入式:ARM嵌入式系统开发流程概述

文章目录嵌入式开发的具体过程开发流程图嵌入式软件开发环境交叉开发环境远程调试结构图嵌入式应用软件开发的基本流程软件模拟环境目标板与评估板嵌入式软件开发的可移植性和可重用性嵌入式开发的具体过程 系统定义与需求分析阶段方案设计阶段详细设计阶段软硬件集成测试阶段…

Tomcat架构分析—— Engine

文章目录一、Tomcat的核心模块&#xff08;核心组件&#xff09;二、Engine 组件1.核心类与依赖图2.核心类源码分析构造函数&#xff1a;初始化方法 init&#xff1a;启动方法 start&#xff1a;3.Engine的启动过程总结一、Tomcat的核心模块&#xff08;核心组件&#xff09; …

机器学习之支持向量机(手推公式版)

文章目录前言1. 间隔与支持向量2. 函数方程描述3. 参数求解3.1 拉格朗日乘数3.2 拉格朗日对偶函数前言 支持向量机(Support(Support(Support VectorVectorVector Machine,SVM)Machine,SVM)Machine,SVM)源于统计学习理论&#xff0c;是一种二分类模型&#xff0c;是机器学习中获…

mysql查询当天,近一周,近一个月,近一年的数据

1.mysql查询当天的数据 select * from table where to_days(时间字段) to_days(now()); 2.mysql查询昨天的数据 select * from table where to_days(now( ) ) - to_days( 时间字段名) < 1 3.mysql查询近一周的数据 SELECT * FROM table WHERE date(时间字段) > D…

MySQL表的创建修改删除

目录 1、表的创建 2、查看表结构 3、表的修改 4、表的删除 1、表的创建 CREATE TABLE table_name ( field1 datatype, field2 datatype, field3 datatype ) character set 字符集 collate 校验规则 engine 存储引擎&#xff1b;说明&#xff1a; field 表示列名 datatype 表…

计算机系统基础实验 - 定点数加减法的机器级表示

实验序号&#xff1a;2 实验名称&#xff1a;定点数加减法的机器级表示 适用专业&#xff1a;软件工程 学 时 数&#xff1a;2学时 一、实验目的 1、掌握定点数加法的机器级表示。 2、掌握定点数减法的机器级表示。 3、掌握EFLAGS中4个牵涉到计算的标志位的计算方法。 4、掌握…

python实现动态柱状图

目录 一.基础柱状图 反转x轴&#xff0c;y轴&#xff0c;设置数值标签在右侧 小结 二.基础时间线柱状图 三.GDP动态柱状图绘制 1.了解列表的sort方法并配合lambda匿名函数完成列表排序 2.完成图表所需数据 3.完成GDP动态图表绘制 添加主题类型 设置动态标题 四.完整代码…

5.6 try语句块和异常处理

文章目录throw表达式(异常检测)try语句块&#xff08;异常处理&#xff09;编写处理代码函数在寻找处理代码的过程中退出标准异常异常是指存在于运行时的反常行为&#xff0c;这些行为超出了函数正常功能的范围。典型的异常包括失去数据库连接以及遇到意外输入等。当程序的某部…