当前位置: 首页 > news >正文

STC89C52学习笔记(七)

STC89C52学习笔记(

综述:本文介绍了串口以及讲述了串口相关寄存器如何配置并给予相关代码。

一、修改代码注意事项

在修改代码时不要一次性加入一堆代码,不利于定位错误。可以先注释一些代码,待解决完毕问题后再去除一些注释。

二、串口

1.定义

串口是一种通讯接口,可以实现两个设备互相通信。51单片机内部自带UART(通用异步收发器),可以实现单片机的串口通信。

2.连接

①单片机上有串口,然后电脑利用串口助手,就可以实现单片机与电脑的串口通信。

②蓝牙串口模块,信号通过串口发送给他,然后通过手机上的蓝牙app,达到手机和单片机的串口通信。(单片机→蓝牙串口模块→手机蓝牙app)

3.特点

①简单的串口有两根通讯线:TXD和RXD(TXD:transimit exchange data;RXD:receive exchange data)。

②两根通讯线为交叉连接,当双向通讯时,需要两根通讯线,仅仅单项数据传输时,只需要一根通讯线。

③串口常用的电平标准有三种:TTL电平(晶体管晶体管逻辑,单片机就是用这种电平逻辑,+5V表示1,0V表示0)、RS232电平(-3~-15表示1,+3~+15表示0)、RS485电平(两线差+2~+6表示1,-2~-6表示0)。

通讯至少需要3根线:GND、TXD和RXD。如果设备1和设备2都是独立供电的,那么可以不用VCC接线。但是,如果设备2是一个模块,不是独立供电,那么设备1需要给设备2供电。

⑤全双工:通信双方可以在同一时刻互相传输;半双工,通讯双方可以在互相通讯,但是不能同时;单工:通讯只能由一方发送到另一端。

⑥异步:通信双方各自约定通信速率;同步:通信双方用同一根时钟线约定通信速率。

4.51单片机的UART

①STC89C52的RXD端口在P3.0,TXD端口在P3.1

②STC89C52有1个UART

③STC89C52的UART有四种工作模式:模式1:同步移位寄存器。模式二:8位UART,波特率可以改变。模式三:9位UART,波特率可以改变。模式四:9位UART,波特率可以改变。

③串口参数

1)波特率:串口发送/接收数据为的间隔时间,也就是串口通信的速率

2)校验位:有奇、偶检验和0、1校验

④串口时序图

8位数据格式的时序图

9位数据格式的时序图

⑤串口模式图

时钟部分:中间部分控制收发器的采样时间来控制波特率。

发送:单片机先将数据写入寄存器SBUF(Sever buffer串口缓存寄存器)中,再通过发送控制器将数据发送出去,发送完成产生相应的中断。

接收时,通过移位寄存器即受到SBUF,再通过单片机读取数据,接收完成产生相应的中断。

⑥串口和中断系统

⑦初始化串口

1)对于寄存器SCON的配置,由于这里的串口选择工作模式二(8位UART,波特率可以改变),于是SM0 SM1应配置为0 1,于是程序应为:“SCON=0x40;”

2)对于电源控制寄存器说明如下,SMOD和SMOD0均为1,于是,PCON寄存器应该配置为:“PCON|=0x80;”

3)定时器

8位自动重装定时器和16位定时器的区别:16位记的数据多(65535),但是每次都需要自己写代码赋初值,浪费时间。双8位就是将16位分开,一个计数(255),另一个存放初值,每次计数完成后AR会自动将值赋给CNT,不用代码处理,比较快,但只有8位所以记的数少了。

于是,这里配置定时器1的模式应该为:将TMOD配置为0010 0000,也即是“TMOD &= 0x0F;TMOD |= 0x20;”

4)利用stc-isp软件自动计算波特率。

5)启动定时器1,代码为“TR1=1”

6)完整的串口初始化函数如下

void UART_Init()   //4800bps@12.000MHz
{PCON|=0x80;SCON=0x40;TMOD &= 0x0F;		//设置定时器模式TMOD |= 0x20;		//设置定时器模式TL1 = 0xF3;		//设定定时初值TH1 = 0xF3;	//设定定时初值TF0 = 0;		//清除TF0标志TR0 = 1;		//定时器0开始计时
}

⑧发送数据

1)由之前⑤可以知道,发送数据是先写入在寄存器SBUF里面,所以,程序可以写为:“SBUF=Byte;”

2)当发送的数据过多时,不是一下子就可以完成发送的,于是需要检验是否发送完成,这里是根据检验发送完成标志位TI,程序为:“while(TI==0);”

3)由于发送完成后需要对TI进行软件复位,于是程序应为:“TI=0;”

完整的串口发送程序如下:

void UART_SendByte(unsigned char Byte)
{SBUF=Byte;while(TI==0);TI=0;
}

4)下载程序并打开串口,配置好串口的参数:串口端号、串口的波特率(4800)、校验位和停止位。


参考视频:51单片机学习.视频

侵权联系删除!

相关文章:

