51单片机:电脑通过串口控制LED亮灭(附溢出率和波特率详解)
一、功能实现
1.电脑通过串口发送数据:0F

2.点亮4个LED

二、注意事项
1.发送和接受数据的文本模式

2.串口要对应
3.注意串口的波特率要和程序中的波特率保持一致
4.有无校验位和停止位
三、如何使用串口波特率计算器
1.以本程序为例

2.生成代码如下
void Uart1_Init(void) //9600bps@11.0592MHz
{SCON = 0x50; //8位数据,可变波特率AUXR |= 0x40; //定时器时钟1T模式AUXR &= 0xFE; //串口1选择定时器1为波特率发生器TMOD &= 0x0F; //设置定时器模式TL1 = 0xE0; //设置定时初始值TH1 = 0xFE; //设置定时初始值ET1 = 0; //禁止定时器中断TR1 = 1; //定时器1开始计时
}
3.需要手动配置中断系统
根据原理图

配置代码
//手动配置中断系统ES=1;EA=1;PS=0;
四、如何理解软件生成的波特率
void UART_Init()
{//由软件自动生成SCON=0x50; //STC89C52操作手册P235方式1PCON &= 0x7F; //波特率不倍速TMOD &= 0x0F; //设置定时器1模式TMOD |= 0x20; //设置定时器1模式TL1 = 0xFA; //设置定时初始值TH1 = 0xFA; //设置定时重载值ET1 = 0; //禁止定时器中断TR1 = 1; //定时器1开始计时//需要手动配置中断系统ES=1;EA=1;PS=0;
}
以上述代码为例子进行分析
由于配置是8位自动重载,TL1=TH1=0xFA ,0xFA=250;
总计八位,那么数据范围0~255(256溢出)
256-250=6
那么每计6个数溢出一次
晶体振荡器的输出经12 分频后得到输入的时钟脉冲
一个机器周期内有12 个振荡周期。故其频率为晶振频率的1/12。
此设备是11.0592M 的晶振,1.085μs为一个输入脉冲的时间
则6.51μs溢出一次
1/6.51,则0.1536098MHz就是定时器的溢出率
再看PCON=0111 1111
可知SMOD=0(参考串口模式图)
那么波特率=0.1536098MHz /2 /16
波特率为0.00480030625MHz约等于4800Hz
约等于没有误差
串口模式图

五、如何计算波特率
参考STC89C52手册P235

六、串口中断函数
中断函数(函数可自由命名,但是要加上中断号"interrupt 4")
void UART_Routine(void) interrupt 4
{if (TI==1) //检测串口1发送中断{//功能......TI = 0; //清除串口1发送中断请求位}if (RI==1) //检测串口1接收中断{//功能......RI = 0; //清除串口1接收中断请求位}
}
中断函数查询表P166

