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

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

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

相关文章

[论文笔记]涨点近5%! 以内容中心的检索增强生成可扩展的级联框架:Pistis-RAG

引言 今天带来一篇较新RAG的论文笔记&#xff1a;Pistis-RAG: A Scalable Cascading Framework Towards Content-Centric Retrieval-Augmented Generation。 在希腊神话中&#xff0c;Pistis象征着诚信、信任和可靠性。受到这些原则的启发&#xff0c;Pistis-RAG是一个可扩展…

windows远程桌面到 Linux系统(Ubuntu:22.04)—— 安装xrdp软件

1、在Linux系统上安装xrdp软件 sudo apt update sudo apt install xrdp2、安装完成后&#xff0c;需要开启xrdp服务 sudo systemctl start xrdp sudo systemctl enable xrdp打印返回 Synchronizing state of xrdp.service with SysV service script with /lib/systemd/system…

一键叫车|开发打车小程序,随时随地便利出行!

随着移动互联网的普及&#xff0c;人们出行的方式也在不断发生变化。对于出行多样化和便捷化的需求&#xff0c;一款打车小程序可以方便人们的出行&#xff0c;提高出行效率和便捷性。打车小程序能够根据用户的出行需求为其打造个性化的出行方案&#xff0c;从而让用户的出行生…

【DevOps】在云原生时代的角色与重要性探索

&#x1f407;明明跟你说过&#xff1a;个人主页 &#x1f3c5;个人专栏&#xff1a;《未来已来&#xff1a;云原生之旅》&#x1f3c5; &#x1f516;行路有良友&#xff0c;便是天堂&#x1f516; 目录 一、引言 1、什么是云原生 2、云原生的核心特性 3、什么是DevOps…

【高中数学/指数、对数】已知9^m=10,a=10^m-11,b=8^m-9,则ab两数和0的大小关系是?(2022年全国统考高考真题)

【问题】 已知9^m10,a10^m-11,b8^m-9,则&#xff08;&#xff09; A.a>0>b B.a>b>0 C.b>a>0 D.b>0>a 【解答】 首先注意到10^log10_11-110,8^log8_9-90&#xff0c; 问题就转化为log8_9,log9_10,log10_11谁大谁小的问题&#xff0c; 再进一步…

如何将Docker镜像源更改为阿里云的镜像加速地址

在使用Docker时&#xff0c;尤其是在国内环境下&#xff0c;由于网络原因&#xff0c;从Docker Hub拉取镜像可能会遇到速度较慢的问题。为了提高拉取速度&#xff0c;我们可以将Docker的镜像源更改为阿里云等国内镜像源。下面详细介绍如何获取并配置阿里云的Docker镜像加速地址…

MES系统在装备制造行业核心应用场景介绍

MES软件在企业中有着广泛的应用场景&#xff0c;主要包括生产计划排程、生产过程监控、质量管理、设备管理、库存管理、数据分析等领域。 通过实时监控生产过程、收集数据、进行分析&#xff0c;MES软件可以帮助企业实现生产过程可视化、透明化&#xff0c;提高生产效率&#…

一二三应用开发平台应用开发示例(7)——文档功能实现示例

概述 在完成文件夹配置工作后&#xff0c;接下来配置文档管理系统最核心的管理对象“文档”。 依旧是使用平台低代码配置工作来配置&#xff0c;配置流程跟文件夹的配置是相同的&#xff0c;以下简要说明&#xff0c;重点是新涉及到的功能或注意点。 创建实体 配置模型属性 …

Databricks 收购 Tabular 的意义:数据开放框架的胜利

Databricks 宣布收购 Tabular&#xff0c;这是一个由 Apache Iceberg 的原始创建者开发的数据平台&#xff0c;在数据分析行业引发了涟漪。此次收购凸显了开放框架在数据领域日益增长的重要性&#xff0c;预示着数据管理、分析和 AI/ML 计划领域的创新、协作和可访问性的新时代…

数据库的学习(6)

题目&#xff1a; 数据准备创建两张表:部门(dept)和员工(emp)&#xff0c;并插入数据&#xff0c;代码如下create table dept(dept_id int primary key auto_increment comment 部门编号,dept_name char(20)comment部门名称 ); insert into dept (dept_name) values(销售部),(财…

