(5)串口

news2024/11/26 18:21:58

串口是一种应用十分广泛的通讯接口,串口成本低、容易使用、通信线路简单,可实现两个设备的互相通信。

单片机的串口可以使单片机与单片机、单片机与电脑、单片机与各式各样的模块互相通信,极大的扩展了单片机的应用范围,增强了单片机系统的硬件实力。

51单片机内部自带UART(Universal Asynchronous Receiver Transmitter,通用异步收发器),可实现单片机的串口通信。

请添加图片描述

电平标准:是数据1和数据0的表达方式,是传输线缆中人为规定的电压与数据的对应关系

串口常用的电平标准有如下三种:

  1. TTL电平:+5V表示1,0V表示0
  2. RS232电平:-3-15V表示1,+3+15V表示0
  3. RS485电平:两线压差+2+6V表示1,-2-6V表示0(差分信号)

请添加图片描述

  • 全双工:通信双方可以在同一时刻互相传输数据
  • 半双工:通信双方可以互相传输数据,但必须分时复用一根数据线
  • 单工:通信只能有一方发送到另一方,不能反向传输
  • 异步:通信双方各自约定通信速率
  • 同步:通信双方靠一根时钟线来约定通信速率
  • 总线:连接各个设备的数据传输线路(类似于一条马路,把路边各住户连接起来,使住户可以相互交流)

请添加图片描述

  • STC89C52有1个UART
  • STC89C52的UART有四种工作模式:
    • 模式0:同步移位寄存器
    • 模式1:8位UART,波特率可变(常用)
    • 模式2:9位UART,波特率固定
    • 模式3:9位UART,波特率可变

波特率:串口通信的速率(发送和接收各数据位的间隔时间),即异步时约定的间隔时间,用于数据同步

比特率:发送和接收各bit位的间隔时间,用于数据同步

检验位:用于数据验证

奇偶校验
8位数据格式:0110 0011
9位数据格式:0110 0011 1 // 有偶数(4)个1,所以第9位置1 

停止位:用于数据帧间隔

请添加图片描述

请添加图片描述

请添加图片描述

SCON

请添加图片描述

请添加图片描述

请添加图片描述

发送完后硬件将TI置1,中断后必须要再将TI置0

请添加图片描述

SM0/FE	SM1	SM2	REN	TB8	RB8	 TI  RI
  0		 1	0	0	0	0	0	0 // 使用8位UART波特率可变,禁止接收
SCON = 0x40;

SBUF发送接收缓存,不需要初始化设置

请添加图片描述

定时器配置:

默认使用定时器1,8位自动重装模式(模式2)

8位自动重装模式:16位定时器/计数器由两个8位(0~65535)组成,中断时需要置初始值,否则从0开始计数,这种操作会消耗一定时间,所以精度较低。而8位自动重装同样由两个8位组成,但只用一个8位计数,另一个8位负责记录初始值,当中断时记录初始值的8位会自动重装(Auto Reload)到负责计数(CNT)的8位上,省略了手动置初始值的操作,但是计数范围减少到0~255

void UART_Init(){
    SCON = 0x40;
    
    TMOD = 0x20; // 0010 0000 定时器1,模式2
    
    PCON |= 0x80; // SMOD=1 波特率加倍
	//TF0 = 0; // 标志位初始化,防止产生中断
	TR1 = 1; // 运行控制位,开始计数工作
    
	TH1 = 0xF4; // 给计数单元赋初值
	TL1 = 0xF4;
	
	ET1 = 0;// 溢出中断允许位=0,禁止溢出中断
	//EA = 1; // 总中断允许控制位
	//PT0 = 0; // 定时器0中断优先级控制位
    //进行串口时钟定时不需要中断,只需要计数后溢出,通过计数溢出速率即可得到波特率
}
void UART_SendByte(unsigned char Byte){
	SBUF = Byte; // 写操作
	while(TI == 0);
	TI = 0; // 手动恢复TI
}

波特率越低,通讯越稳定,误差越小,也可以Delay几毫秒缓冲一下

串口接收:

REN置1
SCON = 0101 0000 = 0x50;// 或位寻址REN = 1;
EA = 1; // 启动总中断
ES = 1; // 启动串口中断(发送/接收)
void UART_Rountime() interrupt 4 {
	if(RI == 1){
		// 串口接收SBUF
		RI = 0;
	}
}

