51单片机的串口通迅

2023-11-19

通信的基本方式分为并行通信和串行通信

并行通信

数据的各位同时在多根数据线上发送或接收
特点:
控制简单,传输速度快;由于输线较多,长距离传送时成本高且接收方的各位同时接收存在困难
在这里插入图片描述

串行通信

使用一条数据线,将数据一位一位的依次传输,每一位数据占据一个固定的时间长度。只需少数几条线,适用于计算机与外设之间的远距离通信
特点:
传输线少,长距离传送时成本低,但数据的传送控制比并行通信复杂
在这里插入图片描述
串行通信可分为三种制式:
单工:单向的(收或发)
半双工:(串行通信)收/发不可同时进行
全双工:(串行通信)收/发可同时进行
在这里插入图片描述
传输速率
比特率:每秒钟传输二进制代码的位数
单位:位/秒(bps)
如每秒钟传送240个字符,而每个字符格式包含10位(1个起始位、1个停止位、8个数据位)
这时比特率为:10位×240个/秒 = 2400 bps

串行接口的结构

在这里插入图片描述
有两个物理上独立的接收、发送缓冲器SBUF,它们占用同一地址 99H
如果CPU写SBUF,数据就会被送入发送寄存器准备发送;
如果CPU读SBUF,则读入的数据一定来自接收缓冲器。
CPU对SBUF的读写,实际上是分别访问两个不同的寄存器

串行控制寄存器SCON

SCON地址98H用于设置串行口的工作方式、监视串行口的工作状态、控制发送与接收的状态等。它是一个既可以字节寻址又可以位寻址的8位特殊功能寄存器。
在这里插入图片描述
TI:发送中断标志位
TI = 1,表示已结束一帧数据发送,可由软件查询TI位标志,也可以向CPU申请中断
★ TI在任何工作方式下都必须由软件清0。

RI:接收中断标志位
RI = 1,表示一帧数据接收结束。可由软件查询RI位标志,也可以向CPU申请中断
★ RI在任何工作方式下也都必须软件清0

串行发送中断TI和接收中断RI的中断入口地址同是0023H,因此在中断程序中必须由软件查询TI和RI的状态才能确定究竟是接收还是发送中断,进而作出相应的处理。单片机复位时,SCON所有位均清0。

SM0和SM1为工作方式选择位,可选择四种工作方式:

SM0 SM1 方式 说明 波特率
0 0 0 移位寄存器 fosc/12
0 1 1 10位异步收发器(8位数据) 可变
1 0 2 11位异步收发器(9位数据) fosc/64或fosc/32
1 1 3 11位异步收发器(9位数据) 可变

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

常用串口波特率:
300、600、1200、2400、4800、9600、19200…115200;
在这里插入图片描述

电源控制寄存器PCON

PCON D7 D6 D5 D4 D3 D2 D1 D0
位名称 SMOD - - - GF1 GF0 PD IDL

SMOD:在串行口工作方式1、2、3中,是波特率加倍位
(产生高波特率时启动平时不用,比如用11.0592晶振产生57600波特率时就要设置成SMOD = 1)
= 1时,波特率加倍(PCON = 0x80)
= 0时,波特率不加倍(PCON = 0x00)
在PCON中只有这一个位于串口无关

串行口工作之前需要对相关寄存器进行配置,设定其工作模式

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

异步通信

定义:通信的发送与接收设备使用各自的时钟控制数据的发送和接收过程。为使双方的收发协调,要求发送和接收设备的时钟尽可能一致。

以字符(构成的帧)为单位进行传输,字符与字符之间的时间间隔是任意的,但每个字符中的各位是以固定的时间传送的,即字符之间不一定有“位间隔”的整数倍的关系,但同一字符之内的各位之间的距离均为“位间隔”的整倍数
在这里插入图片描述

同步通信

建立发送方时钟对接收方时钟的直接控制,使双方达到完全同步。此时,传输数据的位之间的距离均为“位间隔”的整数倍,同时传送的字符间不留空隙,即保持位同步关系,也保持字符同步关系。

查询法代码示例:

#include<reg52.h>

#define uchar unsigned char
#define uint unsigned int

uchar num;

void delay(uint z)
{
	uint x,y;
	for(x = z;x > 0; x --)
		for(y = 114; y > 0; y --)
}

void UART_init()
{
	TMOD = 0x20; //T1工作模式2 8位自动重装
	TH1 = 0xfd;
	TL1 = 0xfd;  //比特率9600
	TR1 = 1; //启动T1定时器
	SM0 = 0;
	SM1 = 1;//串口工作方式1  10位异步
	REN = 1;//串口允许接收
}

void main()
{
	UART_init()while(1)
	{
		SBUF = num;
		while(!TI);
		TI = 0;
		num ++;
		delay(500);//500毫秒延时
	}
}