音视频入门基础:H.264专题(11)——计算视频分辨率的公式

一、引言 通过FFmpeg命令可以获取到H.264裸流文件的视频分辨率&#xff1a; 在vlc中也可以获取到视频分辨率&#xff08;vlc底层也使用了FFmpeg进行解码&#xff09;&#xff1a; 所以FFmpeg和vlc是怎样获取到H.264编码的视频的分辨率呢&#xff1f;它们其实是通过SPS中的属性…

深入理解Java并发、线程与等待通知机制

目录 一、基础概念 进程和线程 进程 线程 Java 线程的无处不在 进程间的通信 进程间通信有几种方式&#xff1f; CPU 核心数和线程数的关系 上下文切换&#xff08;Context switch&#xff09; 并行和并发 二、认识 Java 里的线程 Java 程序天生就是多线程的 线程…

一套基于 Ant Design 和 Blazor 的开源企业级组件库

前言 今天大姚给大家分享一套基于Ant Design和Blazor的开源&#xff08;MIT License&#xff09;、免费的企业级组件库&#xff08;喜欢Ant Design风格的同学推荐使用&#xff09;&#xff1a;Ant Design Blazor。 项目特性 提炼自企业级中后台产品的交互语言和视觉风格。 开…

Java核心技术【二十二】Java的I/O流处理:深入文件读写操作、缓冲流、序列化与NIO

Java的I/O流处理&#xff1a;深入文件读写操作、缓冲流、序列化 在Java编程中&#xff0c;I/O流是处理输入输出操作的基础&#xff0c;特别是在文件读写、网络通信等领域。本文将在前文的基础上&#xff0c;进一步探讨缓冲流、序列化以及NIO&#xff08;New I/O&#xff09;在…

大数据开发者如何快速熟悉新公司业务

作为一名大数据开发工程师,进入一家新公司后快速熟悉业务是至关重要的。 目录 1. 了解产品形态故事1:电商平台的数据分析故事2:金融科技的风控系统故事3:社交媒体的推荐算法 2. 了解业务流程故事1:物流配送系统的优化故事2:医疗保险的理赔流程故事3:银行的贷款审批流程 3. 走…

通过 tomcat 让手机访问到电脑写的 html 网页

之前实现的 html 小项目只能在自己的电脑上展示&#xff0c;如果要在其他电脑或者在手机上就看不到网页了 想要在手机上访问自己写的网页&#xff0c;我们可以借助 tomcat 首先我们可以从官网下载 tomcat 官网链接&#xff1a;apache官网 我们拉到最底部&#xff0c;找到 a…

科普文:Java对象在堆中的内存结构

概叙 今天来讲些抽象的东西 -- 对象头&#xff0c;因为我在学习的过程中发现很多地方都关联到了对象头的知识点&#xff0c;例如JDK中的 synchronized锁优化 和 JVM 中对象年龄升级等等。 对象内存构成# Java 中通过 new 关键字创建一个类的实例对象&#xff0c;对象存于内存的…

7.10日学习打卡----初学Redis(五)

7.10日学习打卡 目录&#xff1a; 7.10日学习打卡一. redis功能流水线pipeline什么是流水线&#xff1f;pipeline实现使用pipeline 发布与订阅Redis的发布与订阅发布订阅命令行实现 慢查询Redis命令执行的整个过程如何进行配置实践建议 二 . redis的持久化机制RDB持久化机制触发…

Golang | Leetcode Golang题解之第227题基本计算器II

题目&#xff1a; 题解&#xff1a; func calculate(s string) (ans int) {stack : []int{}preSign : num : 0for i, ch : range s {isDigit : 0 < ch && ch < 9if isDigit {num num*10 int(ch-0)}if !isDigit && ch ! || i len(s)-1 {switch preS…

JavaSE学习笔记第二弹——对象和多态(下)

今天我们继续复习与JavaSE相关的知识&#xff0c;使用的编译器仍然是IDEA2022&#xff0c;大家伙使用eclipse或其他编译环境是一样的&#xff0c;都可以。 目录 数组 定义 一维数组 ​编辑 二维数组 多维数组 数组的遍历 for循环遍历 ​编辑 foreach遍历 封装、继承和…