普中51单片机学习(串口通信)

news2024/10/6 5:59:01

串口通信

原理

计算机通信是将计算机技术和通信技术的相结合,完成计算机与外部设备或计算机与计算机之间的信息交换 。可以分为两大类:并行通信与串行通信。并行通信通常是将数据字节的各位用多条数据线同时进行传送 。控制简单、传输速度快;由于传输线较多,长距离传送时成本高且接收方的各位同时接收存在困难。串行通信是将数据字节分成一位一位的形式在一条传输线上逐个地传送,传输线少,长距离传送时成本低,且可以利用电话网等现成的设备,但数据的传送控制比并行通信复杂。

串行通信的基本概念

异步通信与同步通信

  1. 异步通信是指通信的发送与接收设备使用各自的时钟控制数据的发送和接收过程。为使双方的收发协调,要求发送和接收设备的时钟尽可能一致。
  2. 同步通信时要建立发送方时钟对接收方时钟的直接控制,使双方达到完全同步。此时,传输数据的位之间的距离均为“位间隔”的整数倍,同时传送的字符间不留间隙,即保持位同步关系,也保持字符同步关系。发送方对接收方的同步可以通过两种方法实现。

传输方向

  • 单工是指数据传输仅能沿一个方向,不能实现反向传输。
  • 半双工是指数据传输可以沿两个方向,但需要分时进行。
  • 全双工是指数据可以同时进行双向传输。

串行通信常见的错误校验

  1. 奇偶校验:在发送数据时,数据位尾随的1位为奇偶校验位(1或0)。奇校验时,数据中“1”的个数与校验位“1”的个数之和应为奇数;偶校验时,数据中“1”的个数与校验位“1”的个数之和应为偶数。接收字符时,对“1”的个数进行校验,若发现不一致,则说明传输数据过程中出现了差错。
  2. 代码和校验:代码和校验是发送方将所发数据块求和(或各字节异或),产生一个字节的校验字符(校验和)附加到数据块末尾。接收方接收数据同时对数据块(除校验字节外)求和(或各字节异或),将所得的结果与发送方的“校验和”进行比较,相符则无差错,否则即认为传送过程中出现了差错。
  3. 循环冗余校验:这种校验是通过某种数学运算实现有效信息与校验位之间的循环校验,常用于对磁盘信息的传输、存储区的完整性校验等。这种校验方法纠错能力强,广泛应用于同步通信中。

传输速率
比特率是每秒钟传输二进制代码的位数,单位是:位/秒(bps)。

80C51串行口的结构
在这里插入图片描述
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,取消此中断申请。

在这里插入图片描述

  • SMOD(PCON.7)
    波特率倍增位。在串行口方式1、方式2、方式3时,波特率与SMOD有关,当SMOD=1时,波特率提高一倍。复位时,SMOD=0。

方式0的波特率 = fosc/12
方式2的波特率 =(2SMOD/64)· fosc
方式1的波特率 =(2SMOD/32)·(T1溢出率)
方式3的波特率 =(2SMOD/32)·(T1溢出率)
当T1作为波特率发生器时,最典型的用法是使T1工作在自动再装入的8位定时器方式(即方式2,且TCON的TR1=1,以启动定时器)。这时溢出率取决于TH1中的计数值。
T1 溢出率 = fosc /{12×[256 -(TH1)]}

串行口工作之前,应对其进行初始化,主要是设置产生波特率的定时器1、串行口控制和中断控制。具体步骤如下:

  1. 确定T1的工作方式(编程TMOD寄存器);
  2. 计算T1的初值,装载TH1、TL1;
  3. 启动T1(编程TCON中的TR1位);
  4. 确定串行口控制(编程SCON寄存器);
  5. 串行口在中断方式工作时,要进行中断设置(编程IE、 IP寄存器)。

实验代码

#include "reg52.h"
typedef unsigned char u8;
typedef unsigned int u16;


