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单片机的串口通迅 的相关文章

  • STM32使用USART串口调试ULN2003驱动步进电机

    传送门 STM32控制ULN2003驱动步进电机28BYJ 48最基础版 使用串口调试步进电机28BYJ 48获得需要转速 当使用STM32控制ULN2003驱动步进电机28BYJ 48时 步进电机转速变化缓慢 想要得到合适的控制速度 需要
  • 魔方机器人之下位机编程-----两种串口通信方式的比较

    由于上位机软件的串口通信部分和魔方复原算法部分已经完成 接下来的一步就是如何将魔方复原的具体步骤 字符串的形式 通过串口发送给单片机MC9S12XS128单片机了 调试的过程中 采用了两种串口通信的方式 一种是查询的方式 另一种是中断的方式
  • STM32串口溢出中断问题

    之前调试程序 遇到了串口溢出中断的问题 导致主程序被卡死 这里总结分享一下经验 希望对读者有用 对于STM32F103系列单片机 使能接收中断后 溢出中断就会自动被使能 那什么时候会发生溢出中断呢 在RXNE 1 的的条件下 也就是上次数据
  • STM32F1应用DMA——串口收发不定长数据

    STM32F1应用DMA 串口收发不定长数据 使用STM32自带DMA传输数据 可以减轻CPU负担 只需设置一些参数即可发送想要发送的数据 以下是STM32F1系列芯片测试过的部分代码 可实现DMA串口收发数据 下图来自STM32官网的手册
  • CSerialPort教程4.3.x (7) - CSerialPort在vcpkg中的使用

    CSerialPort教程4 3 x 7 CSerialPort在vcpkg中的使用 前言 CSerialPort项目是一个基于C C 的轻量级开源跨平台串口类库 可以轻松实现跨平台多操作系统的串口读写 同时还支持C Java Python
  • Python实现串口通信(pyserial)

    Python实现串口通信 pyserial pyserial模块封装了对串口的访问 兼容各种平台 安装 pip insatll pyserial 初始化 简单初始化示例 import serial ser serial Serial com
  • ESP-NOW无线通信

    本文由铁熊与默联合创作 在学习 Arduino 开发的过程中 无线通讯是我们学习道路上一道必过的坎 无线通讯摆脱了线材的束缚 使用更加灵活且通讯距离根据不同无线模块可达几十米甚至是数公里 常见的无线通讯方式有蓝牙 WiFi LoRa NB
  • Android 蓝牙串口通信Demo

    目录 一 前言 二 效果图 三 源码 带注释 1 布局代码 2 Java代码 3 权限声明 四 注意 五 项目源码下载 一 前言 在学校和机电的同学组队准备做一个智能小车去参加比赛 需要我开发一个小车的控制app 所以我开始学习蓝牙串口通信
  • 485通讯与MODBUS的区别与联系

    最近做智能检测的项目 设备 串口之间的通讯比较多 一会儿485 一会儿modbus RTU 有点晕了 这里重新梳理一下RS485 485通讯协议 ModBus通讯协议 Modbus Rtu通讯这几个点的联系和区别 先说RS485吧 RS48
  • QT开发之串口通信(四)

    VS2015 QtPackage版本1 3 11插件 QT5 13 1 最近使用串口遇到一些问题 1 问题 在上述编译环境下发生数据会出现发送一次数据后无法重复发送数据 返回值也没有问题 查询得知 QByteArray SendBytes
  • 硬件设计——外围电路(晶振电路)

    硬件设计之晶振电路 为什么要用晶振 晶振电路由何组成 晶振电路中其电容的作用 在日常的电路设计中 我们经常会用到晶振电路 所以我们就要首先先提一下什么是晶振 这样才能理解晶振电路 为什么要用晶振 晶振的作用是为系统提供基本的时钟信号 通常一
  • STM32F031串口(RS485)中断+DMA发送(预备知识)

    STM32F031串口 RS485 中断 DMA发送 前言 GPIO移植过程 与F1系列的一些区别 串口 DMA 前言 最近在搞STM32F031的项目 F0系列与常用的F1系列有一定区别 在开发过程中遇到一些问题 而且花了好长花间在搜寻解
  • 九.ARM裸机学习之串口通信详解1(串口通信接口及原理框图详解)

    一 串口通信的基本概念及原理理解 2017 11 12 22 52 1 同步通信和异步通信 异步通信 指通信的发送与接收设备使用各自的时钟控制数据的发送和接收过程 为使双方的收发协调 要求发送和接收设备的时钟尽可能一致 即发送方和接收方没有
  • Ubuntu+Python环境做上位机

    最近需要制作程控电阻箱的上位机 使得大学毕业后就不再接触硬件的我无从下手 拿到机器后不知道怎么与其进行通信 Google上的资料也很少 现将我的环境搭建过程记录下来 希望对和我一样的小白有所帮助 软件环境 Ubuntu 16 04 pyth
  • 奇偶校验位

    在串行通信中 奇偶校验位通常是由UART这样的接口硬件生成 校验的 在接收方 通过接口硬件中的寄存器的状态位传给 CPU 以及操作系统 错误数据的恢复通常是通过重新发送数据 这个过程通常由如操作系统输入输出程序这样的软件处理的
  • 串口通信——接收串口数据并处理(C语言)

    本文主要内容包含 1 接收串口数据程序的编程逻辑示意图 2 接收串口数据程序要用到的通用函数模块 可直接引用 无需更改 3 接收串口数据程序的示例 1 接收串口数据程序的编程逻辑示意图 2 与串口有关的函数模块及数组 可直接引用到自己的程序
  • USB转串口那些事儿—USB转串口工作原理及应用

    一 简介 USB转串口即实现计算机USB接口到物理串口之间的转换 可以为没有串口的计算机或其他USB主机增加串口 使用USB转串口设备等于将传统的串口设备变成了即插即用的USB设备 USB虚拟串口应用特点 USB应用广泛 支持热插拔 传输速
  • 【Python】PyCharm中调用另一个文件的函数或类

    欢迎来到Python专栏 PyCharm中调用另一个文件的函数或类 o o 嗨 我是小夏与酒 博客主页 小夏与酒的博客 该系列文章专栏 Python学习专栏 文章作者技术和水平有限 如果文中出现错误 希望大家能指正 欢迎大家关注 目录 Py
  • Android usb通信 实现app与arduino通信demo

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

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

随机推荐

  • 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单片机的串口通迅

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