51单片机串口通讯原理及程序源码-----day8
51单片机串口通讯原理及程序源码-----day8
1.定义单片机为TTL电平:高 +5V 低 0V
RS232电平: 计算机的串口高 -12V 低+12V
所以计算机与单片机之间通讯时需要加电平转换芯片CH340T 、 MAX232。
2.通信分类:
(1)并行通信通常是将数据字节的各位用多条数据线同时进行传送 。
并行通信控制简单、 传输速度快; 由于传输线较多, 长距离传送时成本高且接收方的各位同时接收存在困难

(2)串行通信是将数据字节分成一位一位的形式在一条传输线上逐个地传送。串行通信的特点: 传输线少, 长距离传送时成本低, 且可以利用电话网等现成的设备, 但数据的传送控制比并行通信复杂。

异步通信的特点: 不要求收发双方时钟的严格一致, 实现容易, 设备开销较小, 但每个字符要附加2~3位用于起止位, 各帧之间还有间隔, 因此传输效率不高。

2.UART的四种模式:
模式0:
模式1: 以TXD为例, 平时没数据时TXD为高电平, 来了数据, 一位起始位0, 八位数据位( 一个字节) , 一位停止位1。
模式2和3: 原理和模式1一样, 只是添加了一位奇偶校验位( 防止通信出错) 。,奇校验在D7后补充一位0或者1根据前面1的个数来补充,如果是奇校验且D0-D7之间1的个数为偶数则补1,如果是偶校验且D0-D7之间个数为奇数则补1.
3.单位: 波特率 = 位/字符× 字符/秒 = 位/秒。 波特率: 就是发送一位数据的速率, 即发送一个数据的持续时间 = 1/baud;
常用串口波特率:
300、 600、 1200、 2400、 4800、 9600、19200 ……115200;
SBUF:串口数据缓冲寄存器, 发送数据时, 只要将数据送入SBUF, 则单片机自动发送数据,接收数据时, 自动将数据接收至SBUF。
SCON串口控制寄存器

SM1与SM2为模式0时,波特率为时钟频率/12,比特率固定。
模式2与模式3时9位数据多一位奇偶校验位。
模式1为串口常用模式。
SM2: 使能模式2和3中的多机通信功能。 通常不使用。
REN: 使能串口接收。 由软件置1, 则允许串口接收数据; 由软件清零, 则禁止串口接收数据。
TB8,RB8: 方式2和方式3中的校验位, 分为四种方式A.偶校验;B.奇校验;C.强制为0;D.强制为1 。
TI: 发送中断标志, 在发送停止位时由硬件置1。必须通过软件才能清零。
RI: 接收中断标志, 接收停止位的中间时刻由硬件置1, 必须通过软件清零。
定时器TMOD:
模式2: 自动装载8位计数器。 主要应用在串口波特率发生器。

SMOD:波特率选择位。当用软件置位SMOD,即SMOD=1,则使串行通信方式1、2、3的波特率加倍;SMOD=0,则各工作方式的波特率不加倍。复位时SMOD=0。
一般选择不加倍,所以SMOD为0,SYSclk是单片机时钟,也就是晶振的频率,11.0592MHz,运算时要转化为基本单位Hz,即11059200Hz
定时器工作模式是8位自动重装载,TH1和TL1赋的初值一样。
定时器1使用自动重装模式, 即模式2。
TH1 = TL1 = 256 - 11059200/(12 * 32 *9600)
TH1=TL1=0xFD;
实现步骤:
1、 将定时器1置为自动重装模式。
2、 将串口设置为方式1。
3、 根据公式计算出定时器1的初值。
4、 打开定时器1, 打开串口允许接受。
发送字符:
uint8 Buf[]="how are you!\n";void delay(uint16 n)
{while (n--);
}/** UART初始化* 波特率:9600
*/
void UART_init(void)
{SCON = 0x50; // 10位uart,允许串行接受TMOD = 0x20; // 定时器1工作在方式2(自动重装)TH1 = 0xFD;TL1 = 0xFD;TR1 = 1;
}/** UART 发送一字节
*/
void UART_send_byte(uint8 dat)
{SBUF = dat;while (TI == 0);TI = 0;
}/** UART 发送字符串
*/
void UART_send_string(uint8 *buf)
{while (*buf != '\0'){UART_send_byte(*buf++);}
}void main()
{UART_init(); while (1){UART_send_string(Buf);delay(20000);}}
void main()
{unsigned char i;EA = 1; //使能总中断ConfigTimer0(1); //配置T0定时1msConfigUART(9600); //配置波特率为9600while (1){ //将接收字节在数码管上以十六进制形式显示出来disbuf[0] = ucDataOneTab[RxdByte >> 4];disbuf[1] = ucDataOneTab[RxdByte & 0x0F];for (i = 0; i < 8; i++ ){SendData(disbuf[i], ucDataTwoTab[i]); Delay1ms(1);} }
}
/* 串口配置函数,baud-通信波特率 */
void ConfigUART(unsigned int baud)
{SCON = 0x50; //配置串口为模式1TMOD &= 0x0F; //清零T1的控制位TMOD |= 0x20; //配置T1为模式2TH1 = 256 - (11059200/12/32)/baud; //计算T1重载值TL1 = TH1; //初值等于重载值ET1 = 0; //禁止T1中断ES = 1; //使能串口中断TR1 = 1; //启动T1
}
/* UART中断服务函数 */
void InterruptUART() interrupt 4
{if (RI) //接收到字节{RI = 0; //手动清零接收中断标志位RxdByte = SBUF; //接收到的数据保存到接收字节变量中SBUF = (RxdByte>>0x04)+(RxdByte&0x0f); //接收到的数据的高位低位相加返回//用以提示用户输入的信息是否已正确接收}if (TI) //字节发送完毕{TI = 0; //手动清零发送中断标志位}
}
超级简单,不扩展了。。。。
ASCII表:

相关文章:
51单片机串口通讯原理及程序源码-----day8
51单片机串口通讯原理及程序源码-----day8 1.定义单片机为TTL电平:高 5V 低 0V RS232电平: 计算机的串口高 -12V 低12V 所以计算机与单片机之间通讯时需要加电平转换芯片CH340T 、 MAX232。 2.通信分类: (1)并行通信通…...
mongodb入门到使用(下)
mongodb中常用命令操作一、用户操作二、创建用户三、数据库操作基本操作四、扩展操作五、集合操作一、用户操作 在mongo中使用mongodb都需要在admin数据库中操作。然后在使用下面的命令 use admin二、创建用户 db.createUser({"user":"imooc", #用户名&q…...
云HIS系统源码 医院his源码 云his源码
大型医院his系统源码 SaaS运维平台多医院入驻强大的电子病历完整文档 ,有演示 一、系统概述: 基层卫生健康云是一款满足基层医疗机构各类业务需要的健康云产品。该产品能帮助基层医疗机构完成日常各类业务,提供病患挂号支持、病患问诊、电子…...
朴素贝叶斯法学习笔记
频率派和贝叶斯派 频率派认为可以通过大量实验,从样本推断总体。比如假定总体服从均值为μ\muμ,方差为σ\sigmaσ的分布。根据中心极限定理,是可以通过抽样估算总体的参数的,而且抽样次数越多,对总体的估计就越准确。…...
vscode与C++安装与使用【不好用来骂我】
网上教程很多,但是都不太好用,这是我垃圾堆里淘金淘出来的教程: 安装软件 安装 Visual Studio Code: 你需要下载并安装 Visual Studio Code,可以在官网下载 https://code.visualstudio.com/download。 安装 C 扩展: 在 Visual S…...
C++11使用多线程(线程池)计算相似度实现性能优化
需求:图像识别中,注册的样本多了会影响计算速度,成为性能瓶颈,其中一个优化方法就是使用多线程。例如,注册了了3000个特征,每个特征4096个float。可以把3000个特征比对放到4个线程中进行计算,然…...
【测绘程序设计】——平面坐标转换
测绘工程中经常遇到平面坐标转换——比如,北京54(或西安80)平面坐标转换成CGCS2000平面坐标、工程独立坐标系平面坐标转换成CGCS2000平面坐标等,常用转换模型包括:①三参数法(2平移+1旋转);②四参数法(赫尔默特法,2平移+1旋转+1尺度);③六参数法(仿射变换法,2平移…...
五子棋的设计与实现
术:Java等摘要:五子棋是一种两人对弈的纯策略型棋类游戏,非常容易上手,老少皆宜。为了更好的推广五子棋,研究简单的人工智能方式,运用Java开发五子棋游戏。主要包含了人机对战,棋盘初始化&#…...
大数据项目软硬件选择
目录 一.技术选型 二.系统数据流程设计 三.框架版本选型 如何选择Apache/CDH/HDP版本...
redis数据结构的适用场景分析
1、String 类型的内存空间消耗问题,以及选择节省内存开销的数据类型的解决方案。 为什么 String 类型内存开销大? 图片 ID 和图片存储对象 ID 都是 10 位数,我们可以用两个 8 字节的 Long 类型表示这两个 ID。因为 8 字节的 Long 类型最大可以…...
同步、异步、全双工、半双工的区别
1、通讯 1.1 并行通讯 定义:一条信息的各位数据被同时传送的通讯方式称为并行通讯; 特点: 各个数据位同时发送,传送速度快、效率高,但有多少数据位就需要多少根数据线,因此传送成本高,并且只…...
ClickHouse 与 Amazon S3 结合?一起来探索其中奥秘
目录ClickHouse 简介ClickHouse 与对象存储ClickHouse 与 S3 结合的三种方法示例参考架构小结参考资料ClickHouse 简介ClickHouse 是一种快速的、开源的、用于联机分析(OLAP)的列式数据库管理系统(DBMS),由俄罗斯的Yan…...
【Spark分布式内存计算框架——Structured Streaming】1. Structured Streaming 概述
前言 Apache Spark在2016年的时候启动了Structured Streaming项目,一个基于Spark SQL的全新流计算引擎Structured Streaming,让用户像编写批处理程序一样简单地编写高性能的流处理程序。 Structured Streaming并不是对Spark Streaming的简单改进…...
【Windows】【Linux】---- Java证书导入
问题: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target 无法找到请求目标的有效证书路径 一、Windows—java证书导入 1、下载证书到本地(以下…...
【Linux学习】菜鸟入门——gcc与g++简要使用
一、gcc/g gcc/g是编译器,gcc是GCC(GUN Compiler Collection,GUN编译器集合)中的C编译器;g是GCC中的C编译器。使用g编译文件时会自动链接STL标准库,而gcc不会自动链接STL标准库。下面简单介绍一下Linux环境下(Windows差…...
Cadence Allegro 导出Bill of Material Report详解
⏪《上一篇》 🏡《总目录》 ⏩《下一篇》 目录 1,概述2,Assigned Functions Report作用3,Assigned Functions Report示例4,Assigned Functions Report导出方法4.1,方法14.2,方法2B站关注“硬小二”浏览更多演示视频...
localStorage线上问题的思考
一、背景: localStorage作为HTML5 Web Storage的API之一,使用标准的键值对(Key-Value,简称KV)数据类型主要作用是本地存储。本地存储是指将数据按照键值对的方式保存在客户端计算机中,直到用户或者脚本主动清除数据&a…...
什么是DNS域名解析
什么是DNS域名解析?因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。通过主机名,得到该主机名对应的IP地址的过程叫做域名解析。正向解析:…...
Cadence Allegro 导出Assigned Functions Report详解
⏪《上一篇》 🏡《总目录》 ⏩《下一篇》 目录 1,概述2,Assigned Functions Report作用3,Assigned Functions Report示例4,Assigned Functions Report导出方法4.1,方法14.2,方法2B站关注“硬小二”浏览更多演示视频...
Python中Opencv和PIL.Image读取图片的差异对比
近日,在进行深度学习进行推理的时候,发现不管怎么样都得不出正确的结果,再仔细和正确的代码进行对比了后发现原来是Python中不同的库读取的图片数组是有差异的。 image np.array(Image.open(image_file).convert(RGB)) image cv2.imread(…...
KubeSphere 容器平台高可用:环境搭建与可视化操作指南
Linux_k8s篇 欢迎来到Linux的世界,看笔记好好学多敲多打,每个人都是大神! 题目:KubeSphere 容器平台高可用:环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...
【Go】3、Go语言进阶与依赖管理
前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课,做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程,它的核心机制是 Goroutine 协程、Channel 通道,并基于CSP(Communicating Sequential Processes࿰…...
linux 下常用变更-8
1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行,YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID: YW3…...
算法:模拟
1.替换所有的问号 1576. 替换所有的问号 - 力扣(LeetCode) 遍历字符串:通过外层循环逐一检查每个字符。遇到 ? 时处理: 内层循环遍历小写字母(a 到 z)。对每个字母检查是否满足: 与…...
Python基于历史模拟方法实现投资组合风险管理的VaR与ES模型项目实战
说明:这是一个机器学习实战项目(附带数据代码文档),如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 在金融市场日益复杂和波动加剧的背景下,风险管理成为金融机构和个人投资者关注的核心议题之一。VaR&…...
【从零学习JVM|第三篇】类的生命周期(高频面试题)
前言: 在Java编程中,类的生命周期是指类从被加载到内存中开始,到被卸载出内存为止的整个过程。了解类的生命周期对于理解Java程序的运行机制以及性能优化非常重要。本文会深入探寻类的生命周期,让读者对此有深刻印象。 目录 …...
如何更改默认 Crontab 编辑器 ?
在 Linux 领域中,crontab 是您可能经常遇到的一个术语。这个实用程序在类 unix 操作系统上可用,用于调度在预定义时间和间隔自动执行的任务。这对管理员和高级用户非常有益,允许他们自动执行各种系统任务。 编辑 Crontab 文件通常使用文本编…...
关于uniapp展示PDF的解决方案
在 UniApp 的 H5 环境中使用 pdf-vue3 组件可以实现完整的 PDF 预览功能。以下是详细实现步骤和注意事项: 一、安装依赖 安装 pdf-vue3 和 PDF.js 核心库: npm install pdf-vue3 pdfjs-dist二、基本使用示例 <template><view class"con…...
Python 实现 Web 静态服务器(HTTP 协议)
目录 一、在本地启动 HTTP 服务器1. Windows 下安装 node.js1)下载安装包2)配置环境变量3)安装镜像4)node.js 的常用命令 2. 安装 http-server 服务3. 使用 http-server 开启服务1)使用 http-server2)详解 …...
掌握 HTTP 请求:理解 cURL GET 语法
cURL 是一个强大的命令行工具,用于发送 HTTP 请求和与 Web 服务器交互。在 Web 开发和测试中,cURL 经常用于发送 GET 请求来获取服务器资源。本文将详细介绍 cURL GET 请求的语法和使用方法。 一、cURL 基本概念 cURL 是 "Client URL" 的缩写…...
