2025蓝桥杯(单片机)备赛--扩展外设之UART1的原理与应用(十二)

一、串口1的实现原理

        a.查看STC15F2K60S2数据手册:

        29ab8197dfda4b41941ab025ef5b56dc.png

        串口一在590页,此款单片机有两个串口。

串口1相关寄存器:

67015b00ae504fe58a96af107f61b694.png

SCON:串行控制寄存器(可位寻址)

c64efa6176ac428a822c996fba6ef430.png

85eafdfd81f846ca9b658b2b275daf39.png

4215d99c0971485191f3fe3d60e3a772.png

b9e67d26c30445898a520538116e2607.png

4c2088ec56cf4045b5421aef1b1c0fc4.png

SCON寄存器说明:

                需要PCON寄存器的SMOD0/PCON.6为0,使SM0和SM1一起指定工作模式,这里选择工作模式1,REN位置1,允许接受,

TI, R1 在中断里面 调用。    

        SCON=0X50;    0101 0000

    PCON寄存器:

464fcca55a764c1bbd38d89d6766ff91.png

PCON寄存器说明:

            SMOD无论0还是1,串口1波特率 都加倍,SMOD0必须为0,才可选择工作模式。所以PCON=0x00(默认也是0X00);

    SBUF数据缓冲寄存器:

855620bf340c4c2c84e11d66e02844bd.png

说明:实际上两个缓冲器,一个是度寄存器,一个是写寄存器。把要发送的数据写到SBUF里面,从SBUF立马接收数据,SBUF大小为1个字节。

AUXR辅助寄存器:

ef53d4c8eef74e899e0f9bd3b95f5b10.png

a189819a6fb540d0aa0e7d2d5d18482c.png

AUXR寄存器说明:控制串口1的速度都为1T,采用定时器1作为串口1的波特率发生器。

dafa01c5fb7d48e69ac947a2c62e6129.png

由于还用到了定时器1,所以还要 配置 定时器1的工作模式,工作模式为16位自动重装模式,设置定时器1初始值,禁止定时器1中断,开启定时器1.

57095c4520a4448cab98f9e3a768115a.png

//定时器1配置代码
{TMOD&=0X0F;TL1=0;TH1=0;ET1=0;TR1=1; 
}

ca041fc9f1284627ad40d7d7353b866f.png

28dff7d913fb4af4a594cf0560018c5a.png

串口1中断配置:

f795c2c6d4cb4afaaa356c6f87364711.png

1d3f6f7ee3f5455588aebec3f46e98cd.png

18a3a181f9e84681b673df4ee69c7914.png

fe66be9b020345aea36db63b9ce806ce.png

说明:可知其中断标志位为ES,可以位寻址,所以可以直接给ES赋值,我们需要开启,ES=1;EA=1;

2  串口1初始化代码:

void Uart1_Init(void)    //4800bps@12.000MHz
{SCON = 0x50;    //8位数据,可变波特率AUXR |= 0x40;    //定时器时钟1T模式AUXR &= 0xFE;    //串口1选择定时器1为波特率发生器TMOD &= 0x0F;    //设置定时器模式TL1 = 0x8F;     //设置定时初始值TH1 = 0xFD;    //设置定时初始值ET1 = 0;    //禁止定时器中断TR1 = 1;    //定时器1开始计时//记得开启中断ES=1;EA=1;
}

串口中断函数:

7483fc81271440d59d486e6a86709659.png

可知 中断号为4

串口1中断代码:

void UART1_Routine(void) interrupt 4
{if(RI){//接受定长字符RI=0;rx_clear_cnt=0;rx_buf[rx_long++] = SBUF;if(rx_long==3){rx_long=0;rx_flag=1;}//接受不定长字符RI=0;rx_clear_cnt=0;rx_buf[rx_long++]=SBUF;if(rx_buf=='\n'){rx_long=0;rx_flag=1;}}if(TI){TI=0;busy=0;//发送忙标志位   }
}

串口1发送函数:

void SendByte(u8 byte)
{while(busy);busy=1;//申请忙碌,进入保护,防止干扰SBUF=byte;
}
void SendString(u8* str)
{while(*str){SendByte(*str++);}
}

定时清除串口接收内容:

void  RXClear_Process(void){rx_clear_cnt++;if(rx_clear_cnt>=50){ rx_cleat_cnt=0;rx_long=0;memset(rx_buf,'\0',sizeof(rx_buf);}}

2025蓝桥杯(单片机)备赛--扩展外设之超声波测距原理与应用(十一)-CSDN博客

2025蓝桥杯(单片机)备赛--扩展外设之DS1302的使用(九)_ds1302引脚图及功能-CSDN博客

2025蓝桥杯(单片机)备赛--扩展外设之I2C的重要应用--PCF8591(八)-CSDN博客

2025蓝桥杯(单片机)备赛--扩展外设之I2C的重要应用--AT24C02(七)-CSDN博客

2025蓝桥杯(单片机)备赛--扩展外设控制之DS18B20(六)-CSDN博客

2025蓝桥杯(单片机)备赛--基本外设控制之共阳数码管(四)-CSDN博客

2025蓝桥杯(单片机)备赛--基本外设控制之继电器和蜂鸣器(三)-CSDN博客

2025蓝桥杯(单片机)备赛--基本外设控制之LED(二)_2024蓝桥杯单片机资料-CSDN博客

2025蓝桥杯(单片机)备赛--基本框架搭建(一)_蓝桥杯单片机大赛-CSDN博客

 

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

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

相关文章

Reactor 模式的理论与实践

1. 引言 1.1 什么是 Reactor 模式? Reactor 模式是一种用于处理高性能 I/O 的设计模式,专注于通过非阻塞 I/O 和事件驱动机制实现高并发性能。它的核心思想是将 I/O 操作的事件分离出来,通过事件分发器(Reactor)将事…

【Android+多线程】IntentService 知识总结:应用场景 / 使用步骤 / 源码分析

定义 IntentService 是 Android中的一个封装类,继承自四大组件之一的Service 功能 处理异步请求 & 实现多线程 应用场景 线程任务 需 按顺序、在后台执行 最常见的场景:离线下载不符合多个数据同时请求的场景:所有的任务都在同一个T…

Easy Excel 通过【自定义批注拦截器】实现导出的【批注】功能

目录 Easy Excel 通过 【自定义批注拦截器】实现导出的【批注】功能需求原型:相关数据:要导出的对象字段postman 格式导出对象VO 自定义批注拦截器业务代码: 拦截器代码解释:详细解释:格式优化: Easy Excel…

Spring Boot 的 WebClient 实践教程

什么是 WebClient? 在 Spring Boot 中,WebClient 是 Spring WebFlux 提供的一个非阻塞、响应式的 HTTP 客户端,用于与 RESTful 服务或其他 HTTP 服务交互。相比于传统的 RestTemplate,WebClient 更加现代化,具有异步和…

QML学习 —— 29、3种不同使用动画的方式(附源码)

效果 说明 第一种:属性动画 - 当启动软件时候自动执行动画。      第二种:行为动画 - 当属性发生变化则自动执行动画。      第三种:目标动画 - 将动画变为对象,指定对象的目标进行执行动画。 代码 import QtQuick 2.12 import QtQuick.Window 2.12 import QtQu…

Redis缓存穿透及常见的解决方案

一.什么是缓存穿透? 缓存穿透是指当客户端请求的数据在缓存(如 Redis)中不存在,并且在数据库中也不存在时,直接绕过缓存去请求数据库。这种情况会导致: 缓存系统无法发挥作用,数据每次都会直接…

(原创)Android Studio新老界面UI切换及老版本下载地址

前言 这两天下载了一个新版的Android Studio,发现整个界面都发生了很大改动: 新的界面的一些设置可参考一些博客: Android Studio新版UI常用设置 但是对于一些急着开发的小伙伴来说,没有时间去适应,那么怎么办呢&am…

windows下安装wsl的ubuntu,同时配置深度学习环境

写在前面,本次文章只是个人学习记录,不具备教程的作用。个别信息是网上的,我会标注,个人是gpt生成的 安装wsl 直接看这个就行;可以不用备份软件源。 https://blog.csdn.net/weixin_44301630/article/details/1223900…

Node.js的http模块:创建HTTP服务器、客户端示例

新书速览|Vue.jsNode.js全栈开发实战-CSDN博客 《Vue.jsNode.js全栈开发实战(第2版)(Web前端技术丛书)》(王金柱)【摘要 书评 试读】- 京东图书 (jd.com) 要使用http模块,只需要在文件中通过require(http)引入即可。…

AI赋能电商:构建高效、智能化的新零售生态

随着人工智能(AI)技术的不断进步,其在电商领域的应用日益广泛,从购物推荐到供应链管理,再到商品定价,AI正在全面改变传统电商的运营模式,并推动行业向智能化和精细化方向发展。本文将探讨如何利…

算法之区间和题目讲解

题干 难度:简单 题目分析 题目要求算出每个指定区间内元素的总和。 然而,区间在输入的最下面,所以按照暴力破解的思路,我们首先要遍历数组,把它的值都存进去。 然后,遍历下面的区间,从索引a…

openssl颁发包含主题替代名的证书–SAN

原文地址:openssl颁发包含主题替代名的证书–SAN – 无敌牛 欢迎参观我的个人博客:无敌牛 – 技术/著作/典籍/分享等 在 X.509 证书中,commonName(CN)字段只能有一个值。如果让证书支持多个域名和IP地址,…

从尾到头打印链表 剑指offer

题目描述 输入一个链表的头节点,从尾到头反过来打印出每个节点的值。 链表节点定义如下: struct ListNode {int m_nKey;ListNode*m_pNext; }; 代码实现 栈实现: 递归实现: 但是用递归实现可能存在的问题:

ajax基础

一:express框架 在终端输入nodejs文件名 // 引入express const express require(express); //创建应用对象 const app express(); //创建路由规则 app.get(/,(request,response) > {//设置响应response.send(Hello Express); }); // 监听3000端口 app.lis…

免费实用在线AI工具集合 - 加菲工具

免费在线工具-加菲工具 https://orcc.online/ 在线录屏 https://orcc.online/recorder 时间戳转换 https://orcc.online/timestamp Base64 编码解码 https://orcc.online/base64 URL 编码解码 https://orcc.online/url Hash(MD5/SHA1/SHA256…) 计算 https://orcc.online/h…

UE5肉鸽游戏教程学习

学习地址推荐:UE5肉鸽项目实战教程_哔哩哔哩_bilibili

101页PDF | 德勤_XX集团信息化顶层规划设计信息化总体解决方案(限免下载)

一、前言 这份报告是一份关于集团信息化顶层规划设计的总体解决方案,旨在通过信息化转型提升集团管控和企业运营效率。报告回顾了项目的背景、目标和工作过程,分析了集团面临的内部和外部挑战,并提出了一系列解决方案,包括自上而…

L14.【LeetCode笔记】返回倒数第k个节点

目录 1.题目 2.分析 思路 代码 提交结果 1.题目 面试题 02.02. 返回倒数第 k 个节点 实现一种算法,找出单向链表中倒数第 k 个节点。返回该节点的值。 注意:本题相对原题稍作改动 示例: 输入: 1->2->3->4->5 和 …

【zookeeper03】消息队列与微服务之zookeeper集群部署

ZooKeeper 集群部署 1.ZooKeeper 集群介绍 ZooKeeper集群用于解决单点和单机性能及数据高可用等问题。 集群结构 Zookeeper集群基于Master/Slave的模型 处于主要地位负责处理写操作)的主机称为Leader节点,处于次要地位主要负责处理读操作的主机称为 follower 节点…

STM32端口模拟编码器输入

文章目录 前言一、正交编码器是什么?二、使用步骤2.1开启时钟2.2配置编码器引脚 TIM3 CH1(PA6) CH2 (PA7)上拉输入2.3.初始化编码器时基2.4 初始化编码器输入2.5 配置编码器接口2.6 开启定时器2.7获取编码器数据 三、参考程序四、测试结果4.1测试方法4.2串口输出结果…