STC89C52学习笔记(七)

STC89C52学习笔记(七) 综述:本文介绍了串口以及讲述了串口相关寄存器如何配置并给予相关代码。 一、修改代码注意事项 在修改代码时不要一次性加入一堆代码,不利于定位错误。可以先注释一些代码,待解决完毕问题后再…...

嵌入式|蓝桥杯STM32G431(HAL库开发)——CT117E学习笔记16:蓝桥杯编程手册

一、要背的函数汇总(以例子形式) 1.GPIO相关 输出:HAL_GPIO_WritePin(GPIOC,GPIO_PIN_8 | GPIO_PIN_9,GPIO_PIN_SET) 输入:HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_0) 翻转:HAL_GPIO_TogglePin(GPIOC,0xFF) 2.LCD相关 …...

doris2.0.7 安装

1,查看操作系统 lsb_release -a #Distributor ID: Ubuntu #Description: Ubuntu 22.04.3 LTS #Release: 22.04 #Codename: jammy 2,安装zip,mysql-client apt install mysql-client apt install zip 3,安装jdk apt inst…...

智慧园区水电能源监控管理系统

随着智慧城市的快速发展,智慧园区作为城市智能化的重要组成部分,其能源监控管理系统显得尤为关键。智慧园区水电能源监控管理系统,是利用先进的信息技术和自动控制技术,对园区内的水电能源使用进行实时监控、管理和优化的综合性智…...

Kafka基础/1

Kafka 概念 Kafka 是一个分布式的流媒体平台。 应用:消息系统、日志收集、用户行为追踪、流式处理 特点:高吞吐量、消息持久化、高可靠性、高扩展性 术语: broker:Kafka 的服务器,Kafka 当中每一台服务器&#xf…...

Jupyter Notebook中常见的快捷键

Jupyter Notebook的快捷键主要分为两种模式:命令模式和编辑模式。 在命令模式下,键盘输入用于运行程序命令,此时单元格框线是蓝色的; 在编辑模式下,可以往单元格中键入代码或文本,此时单元格框线是绿色的…...

《前端面试题》- JS基础 - call()、apply()、bind() 的区别

call 、bind 、 apply 这三个函数的功能都是改变this的指向问题,但是也存在一定的区别。 call 的参数是直接放进去的,第二第三第 n 个参数全都用逗号分隔,apply 的所有参数都必须放在一个数组里面传进去bind 除了返回是函数以外,它 的参数和…...

开源软件技术社区方案

开源软件技术社区是一个由开发者、贡献者、用户和维护者组成的共享平台,主要目的是打造技术、软件产品良性互动、开源技术安全可控的软件生态环境,实现可复用应用或服务的快速部署与使用、完成资源与能力的高度共享、促进社区成员的共建共赢,…...

【开源书籍】深入讲解内核网络、Kubernetes、ServiceMesh、容器等云原生相关技术。

项目地址:GitHub - isno/theByteBook: ⭐ 【开源书籍】深入讲解内核网络、Kubernetes、ServiceMesh、容器等云原生相关技术。经历实践检验的 DevOps、SRE指南。如发现错误,谢谢提issue 深入架构原理与实践 这是什么? 这是一本关于架构设计…...

【C语言】“vid”Microsoft Visual Studio安装及应用(检验内存泄露)

文章目录 前言安装包获取配置VLD完成 前言 我们在写代码时往往容易存在内存泄漏的情况,所以存在这样一个名为VLD的工具用来检验内存泄漏,现在我来教大家安装一下 安装包获取 vld下载网址:https://github.com/KindDragon/vld/releases/tag/…...

Accuracy准确率,Precision精确率,Recall召回率,F1 score

真正例和真反例是被正确预测的数据,假正例和假反例是被错误预测的数据。然后我们需要理解这四个值的具体含义: TP(True Positive):被正确预测的正例。即该数据的真实值为正例,预测值也为正例的情况&#xf…...

系统架构最佳实践 -- 智慧图书管理系统架构设计

随着数字化时代的到来,智慧图书管理系统在图书馆和机构中扮演着重要的角色。一个优秀的图书管理系统不仅需要满足基本的借阅管理需求,还需要具备高效的性能、良好的扩展性和稳定的安全性。本文将讨论智慧图书管理系统的架构设计与实现,以满足…...

网络基础三——IP协议补充和Mac帧协议

全球网络及网段划分的理解 ​ 根据国家组织地区人口综合评估进行IP地址范围的划分; ​ 假设前8位用来区分不同的国家,国际路由器负责全球数据传输,子网掩码为IP/8;次6位区分不同的省份,国内路由器负责全国数据的传输…...

人工智能——深度学习

4. 深度学习 4.1. 概念 深度学习是一种机器学习的分支,旨在通过构建和训练多层神经网络模型来实现数据的高级特征表达和复杂模式识别。与传统机器学习算法相比,深度学习具有以下特点: 多层表示学习:深度学习使用深层神经网络&a…...

postgresql uuid

