51单片机的串口通信

串口通信

本文主要涉及51单片机的串口以及串口通信,包括串口控制寄存器的设置以及波特率的计算方法等。

文章目录

  • 串口通信
    • 一、 串行通信与并行通信
    • 二、 单工、半双工与全双工通信
    • 三、 单片机串口介绍
      • (1)串口控制寄存器 SCON
      • (2)电源控制寄存器 PCON
    • 四、 串口的使用
      • 4.1 如何计算波特率
      • 4.2 配置

一、 串行通信与并行通信

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

串行通信的特点:传输线少,长距离传送时成本低,且可以利用电话网等现成的设备,但数据的传送控制比并行通信复杂。

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

并行通信的特点:控制简单、传输速度快;由于传输线较多,长距离传送时成本高且接收方的各位同时接收存在困难,抗干扰能力差。

二、 单工、半双工与全双工通信

(1)单工通信
单工是指数据传输仅能沿一个方向,不能实现反向传输。如下图所示
在这里插入图片描述

(2)半双工通信
半双工是指数据传输可以沿两个方向,但需要分时进行。如下图所示:
在这里插入图片描述

(3)全双工通信
全双工是指数据可以同时进行双向传输。如下图所示:
在这里插入图片描述

三、 单片机串口介绍

串口通信(Serial Communication),是指外设和计算机间通过数据信号线、地线等按位进行传输数据的一种通信方式,属于串行通信方式。串口是一种接口标准,它规定了接口的电气标准,没有规定接口插件电缆以及使用的协议。

串口通信中还需要注意的是,串口数据收发线要交叉连接,计算机的 TXD要对应单片机的 RXD,计算机的 RXD 要对应单片机的 TXD,并且共 GND,如下图
在这里插入图片描述

(1)串口控制寄存器 SCON

在这里插入图片描述

SM0 和 SM1 为工作方式选择位:
在这里插入图片描述

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,可以实现多机通信。

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

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

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

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

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

(2)电源控制寄存器 PCON

在这里插入图片描述

SMOD:波特率倍增位。
在串口方式 1、方式 2、方式 3 时,波特率与 SMOD 有关,当 SMOD=1 时,波特率提高一倍。复位时,SMOD=0。

PCON不能进行位寻址

四、 串口的使用

4.1 如何计算波特率

方式 0 的波特率 = fosc/12
方式 2 的波特率 =(2^SMOD/64)· fosc
方式 1 的波特率 =(2^SMOD/32)·(T1 溢出率)
方式 3 的波特率 =(2^SMOD/32)·(T1 溢出率)
其中 T1 溢出率 = fosc /{12×[256 -(TH1)]}

4.2 配置

①确定 T1 的工作方式(TMOD 寄存器);
②确定串口工作方式(SCON 寄存器);
③计算 T1 的初值(设定波特率),装载 TH1、TL1;
④启动 T1(TCON 中的 TR1 位);
⑤如果使用中断,需开启串口中断控制位(IE 寄存器)。

例如:设置串口为工作方式 1、波特率为 9600、波特率加倍、使用中断。其配置程序如下:

void uart_init(u8 baud)
{
TMOD|=0X60; //设置计数器工作方式 2-八位自动重装载的定时器 gate C/T M0M1 
SCON=0X50; //设置为工作方式 1 0;'-101
PCON=0X80; //波特率加倍 1--- ----
TH1=baud; //计数器初始值设置
TL1=baud;
ES=1; //打开接收中断
EA=1; //打开总中断
TR1=1; //打开计数器
}uart_init(0XFA);//波特率为 9600

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

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

相关文章

QT-坦克大战游戏

QT-坦克大战游戏 一、演示效果二、关键程序三、下载链接 一、演示效果 二、关键程序 #include "score.h" Score::Score(){health30; maxHealthhealth;QLabel *label1 new QLabel(this);label1->setFrameStyle(QFrame::Plain | QFrame::Box);label1->setStyle…

ACL——访问控制列表

目录 1、ACL的产生背景及概述 2、ACL的应用 3、ACL的分类 4、ACL的组成 5、ACL的匹配位置 6、ACL的案例 案例1-----拒绝源IP为192.168.10.1的数据包 案例2------拒绝源IP在192.168.10.0/24整个网段的所有数据包 案例3------拒绝源IP为192.168.10.0/24所有奇数主机发送的…

C语言代码实现URL编码

在 Python,只需要导入 urllib.parse,然后使用 quote 函数即可把任意字符串进行 URL 编码 现在使用 C 语言来实现等效的代码,我在网上找到现成的代码,改代码接收命令行输入参数,然后进行 URL 编码并输出: #…

云演CTF Blog

1、啥也搞不了,扫目录。出来个console 2、有显示锁掉了 3、抓包,改返回包 改成true,放包 不好意思,不会了,哈哈哈哈哈哈哈哈哈 你会的话,请告诉我,大佬

使用国内镜像源安装opencv

在控制台输入命令: pip install opencv-python -i https://pypi.tuna.tsinghua.edu.cn/simple 验证安装: step 1: 打开终端;step 2: 输入python,进入Python编译环境;step 3: 粘贴…

Linux——进程中被打开的文件

C语言中有着许多对文件操作的函数,包括其他语言也有,但是从语言来了解文件有点浅显计算机的一切都离不开操作系统,那么文件跟操作系统也有着密切的关系,所以我们从系统层面来了解文件(在进程中打开的文件)文…

“Java 已死、前端已凉”?技术变革与编程语言前景:Java和前端的探讨

前端已死话题概论 本文讨论了近期IT圈中流传的“Java 已死、前端已凉”言论。我们审视了这些言论的真实性,并深入探讨了技术行业的演变和新兴技术的出现对编程语言和前端开发的影响。通过分析历史发展、当前趋势和未来展望,我们提供了对这些话题更深层次…

三、Spring IoC 容器和核心概念

本章概要 组件和组件管理概念 什么是组件?我们的期待Spring充当组件管理角色(IoC)组件交给Spring管理优势 Spring IoC 容器和容器实现 普通和复杂容器SpringIoC 容器介绍SpringIoC 容器具体接口和实现类SpringIoC 容器管理配置方式 Spring I…

【Proteus仿真】【51单片机】电子门铃设计

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真51单片机控制器,使共阴数码管,按键、无源蜂鸣器等。 主要功能: 系统运行后,数码管默认显示第一种门铃音调,可通过K1键切…

OpenAI 承认 ChatGPT 最近的懒惰:由于用户体验到响应缓慢和无用的输出,调查正在进行中

文章目录 一. ChatGPT 指令遵循能力下降引发用户投诉1.1 用户抱怨回应速度慢、敷衍回答、拒绝回答和中断会话 二. OpenAI 官方确认 ChatGPT 存在问题,展开调查三. OpenAI 解释模型行为差异,回应用户质疑四. GPT-4 模型变更受人事动荡和延期影响 一. Chat…

【C++11特性篇】C++11中新增的initializer_list——初始化的小利器

前言 大家好吖,欢迎来到 YY 滴C11系列 ,热烈欢迎! 本章主要内容面向接触过C的老铁 主要内容含: 欢迎订阅 YY滴C专栏!更多干货持续更新!以下是传送门! 目录 一.探究std::initializer_list是什么…

关于“Python”的核心知识点整理大全23

目录 ​编辑 第10 章 文件和异常 10.1 从文件中读取数据 10.1.1 读取整个文件 pi_digits.txt file_reader.py 10.1.2 文件路径 10.1.3 逐行读取 file_reader.py 10.1.4 创建一个包含文件各行内容的列表 10.1.5 使用文件的内容 pi_string.py 往期快速传…