七、模块化代码:
1.main.c
#include <REGX52.H>
#include "UART.h"unsigned char Sec=0;void main()
{UART_Init();while(1){}}/*** @brief 中断函数查询P166,函数命名可自由,但是要更上中断号"interrupt 4"* @param 无* @retval 无*/
void UART_Routine(void) interrupt 4
{if(RI==1){P2=~SBUF;RI=0;}
}
2.UART.c
#include <REGX52.H>/*** @brief 串口初始化//4800bps@11.0592MHz* @param 无* @retval 无*/void UART_Init()
{SCON=0x50; //STC89C52操作手册P235方式1PCON &= 0x7F; //波特率不倍速TMOD &= 0x0F; //设置定时器1模式TMOD |= 0x20; //设置定时器1模式TL1 = 0xFA; //设置定时初始值TH1 = 0xFA; //设置定时重载值ET1 = 0; //禁止定时器中断TR1 = 1; //定时器1开始计时//补上中断系统ES=1;EA=1;PS=0;
}/*** @brief 串口发送一个字节的数据* @param Byte 要发送的一个字节数据* @retval 无*/void UART_SendByte(unsigned char Byte)
{SBUF=Byte;while(TI==0); //TI=0,数据完整发送出去,TI=1,跳出循环TI=0; //TI=0,使用软件复位}
3.UART.h
#ifndef __UART_H__
#define __UART_H__void UART_Init();void UART_SendByte(unsigned char Byte);#endif
相关文章:
51单片机:电脑通过串口控制LED亮灭(附溢出率和波特率详解)
一、功能实现 1.电脑通过串口发送数据:0F 2.点亮4个LED 二、注意事项 1.发送和接受数据的文本模式 2.串口要对应 3.注意串口的波特率要和程序中的波特率保持一致 4.有无校验位和停止位 三、如何使用串口波特率计算器 1.以本程序为例 2.生成代码如下 void Uar…...
Java中的消息中间件选择与比较
Java中的消息中间件选择与比较 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿! 在分布式系统中,消息中间件是一种关键组件,它能帮助不同…...
react基础语法,模板语法,ui渲染,jsx,useState状态管理
创建一个react应用 这里使用create-react-app的脚手架构建项目(结构简洁,基于webpack-cli), npx create-react-app [项目名称] 使用其他脚手架构建项目可以参考:react框架,使用vite和nextjs构建react项目…...
OJ-0710
示例1 input 4 100 200 300 5001 21 32 4output700100 200 500 300 示例2 input 4 100 200 300 500 1 2 1 3 1 4output1100100 200500300 示例3 input 6 100 200 300 400 300 550 1 2 1 3 1 4 2 5 2 6output1050100 200 300600 300400 import java.util.ArrayList; im…...
人工智能在自动驾驶中的目标检测研究
摘要 随着自动驾驶技术的快速发展,视觉识别作为核心技术之一,扮演着至关重要的角色。本文旨在探讨人工智能如何通过视觉识别在自动驾驶中进行目标检测。我们将详细讨论目标检测的基本原理、常用算法、最新进展、已有的开源项目及其在自动驾驶中的应用和…...
【合并两个有序数组】
合并两个有序数组 一、题目二、普通解法三、双指针 一、题目 二、普通解法 先合并后排序 补充:js合并数组方法详见https://blog.csdn.net/ACCPluzhiqi/article/details/131702269?fromshareblogdetail js排序方法见http://t.csdnimg.cn/wVCOP 时间复杂度:O(mn)…...
链表 OJ(一)
移除链表元素 题目连接: https://leetcode.cn/problems/remove-linked-list-elements/description/ 使用双指针法,开始时,一个指针指向头节点,另一个指针指向头节点的下一个结点,然后开始遍历链表删除结点。 这里要注…...
《Linux与Windows文件系统的区别》
Linux与Windows文件系统的区别 在计算机操作系统领域,Linux和Windows是两种广泛使用的操作系统,它们在文件系统方面有许多显著的差异。这篇博客将详细介绍这两种操作系统文件系统的区别,帮助读者更好地理解它们各自的特点和优势。 类别Linu…...
批量修改Git历史commit信息中的username
之前很长一段时间GitHub上的提交都在使用工作账户, 导致私人仓库中的提交者比较混乱. 在StackOver里面找到了一个bash脚本可以批量修改username, 在这里记录一下. 修改的步骤一共两步: 执行修改脚本将本地修改同步到Git服务器 首先我们来看脚本: #!/bin/shgit filter-branch…...
LabVIEW与ABB工业机器人据监控
1. 前言 随着工业自动化的发展,工业机器人在制造业中的应用越来越广泛。为了实现对工业机器人的高效监控和控制,本文介绍了利用OPC(OLE for Process Control)服务器将ABB工业机器人与LabVIEW连接起来的解决方案。通过OPC服务器…...
c++栈内存和堆内存的基本使用
c栈内存和堆内存的基本使用 #include <iostream>// 定义一个简单的结构体 struct Person {std::string name;int age; };int main() {// 栈内存分配int a 10; // 基本数据类型的栈内存分配Person person; // 结构体的栈内存分配person.name "John";person.a…...
快速入门,springboot知识点汇总
学习 springboot 应该像学习一门编程语言一样,首先要熟练掌握常用的知识,而对于不常用的内容可以简单了解一下。先对整个框架和语言有一个大致的轮廓,然后再逐步补充细节。 前序: Spring Boot 通过简化配置和提供开箱即用的特性,…...
Ubuntu20.04系统非root用户安装GAMIT10.71
(测试环境:20240701升级包和20240701数据,解算通过) QQ:8212714 群:302883438群文件(source安装包20240701升级包) 1、首先在计算机中安装VMware Workstation 16 Pro。建议:分配…...
stm32 开发板可以拿来做什么?
STM32开发板可以用来做许多不同的事情,具体取决于您的应用需求和编程能力。我收集归类了一份嵌入式学习包,对于新手而言简直不要太棒,里面包括了新手各个时期的学习方向编程教学、问题视频讲解、毕设800套和语言类教学,敲个22就可…...
latex英文转中文word,及一些latex相关工具分享
前言:想要转换latex生成的英文pdf文件为中文word文件 一、主要步骤 1、文字翻译:直接使用谷歌翻译等辅助将英文翻译成中文即可; 支持英文pdf文件全文翻译,再用迅捷PDF转换器之类的转成word,再手动调整。 https://app…...
EasyOCR: 简单易用的多语言OCR工具
EasyOCR: 简单易用的多语言OCR工具 1. 什么是EasyOCR?2. 使用场景3. 基本使用方法安装示例代码代码解释 4. 结语 1. 什么是EasyOCR? EasyOCR是一个基于Python的开源光学字符识别(OCR)工具,它支持80多种语言的文本识别。该项目由JaidedAI开发,旨在提供一个简单易用但功能强大…...
arm架构安装chrome
在ARM架构设备上安装谷歌软件或应用通常涉及到几个步骤,这取决于你要安装的具体谷歌产品,比如谷歌浏览器、Google Play服务或者是其他谷歌开发的软件。下面我会给出一些常见的指导步骤,以安装谷歌浏览器为例: 在Linux ARM64上安装…...
ETAS工具导入Com Arxml修改步骤
文章目录 前言Confgen之前的更改Confgen之后的修改CANCanIfComComMEcuM修改CanNmCanSMDCMCanTp生成RTE过程报错修改DEXT-诊断文件修改Extract问题总结前言 通讯协议栈开发一般通过导入DBC实现,ETAS工具本身导入DBC也是生成arxml后执行cfggen,本文介绍直接导入客户提供的arxml…...
Apache Kylin模型构建全解析:深入理解大数据的多维分析
引言 Apache Kylin是一个开源的分布式分析引擎,旨在为大数据提供快速的多维分析能力。它通过预计算技术,将数据转化为立方体模型(Cube),从而实现对Hadoop大数据集的秒级查询响应。本文将详细介绍Kylin中模型构建的全过…...
element-plus的文件上传组件el-upload
el-upload组件 支持多种风格,如文件列表,图片,图片卡片,支持多种事件,预览,删除,上传成功,上传中等钩子。 file-list:上传的文件集合,一定要用v-model:file-…...
synchronized 学习
学习源: https://www.bilibili.com/video/BV1aJ411V763?spm_id_from333.788.videopod.episodes&vd_source32e1c41a9370911ab06d12fbc36c4ebc 1.应用场景 不超卖,也要考虑性能问题(场景) 2.常见面试问题: sync出…...
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...
shell脚本--常见案例
1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件: 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...
mongodb源码分析session执行handleRequest命令find过程
mongo/transport/service_state_machine.cpp已经分析startSession创建ASIOSession过程,并且验证connection是否超过限制ASIOSession和connection是循环接受客户端命令,把数据流转换成Message,状态转变流程是:State::Created 》 St…...
Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件
今天呢,博主的学习进度也是步入了Java Mybatis 框架,目前正在逐步杨帆旗航。 那么接下来就给大家出一期有关 Mybatis 逆向工程的教学,希望能对大家有所帮助,也特别欢迎大家指点不足之处,小生很乐意接受正确的建议&…...
2021-03-15 iview一些问题
1.iview 在使用tree组件时,发现没有set类的方法,只有get,那么要改变tree值,只能遍历treeData,递归修改treeData的checked,发现无法更改,原因在于check模式下,子元素的勾选状态跟父节…...
【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】
1. BluetoothProperties介绍 libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop BluetoothProperties.sysprop 是 Android AOSP 中的一种 系统属性定义文件(System Property Definition File),用于声明和管理 Bluetooth 模块相…...
自然语言处理——Transformer
自然语言处理——Transformer 自注意力机制多头注意力机制Transformer 虽然循环神经网络可以对具有序列特性的数据非常有效,它能挖掘数据中的时序信息以及语义信息,但是它有一个很大的缺陷——很难并行化。 我们可以考虑用CNN来替代RNN,但是…...
关键领域软件测试的突围之路:如何破解安全与效率的平衡难题
在数字化浪潮席卷全球的今天,软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件,这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下,实现高效测试与快速迭代?这一命题正考验着…...
视觉slam十四讲实践部分记录——ch2、ch3
ch2 一、使用g++编译.cpp为可执行文件并运行(P30) g++ helloSLAM.cpp ./a.out运行 二、使用cmake编译 mkdir build cd build cmake .. makeCMakeCache.txt 文件仍然指向旧的目录。这表明在源代码目录中可能还存在旧的 CMakeCache.txt 文件,或者在构建过程中仍然引用了旧的路…...