示例数据库版本PG16,对于参照官方文档截图,可以在最上方切换到对应版本查看,相差不大。 方法一:自带函数 select gen_random_uuid(); 去掉四个斜杠,简化成32位 select replace(gen_random_uuid()::text, -, ); 官网介绍…...

【azure笔记 1】容器实例管理python sdk封装

容器实例管理python sdk封装 测试结果 说明 这是根据我的需求写的,所以有些参数是写死的,比如cpu核数和内存,你可以根据你的需要自行修改。前置条件: 当前环境已安装python3.8以上版本和azure cli并且已经登陆到你的账户 依赖安…...

Nestjs 中定义既可以捕获错误(Error)和又可以异常(Exception)的过滤器

Nestjs 中,使用基于 HttpException 定义过滤器的话,只能捕获 Http 带状态码(statusCode)的 Exception,不能捕获 throw new Error(‘xxx’) 抛出的错误。 以下是使用实现 ExceptionFilter 接口定义的一个不特定于平台(express 或 fastify,即无论使用这两个web服务框架的…...

GitHub 仓库 (repository) Branch - SSH clone URL - Clone in Desktop - Download ZIP

GitHub 仓库 [repository] Branch - SSH clone URL - Clone in Desktop - Download ZIP 1. Branch2. SSH clone URL3. Clone in Desktop4. Download ZIPReferences 1. Branch 显示当前分支的名称。从这里可以切换仓库内分支,查看其他分支的文件。 2. SSH clo…...

Training - 使用 WandB 配置 可视化 模型训练参数

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://blog.csdn.net/caroline_wendy/article/details/137529140 WandB (Weights&Biases) 是轻量级的在线模型训练可视化工具,类似于 TensorBoard,可以帮助用户跟踪…...

N1922A是德科技N1922A功率传感器

181/2461/8938产品概述: N192XA 传感器是首款通过将直流参考源和开关电路集成到功率传感器中来提供内部调零和校准的传感器。此功能消除了与使用外部校准源相关的多个连接,从而最大限度地减少了连接器磨损、测试时间和测量不确定性。 连接到 DUT 时进行…...

uniapp 对接腾讯云IM群组成员管理(增删改查)

UniApp 实战:腾讯云IM群组成员管理(增删改查) 一、前言 在社交类App开发中,群组成员管理是核心功能之一。本文将基于UniApp框架,结合腾讯云IM SDK,详细讲解如何实现群组成员的增删改查全流程。 权限校验…...

linux之kylin系统nginx的安装

一、nginx的作用 1.可做高性能的web服务器 直接处理静态资源(HTML/CSS/图片等),响应速度远超传统服务器类似apache支持高并发连接 2.反向代理服务器 隐藏后端服务器IP地址,提高安全性 3.负载均衡服务器 支持多种策略分发流量…...

Cinnamon修改面板小工具图标

Cinnamon开始菜单-CSDN博客 设置模块都是做好的,比GNOME简单得多! 在 applet.js 里增加 const Settings imports.ui.settings;this.settings new Settings.AppletSettings(this, HTYMenusonichy, instance_id); this.settings.bind(menu-icon, menu…...

学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1

每日一言 生活的美好,总是藏在那些你咬牙坚持的日子里。 硬件:OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写,"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...

视频字幕质量评估的大规模细粒度基准

大家读完觉得有帮助记得关注和点赞!!! 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用,因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型(VLMs)在字幕生成方面…...

大模型多显卡多服务器并行计算方法与实践指南

一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...

力扣热题100 k个一组反转链表题解

题目: 代码: func reverseKGroup(head *ListNode, k int) *ListNode {cur : headfor i : 0; i < k; i {if cur nil {return head}cur cur.Next}newHead : reverse(head, cur)head.Next reverseKGroup(cur, k)return newHead }func reverse(start, end *ListNode) *ListN…...

代码规范和架构【立芯理论一】(2025.06.08)

1、代码规范的目标 代码简洁精炼、美观&#xff0c;可持续性好高效率高复用&#xff0c;可移植性好高内聚&#xff0c;低耦合没有冗余规范性&#xff0c;代码有规可循&#xff0c;可以看出自己当时的思考过程特殊排版&#xff0c;特殊语法&#xff0c;特殊指令&#xff0c;必须…...

Unity UGUI Button事件流程

场景结构 测试代码 public class TestBtn : MonoBehaviour {void Start(){var btn GetComponent<Button>();btn.onClick.AddListener(OnClick);}private void OnClick(){Debug.Log("666");}}当添加事件时 // 实例化一个ButtonClickedEvent的事件 [Formerl…...

从零开始了解数据采集(二十八)——制造业数字孪生

近年来&#xff0c;我国的工业领域正经历一场前所未有的数字化变革&#xff0c;从“双碳目标”到工业互联网平台的推广&#xff0c;国家政策和市场需求共同推动了制造业的升级。在这场变革中&#xff0c;数字孪生技术成为备受关注的关键工具&#xff0c;它不仅让企业“看见”设…...