void UsartInit()
{
	TMOD|=0X20;
	TH1=0XF3;
	TL1=0XF3;
	PCON=0X80;
	TR1=1;
	SCON=0X50;
	ES=1;
	EA=1;
}

void main(){
	UsartInit();
	while(1);
}

void Usart() interrupt 4
{
	u8 receiveData;
	receiveData=SBUF;
	RI=0;
	SBUF=receiveData;
	while(!TI);
	TI=0;
}

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

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

相关文章

自然语言编程系列(二):自然语言处理(NLP)、编程语言处理(PPL)和GitHub Copilot X

编程语言处理的核心是计算机如何理解和执行预定义的人工语言(编程语言),而自然语言处理则是研究如何使计算机理解并生成非正式、多样化的自然语言。GPT-4.0作为自然语言处理技术的最新迭代,其编程语言处理能力相较于前代模型有了显…

MT5016A-ASEMI大电流整流桥MT5016A

编辑:ll MT5016A-ASEMI大电流整流桥MT5016A 型号:MT5016A 品牌:ASEMI 封装:D-63 最大重复峰值反向电压:1600V 最大正向平均整流电流(Vdss):50A 功率(Pd): 芯片个数:4 引脚数…

Python + Selenium —— 元素定位函数 find_element!

WebDriver 中的 find_element() 方法用来查找元素,并返回 WebElement 对象。是 WebDriver 中最常用的方法。 前面提到的八种定位方式都有对应的方法,如find_element_by_id()。 在 WebDriver 中还有一种用法,就是单纯的find_element()。需要…

8款白嫖党必备的ai写作神器,你都知道吗? #AI写作#科技

这些工具不仅可以快速生成高质量的文本内容,还可以根据用户的需求进行个性化定制。它们可以帮助我们节省大量的时间和精力,让我们更加专注于创意和细节的打磨。本文将为大家详细介绍几个AI写作工具,让你在写作领域更上一层楼。 1.元芳写作 …

ASP.NET-实现图形验证码

ASP.NET 实现图形验证码能够增强网站安全性,防止机器人攻击。通过生成随机验证码并将其绘制成图像,用户在输入验证码时增加了人机交互的难度。本文介绍了如何使用 C# 和 ASP.NET 创建一个简单而有效的图形验证码系统,包括生成随机验证码、绘制…

8*4点LED数显/数码管显示驱动控制芯片-VK1650,兼容替代市面1650,提供FAE技术支持

产品品牌:永嘉微电/VINKA 产品型号:VK1650 封装形式:SOP16 概述: VK1650是一种带键盘扫描电路接口的LED驱动控制专用芯片,内部集成有数据锁存 器、LED驱动、键盘扫描等电路。SEG脚接LED阳极,GRID脚接LED阴…

Outlook 中关闭特殊字符显示