中断法

#include<reg52.h>

#define uchar unsigned char
#define uint unsigned int

uchar num;

void UART_init()
{
	TMOD = 0x20; //T1工作模式2 8位自动重装
	TH1 = 0xfd;
	TL1 = 0xfd;  //比特率9600
	TR1 = 1; //启动T1定时器
	SM0 = 0;
	SM1 = 1;//串口工作方式1  10位异步
	REN = 1;//串口允许接收
	EA = 1;  //开总中断
	ES = 1; //串口中断打开
}

void main()
{
	UART_init()while(1)
	{
		while(!RI);
		P1 = SBUF;
		RI = 0;
	}
}

void UART() interrupt  4  //中断函数
{
	if(RI)  //检测是否接收完成
	{
		num = SBUF;  //num取出接收寄存器的值
		P1 = SBUF;
		num ++;
		RI = 0;
		SBUF = num;
		while(!TI);
		TI = 0;
	}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

51单片机的串口通迅 的相关文章

  • 51单片机——串口通信

    51单片机 串口通信 串口通信 串口通信的原理 串口的配置 定时器的配置 c源代码 netty源代码 结果 本篇博客的最终效果是实现51单片机用串口发送Hello World netty监听串口读到Hello World后回发给51单片机
  • 串口通信----串口接收框接收不到数据

    在进行串口调试时 数据发送没有问题 但是其他串口给该串口发送数据时 接收框始终接收不到数据 也不提示错误 感觉接收函数不起作用 对照之前没有问题的串口程序 发现只有这部分没有添加进去 其他都是一样的 问题应该在这里 添加进去后 正常接收了
  • STM32_USART 串口通讯

    STM32 USART 串口通讯 通信方式的分类 按照通信方式分类 按照数据传送方向分类 通信接口及其说明如下图所示 STM32的串口通信 引脚接线 串口通讯的过程 串口发送数据 串口接收数据 USART中断请求 通信方式的分类 按照通信方
  • stm32 串口发数据 0x00 变 0x80

    stm32 串口发数据 0x00 变 0x80 一般配置奇校验odd和偶校验even的时候 会出现这个问题 根本原因是stm32在计算长度的时候 会把校验位也计算进去 所以你之前设置的数据位8要改成数据位9才能正常运行 USART Init
  • STC15F2K60S2单片机的串口通信程序及相关知识

    一 STC15F2K60S2单片机简介 中国深圳宏晶STC系列单片机是2005年推出中国本土的第一款具有全球竞争力的 且与MCS 51兼容的STC系列单片机 它完全兼容51单片机 是新一代增强型单片机 速度快 抗干扰性强 加密性强 带ADC
  • 西门子PLC各类通信协议差异对比

    西门子PLC有4大类 几十个型号类型 PLC不同所支持的通讯协议也不相同 S7 200系列支持的协议有 PPI MPI PROFIBUS 以太网 S7协议 AS INTERFACE USS MODBUS 自由口 S7 300 400系列支持
  • Windows使用串口API函数串口编程

    Windows使用串口API函数串口编程 前言 1 打开串口 1 1 参数详解 1 2 代码示例 1 2 1 获取串口号 1 2 2 打开串口 同步通信 1 2 3 打开串口 异步通信 2 关闭串口 3 配置串口 3 1 配置输入输出缓冲区
  • 蓝牙mesh组网-JDY-24M初步探索

    操作步骤如下 这款JDY 24M蓝牙功能强大 我主要应用其中mesh组网这个功能 mesh组网简单来说 就是组网的这几个蓝牙是可以互相通信 一一通信是通过蓝牙地址来确定的 一 配置组网 需要用到两根USB转TTL的线 JDY 24M蓝牙2个
  • c++实现串口通讯踩坑(argument of type “char *“ is incompatible with parameter of type “LPCWSTR“)

    在C下 可以使用outportb和inportb进行串口通讯 C 没有这两个函数 那就使用createfile吧 通过网上搜到读取打开串口的例子 如下 include
  • 用虚拟串口进行串口调试

    由于现在的笔记本电脑一般不带有串口 再进行串口调试时 可以用虚拟串口代替 虚拟串口下载链接 虚拟串口 Win7 下载 串口调试助手下载链接 串口调试助手 VS2010串口程序 使用的unicode库 纯API 不利用Mscomm控件 下载链
  • Xmodem/Ymodem/Zmodem协议详解

    序 Xmodem Ymodem和Zmodem协议是最常用的三种通信协议 Xmodem协议是最早的 传输128字节信息块 之后也支持到1k的传输 Ymodem是Xmodem的增强版协议 具有传输快速稳定的优点 它可以一次传输1024字节的信息
  • 485通讯与MODBUS的区别与联系

    最近做智能检测的项目 设备 串口之间的通讯比较多 一会儿485 一会儿modbus RTU 有点晕了 这里重新梳理一下RS485 485通讯协议 ModBus通讯协议 Modbus Rtu通讯这几个点的联系和区别 先说RS485吧 RS48
  • 关于STM32串口接收中断中只能接收一个字节()

    最近调试STM32的串口接收时发现例程中只能接收一个字节 例程如下 1 初始化串口1 2 void uart init u32 bound 3 GPIO端口设置 4 GPIO InitTypeDef GPIO InitStructure 5
  • 获取windows中活跃的Com口

    获取windows中活跃的Com口 记录于2021年11月9日 今天对我来说是个很特殊的一天 母胎SOLO二十一周年 无奈 Orz 闲暇之余写下此文章 记录一下我的日常 文章目录 获取windows中活跃的Com口 前言 一 如何寻找活跃C
  • qt5.10 串口通信 QSerialPort 的使用

    在qt5中 使用QSerialPort进行串口通信 主要用到的QSerialPort 使用步骤 步骤一 在 pro文件中进行声明 QT serialport 在 pro文件中添加这个声明 步骤二 实例化 QSrerialPort QSeri
  • Arduino基础篇(五)-- 如何快速上手串口通信(Serial)

    文章目录 1 基础篇 1 1 通信基础 2 串口通信 2 1 Arduino串口的硬件结构 2 2 串口工作原理 2 3 硬件串口通信 2 4 软件模拟串口通信 1 基础篇 1 1 通信基础 1 并行通信 通过输入 输出端口在 Arduin
  • STM32F031串口(RS485)中断+DMA发送(预备知识)

    STM32F031串口 RS485 中断 DMA发送 前言 GPIO移植过程 与F1系列的一些区别 串口 DMA 前言 最近在搞STM32F031的项目 F0系列与常用的F1系列有一定区别 在开发过程中遇到一些问题 而且花了好长花间在搜寻解
  • QT开发遇到的问题(1)——程序循环执行的问题

    我之前一直直接用C 开发工程 有需求需要跨平台开发 前期使用时候感觉还可以 转到工程应用时候 就遇到好多坑 今天就遇到个大坑 在开发时候需要不断循环一块代码来实现某种功能 QT不像C 那种 这个更加专业 下面我对这个问题进行详细说明分析 问
  • 【Qt串口调试助手】1.8 - 修改Qt应用图标和窗口图标

    修改Qt应用图标和窗口图标 GitHub源码 Qt串口调试助手下载 修改应用图标 首先选择一张喜欢的图片 来作为应用图标 图片格式必须为 ico easyicon net 有很多可供下载的资源 下载好后 将其放入工程目录 之后添加到 Qt的
  • Android usb通信 实现app与arduino通信demo

    Android usb通信 一 前言 二 开始 1 AndroidManifest xml清单文件 2 创建权限广播接收者 3 枚举usb设备 4 获取usb接口以及输入 输出端点 5 打开设备 6 设置波特率 7 创建接收数据的线程 8

随机推荐

  • axios用headers传参,设置请求头token

    不知道该怎么描述我这个问题 之前有听一个前端经理说 使用http协议的时候要用headers传参 新公司就是使用http协议的 在vue项目中 使用了axios 要根据header里的token判断用户是否登录 如上图 一开始的理解为是像d
  • 前段技术加html+css+JS

    前段技术加html css JS html 负责页面的结构 语义 网页制作语言 不是编程语言 css 负责页面的美化 样式 js 增加交互或特效 HTML基本知识点 HTML含义 html超文本标记语言 通过标签进行语义化描述 超文本 就是
  • No implementation found for int com.baidu.mapsdkplatform.comjni.tools.JNITools.initClass(java.lang.O

    今天又有一个历史项目需要维护 发现百度地图只显示网格 没有图像出来 感觉可能是签名问题 但是下载来的代码中只有那一个签名 所以干脆把百度地图的东西都替换掉 替换完一运行 直接崩溃了 E NativeLoader found libBaidu
  • 【Unity灯光与渲染技术】Global Illumination全局光照

    本系列主要参考Unity灯光与渲染技术教程Unity Lighting And Rendering 同时会加上一点个人实践过程和理解 分割线 这篇文章主要讲全局光照 在看教程的时候就有一个点不是很理解 就是作者开启物体的static这个选项
  • 字母大小写转换(python实现)

    python实现大小写转换主要用lower和upper函数 lower 将字符串中的所有大写字母转化为小写字母 upper 将字符串中的所有小写字母转化为大写字母 s input 输入一个字符串 print s upper 输入 i lov
  • HTML5游戏实战(2):90行代码实现捕鱼达人

    捕鱼达人是一款非常流行的游戏 几年里赚取了数以千万的收入 这里借用它来介绍一下用Gamebuilder CanTK开发游戏的方法 其实赚钱的游戏未必技术就很难 今天我们就仅用90来行代码来实现这个游戏 CanTK Canvas ToolKi
  • MySQL 分区表设计

    MySQL 分区表设计 1 分区表设计方案 当设计 MySQL 分区表时 需要考虑以下几个方面 分区策略 分区字段 分区数量和分区函数 下面是一个详细的示例 展示了如何设计和执行分区表的增删改查操作 设计分区表 考虑一个订单表的例子 我们可
  • 【DP】拔河比赛

    题目 一个学校举行拔河比赛 所有的人被分成了两组 每个人必须 且只能够 在其中的一组 要求两个组的人数相差不能超过1 且两个组内的所有人体重加起来尽可能地接近 输入 输入数据的第1行是一个n 表示参加拔河比赛的总人数 n lt 100 接下
  • 最新实战-基于SSM的自习室预订座位占座管理系统-JAVA.VUE【数据库设计、开题报告】

    功能介绍 项目含有管理员和学生两种角色 座位分类管理 管理员可以管理座位分类信息 可以添加 修改 删除座位分类信息 学生信息管理 管理员可以对学生信息进行查询和修改操作 座位信息管理 管理员可以对座位信息进行修改 查询操作 座位预约管理 管
  • 通过示例学习 JavaScript 运算符 - 逻辑、比较、三元和更多 JS 运算符

    JavaScript 有许多运算符 可用于对值和变量 也称为操作数 执行操作 根据这些 JS 运算符执行的操作类型 我们可以将它们分为七组 目录
  • SeetaFace编译成功(有windows及Android源码)

    声明 由于本人水平有限 所提供的代码 dll so等必然存在很多问题 仅用于学习 不适合工业级使用 请谨慎使用 如果造成损失 责任自负 对齐 这张照片第3个人的特征点检测有点问题 研发人员很快修正了 赞一个 下面是人脸比对 准确率还是可以接
  • EF Core + sql2005报错 An error occurred while updating the entries. See the inner exception for detail

    问题 将原来 Net4 0 EF sql2008系统迁到 NetCore EF SQL 2005上 在保存数据时出现 An error occurred while updating the entries See the inner ex
  • Kernel lockdown is enabled and set to ‘confidentiality‘.

    执行bpftrace时遇到的问题 度娘了好久没有适合我的 后来看到一篇 bpftrace 执行失败 Operation not permitted 不是因为 kernel lockdown By李佶澳 他是参考官网的操作 bpftrace
  • WiFi网络编程(带OTA功能)

    参考 WiFi网络编程 上 地址 https www bilibili com video BV1VV411b75h spm id from 333 788 recommend more video 0 参考 WiFi网络编程 下 地址 h
  • 云原生之使用Docker部署Firefox浏览器

    云原生之使用Docker部署Firefox浏览器 一 Firefox浏览器介绍 1 1 Firefox简介 1 2 Firefox特点 二 本次实践介绍 2 1 本地环境规划 2 2 本次实践简介 三 本地环境检查 3 1 检查Docker
  • 头歌|Hadoop单点部署,安装和管理

    第1关 配置开发环境 JavaJDK的配置 mkdir app cd opt tar zxvf jdk 8u171 linux x64 tar gz mv jdk1 8 0 171 app vim etc profile vim 添加至文件
  • 应用级缓存

    缓存介绍 缓存 让数据更接近使用者 目的是让访问速度更快 工作机制是先从缓存中读取数据 如果没有 再从慢速设备上读取实际数据并同步到时缓存 缓存命中率 缓存回收策略 JAVA缓存类型 堆缓存 堆外缓存 磁盘缓存 分布式缓存 多级缓存
  • 电脑桌面图标不见了?三招教你轻松找回

    电脑桌面上的图标对于我们日常的操作和使用非常重要 但有时候会出现电脑桌面图标不见了的情况 让人感到困扰 在本文中 我们将介绍三种常见的方法 帮助您找回丢失的电脑桌面图标 让您的使用更加顺畅 方法1 查找桌面图标文件夹 相信很多人会遇到这样的
  • 蓝桥杯 成绩统计

    目录 问题描述 思路分析及代码实现 问题描述 小蓝给学生们组织了一场考试 卷面总分为 100 分 每个学生的得分都是一个 0 到 100 的整数 如果得分至少是 60 分 则称为及格 如果得分至少为 85 分 则称为优秀 请计算及格率和优秀
  • 51单片机的串口通迅

    通信的基本方式分为并行通信和串行通信 并行通信 数据的各位同时在多根数据线上发送或接收 特点 控制简单 传输速度快 由于输线较多 长距离传送时成本高且接收方的各位同时接收存在困难 串行通信 使用一条数据线 将数据一位一位的依次传输 每一位数