波特率的计算:

通过T1定时器进行波特率计算,并且因为使用8位自动重装模式所以不需要在每次中断后给TH1、TL1赋初始值

TH1 = 0xF4; // 244
TL1 = 0xF4;
256(8位定时器计数上限) - 244 = 12 // 每计12个数就溢出一次,晶振12MHz,每隔1us计一次数,即每隔12us溢出一次
溢出频率 = 1 / 12us = 0.083333MHz

若SMOD=1则溢出频率直接÷16 = 0.0052083MHz // 双倍波特率
SMOD=0则溢出频率先÷2再÷16 = 0.0026042MHz

波特率 = 0.0052083MHz * 1000 * 1000 = 5208.3Hz
或0.0026042MHz * 1000 * 1000 = 2604.2Hz

数据显示模式:

  • HEX模式/十六进制模式/二进制模式:以原始数据的形式显示
  • 文本模式/字符模式:以原始数据编码后的形式显示

文本模式即将单片机发送的数据根据ASCII进行编码后展示

请添加图片描述

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

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

相关文章

十大排序算法(中):冒泡排序,快速排序(递归和非递归)、归并排序(递归和非递归)

这篇文章,我们接着来讲剩下的排序算法:冒泡排序,快速排序(递归和非递归)、归并排序(递归和非递归) 目录 3.3 交换排序3.3.1 冒泡排序3.3.2 快速排序递归优化非递归优化 3.4 归并排序3.4.1 递归…

Jmeter处理接口签名sign

写接口脚本的时候,很多接口涉及到签名,今天介绍下用Jmeter编写签名脚本的方法。 举个例子,开启红包接口,请求方式为post POST /v1/api/red/open json请求参数 { "red_id":1, "timestamp":"166703384…

springboot+vue学生成绩管理系统(源码+文档)

风定落花生,歌声逐流水,大家好我是风歌,混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的学生成绩管理系统。项目源码以及部署相关请联系风歌,文末附上联系信息 。 💕💕作者:风…

例1:混合物压缩、冷却、分离

例:如图所示流程,一烃类混合物Feed含乙烷0.15(摩尔分数,下同)、丙烷0.20、异丁烷0.60和正丁烷0.05,温度10℃,压力101.3kPa,流量45kmol/h。将其压缩至345kPa后冷却至0℃,送…

博客园主题样式,添加背景音乐,鼠标点击等样式设置

文章目录 1)、 博客园主题样式设置1.1)、 主题文档及地址1.2)、获取文件1.3)、配置CSS1.4)、配置JS1.5)、配置Loading1.6)、其他配置1.7)、个性化配置1.8)、效果预览 2)、背景音乐设置2.1)、单曲添加2.2)、歌单添加2.3)、总结 3)、鼠标点击样式3.1)、Js3.2)、效果预览3.3)、更多…

西门子SCL编程指令状态信息

一、编程时需要考虑的状态信息 在逐步执行运动控制命令时,确保等待激活的命令执行完成后再启动新命令! 使用运动控制指令的状态消息和工艺对象的“StatusBits”变量,可以检查激活的命令是否已完成。 在下例中,请按照所示顺序执行…

51单片机控制步进电机Protues仿真设计

一、概述 1.1步进电机简介 步进电机(Stepper Motor)是一种将电信号转换为机械运动的电动机,是一种专用于精密控制的电机。一般步进电机运行稳定,并且精度较高,因此常用于精密仪器、自动化设备、机器人等需要高精度的…

上传漏洞,后端黑白名单绕过(21)

文件上传常见的验证,:后缀名,类型,文件头等 后缀名指的是白名单和黑名单 文件类型:mime的信息 文件头:内容头信息 我们一个一个来说,这个后缀名,大部分可以上传的对方都不允许脚…

【TCP/IP】TCP报文段的首部格式和流量控制

TCP 报文段的首部格式 TCP 虽然是面向字节流的,但其传送的数据单元却是报文段。一个TCP报文段分为首部和数据两部分,而 TCP 的全部功能的体现在它首部中各字段的作用。 因此,弄清 TCP 报文段首部各字段的作用对掌握 TCP 的工作原理非常重要。…

排查jacoco覆盖率对反射问题的影响