故障现象: 不知道什么原因,Outlook发mail时候,突然显示如下的特殊字符,看起来非常不方便,需要关闭; 解决办法: 在Outlook正文里面,输入CtrlShift*( 其中*是键盘数字8旁边的那个*&a…

使用Docker部署Docker-Compose-Ui工具并实现公网访问

文章目录 1. 安装Docker2. 检查本地docker环境3. 安装cpolar内网穿透4. 使用固定二级子域名地址远程访问 Docker Compose UI是Docker Compose的web界面。这个项目的目标是在Docker Compose之上提供一个最小的HTTP API,同时保持与Docker Compose CLI的完全互操作性。…

【Unity3D】ASE制作天空盒

找到官方shader并分析 下载对应资源包找到\DefaultResourcesExtra\Skybox-Cubed.shader找到\CGIncludes\UnityCG.cginc观察变量, 观察tag, 观察代码 需要注意的内容 ASE要处理的内容 核心修改 添加一个Custom Expression节点 code内容为: return DecodeHDR(In0, In1);outp…

第十四章[面向对象]:14.3:实例属性

一,认识实例属性 1,什么是实例属性? 实例属性是与类的每个实例相关联的属性。 每个类的实例都可以拥有自己的一组实例属性。 实例属性通常在类的构造方法(通常是__init__方法)内定义,并使用self关键字来访问。 2,实例属性的一个重要特点是每个实例都有自己独立的一组实…

从0到1的私域流量体系搭建,私域操盘手的底层认知升级

一、教程描述 本套私域操盘手教程,大小4.31G,共有12个文件。 二、教程目录 01第一课、私域能力必修:私域大神熟记于心的高阶私域体系.mp4 02第二课、私域IP打造:那些忍不住靠近的私域IP如何打造的.mp4 03第三课、朋友圈经济&…

openEuler二进制安装MySQL8.0.x

一、环境准备 1、系统:openEuler操作系统 2、MySQL版本:MySQL-8.0.36 3、下载地址:https://dev.mysql.com/get/Downloads/MySQL-8.0 二、安装步骤 1、下载glibc版本的MySQL 2、新建用户以安全方式运行进程 [rootnode4 ~]# groupadd -r -g…

基于STL的演讲比赛流程管理系统(个人学习笔记黑马学习)

1、演讲比赛程序需求 1.1比赛规则 学校举行一场演讲比赛,共有12个人参加。比赛共两轮,第一轮为淘汰赛,第二轮为决赛。每名选手都有对应的编号,如 10001~10012比赛方式:分组比赛,每组6个人;第一轮分为两个小组&#xff…

微服务—RabbitMQ高级(业务在各方面的可靠性)

本博客为个人学习笔记,学习网站:2023黑马程序员RabbitMQ入门到实战教程 高级篇章节 目录 生产者可靠性 生产者重连机制 生产者确认机制 介绍 实现 总结与建议 MQ可靠性 数据持久化 LazyQueue 消费者可靠性 消费者确认机制 失败重试机制 失…

【图与网络数学模型】3.Ford-Fulkerson算法求解网络最大流问题

【图与网络数学模型】3.Ford-Fulkerson算法求解网络最大流问题 一、网络流模型1. 概述2. 可行流3. 增广链 二、示例1. 最大流问题2. Alternate Formulation:最小截量问题 三、Ford-Fulkerson 算法1. 导入库2. 初始化残差图3. 定义查找增广路径4. 定义循环5. 程序运行…

JAVA编程思想-第 4 章 初始化和清除

第 4 章 初始化和清除 “随着计算机的进步,‘不安全’的程序设计已成为造成编程代价高昂的罪魁祸首之一。” “初始化”和“清除”是这些安全问题的其中两个。许多 C 程序的错误都是由于程序员忘记初始化一个变量 造成的。对于现成的库,若用户不知道如何…

【RL】强化学习求解JSP(作业车间调度问题)

JSP(Job Shop Scheduling Problem)是一种经典的组合优化问题,它的目标是在一组机器上安排一组工件的加工顺序,使得完成所有工件所需的最短时间(Cmax)最小。JSP 是一个 NP-hard 问题,即没有已知的…

深度解析Sora的核心技术

Sora要解决的核心问题 Sora面临的挑战是将不同类型的视觉信息,如视频、文本、图像和声音等,整合为一种共同的表征形式。这种转换是实现统一训练过程的关键,旨在将各类数据集中到一个训练框架中,以便于进行大规模的统一学习。简而…

机器学习 深度学习资料 资源machine learning

Kaggle入门,看这一篇就够了 - 知乎 (zhihu.com)https://zhuanlan.zhihu.com/p/25686876 day1-1.什么是机器学习_哔哩哔哩_bilibiliday1-1.什么是机器学习是10天学会机器学习从入门到深度学习的第1集视频,该合集共计62集,视频收藏或关注UP主&a…

3.网络游戏逆向分析与漏洞攻防-游戏启动流程漏洞-游戏启动流程的分析

内容参考于:易道云信息技术研究院VIP课 上一个内容:项目搭建 首先下图红框里是游戏启动的程序 游戏启动之后的名字(fxgame.exe) 一般游戏启动的架构: 第一种:登录器程序启动游戏主程序,然后游…