最近业务部门开始推行,在全部后台应用中自动开启覆盖率测试。然而,不久后就有业务测试的同学反馈出现问题。 问题的现象如下: 我们的业务通过 HTTP 调用腾讯OSS的服务,结果得到了以上的报错信息。测试同学验证后发现&#xff0c…

【RocketMQ】004-Spring Boot 集成 RocketMQ

【RocketMQ】004-Spring Boot 集成 RocketMQ 文章目录 【RocketMQ】004-Spring Boot 集成 RocketMQ一、基本使用1、创建 Spring Boot 项目,并引入 RocketMQ 依赖2、application.yml 配置3、消息生产者4、消息消费者5、消息调用接口6、启动 RocketMQ7、启动项目&…

(1)LED

LED正负极:大红旗——负极,小红旗——正极 如何看原理图电阻/电容值: eg: 102 10 2 10 * 10 ^ 2 1000 473 47 3 47 * 10 ^ 3 47000单片机使用TTL电频:高电平(逻辑1)5V 低电平&#xff…

C语言操作符详解(上)

C语言操作符详解&#xff08;上&#xff09; 前言1. 算术操作符2. 移位操作符2.1 左移操作符(<<)2.2 右移操作符&#xff08;>>&#xff09; 3. 位操作符3.1 按位与&#xff08;&&#xff09;3.2 按位或&#xff08;|&#xff09;3.4 按位异或&#xff08;^&am…

(4)定时器

51单片机的定时器属于单片机的内部资源&#xff0c;其电路的连接和运转均在单片机内部完成 作用&#xff1a; 用于计时系统替代长时间Delay&#xff0c;提高运行效率和速度任务切换 STC89C52定时器资源&#xff1a; 定时器个数&#xff1a;3个&#xff08;T0,T1,T2&#xf…

【MySQL】MySQL 运算符

目录 一、运算符简述 二、运算符使用 1.算术运算符 1.1 加法运算符 1.2 减法运算符 1.3 乘法与除法运算符 1.4 求模&#xff08;求余&#xff09;运算符 2.比较运算符 2.1 等号运算符 2.2 安全等于运算符 2.3 不等于运算符 2.4 空运算符 2.5 非空运算符 2.6 最小…

深度剖析Mybatis-plus Injector SQL注入器

背景 在项目中需要同时操作Sql Server 以及 MySQL 数据库&#xff0c;可能平时直接使用 BaseMapper中提供的方法习惯 了&#xff0c;不用的话总感觉影响开发效率&#xff0c;但是两个数据库的SQL语法稍微有点差别&#xff0c;有些暴露的方法并不能直接使用&#xff0c;所以便想…

WebSocket的那些事(3-STOMP实操篇)

目录 一、序言二、STOMP详解1、STOMP简单介绍2、STOMP协议内容3、使用STOMP的好处 三、代码示例1、Maven依赖2、开启WebSocket消息代理3、控制器4、前端页面greeting.html 四、测试1、连接服务端2、发送消息 五、STOMP消息传播流程六、结语 一、序言 上节中我们在 WebSocket的…

(11)LCD1602液晶显示屏

LCD1602&#xff08;Liquid Crystal Display&#xff09;液晶显示屏是一种字符型液晶显示模块&#xff0c;可以显示ASCII码的标准字符和其它的一些内置特殊字符&#xff0c;还可以有8个自定义字符&#xff0c;自带芯片扫描 显示容量&#xff1a;162个字符&#xff0c;每个字符…

【C++】STL六大组件简介

STL(standard template libaray-标准模板库)&#xff1a;是C标准库的重要组成部分&#xff0c;不仅是一个可复用的组件库&#xff0c;而且是一个包罗数据结构与算法的软件框架。 1.STL的版本介绍 原始版本 Alexander Stepanov、Meng Lee 在惠普实验室完成的原始版本&#xff…

Unity里面CG和HLSL在写法上的一些区别

大家好&#xff0c;我是阿赵。这里继续讲URP相关的内容。 这次想讲的是CG和HLSL在写法上的一些区别。 一、为什么开始用HLSL 首先&#xff0c;基本上大家都知道的事情再说一遍。 三种Shader编程语言&#xff1a; 1、基于OpenGL的OpenGL Shading Language&#xff0c;缩写GLSL…