51单片机STC8G串口Uart配置

测试环境

单片机型号:STC8G1K08-38I-TSSOP20,其他型号请自行测试;
IDE:KEIL C51;

寄存器配置及主要代码

STC8G系列单片机具有4个全双工异步串行通信接口;本文以串口1为例,串口1有4种工作方式,其中两种方式的波特率是可变的,另两种是固定的,以供不同应用场合选用;
串口相关寄存器如下表所示,其中红框中的是串口1需要配置的寄存器;
在这里插入图片描述其中,SCON寄存器详细介绍如下,因为我们需要可随意配置的波特率,所以SM0及SM1位需要按照红框中的配置,配置为模式1;其他位为与中断相关,可根据需要配置;
在这里插入图片描述
寄存器PCON和AXUR介绍如下,我们选择定时器2位波特率发生器,波特率不加倍;
在这里插入图片描述
串口1模式1的波特率计算公式如下表,选择定时器2,1T模式,确定好波特率后,可根据红框中的公式计算出定时器的重载值;
例如,时钟频率为22.1184MHz,波特率位19200,则定时器重载值=65536-22118400/(4*19200)=65248,即0xFEE0,将值赋给定时器2的T2H、T2L;
在这里插入图片描述
另外,需要注意的是,定时器的1T或12T模式,通过AUXR寄存器设置;定时器配置可参考51单片机定时器中断配置;
综上,可写出串口1初始化配置的程序如下:

#define FOSC     							22118400L//时钟频率
#define UART1_BAUD_RATE						19200//波特率/******************************************************************************** 函数名:Uart1_Init* 功  能:Uart1初始化* 参  数:无* 返回值:无* 说  明:定时器2为波特率发生器
*******************************************************************************/
void Uart1_Init(void)
{uint16_t u16Reload = 0;//重装值SCON |= 0x50;//模式1,可变波特率8位数据,允许接收PCON &= 0x7F;//串口1波特率不加倍,SMOD=0AUXR |= 0x01;//定时器2为波特率发生器AUXR |= 0x14;//定时器2开始运行,1T模式//定时器2初值,自动重载u16Reload = (uint16_t)((uint32_t)65536 - (uint32_t)FOSC / ( 4 * (uint32_t)UART1_BAUD_RATE));T2H = (uint8_t)(u16Reload >> 8);T2L = (uint8_t)(u16Reload >> 0);//串口1中断优先级2,较高级IP &= 0xEF;//PS=0IPH |= 0x10;//PSH=1	TI = 0;//串口1发送中断请求标志
}

另外,如果需要在串口中断里接收处或发送数据,需要用到串口中断服务函数,先查询芯片手册中中断列表,Uart1的中断序号为4:
在这里插入图片描述可在接收中断RI时,读取数据寄存器SBUF即可得到串口接收的数据,在发送中断TI时,对SBUF进行写操作即可,代码如下:

/******************************************************************************** 函数名:UART1_Isr() interrupt 4* 功  能:Uart1中断服务子函数* 参  数:无* 返回值:无* 说  明:无
*******************************************************************************/
void UART1_Isr(void) interrupt 4
{if (TI){TI = 0;//清中断标志//SUBF = data;//将要发送的数据放入SBUF中//do something}if (RI){RI = 0;//清中断标志//data = SBUF;//读取SBUF中的数据//do something}
}

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

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

相关文章

像素、分辨率、PPI(像素密度)、帧率的概念

文章目录 前言一、像素1、定义2、像素点也不是越多越好 二、分辨率1、定义 三、PPI(像素密度)1、定义2、计算公式3、视网膜屏幕 四、帧率1、帧 (Frame)2、帧数 (Frames)3、帧率 (Frame Rate)4、FPS (Frames Per Second)5、赫兹 五、其他1、英寸2、为何显示器尺寸以英寸命名 总结…

Linux初阶——信号

一、预备 1、信号的处理方式 1.1. 默认动作 当收到一个信号时,就执行这个信号的默认动作。 1.2. 忽略 当收到一个信号时,就忽略执行这个信号的默认动作。 1.3. 自定义动作 当收到一个信号时,就执行信号的自定义动作。 2、硬件中断 你…

跨设备使用的便签软件哪款好?

在快节奏的现代生活中,便签软件已成为我们不可或缺的数字助手,它们帮助我们记录灵感、安排日程、设置提醒,极大地提升了我们的工作与生活效率。然而,面对市场上琳琅满目的便签应用,选择一款既实用又适合手机使用的便签…

【万兴科技-注册_登录安全分析报告】

前言 由于网站注册入口容易被黑客攻击,存在如下安全问题: 暴力破解密码,造成用户信息泄露短信盗刷的安全问题,影响业务及导致用户投诉带来经济损失,尤其是后付费客户,风险巨大,造成亏损无底洞…

51单片机应用开发(进阶)---外部中断(按键+数码管显示0-F)

实现目标 1、巩固数码管、外部中断知识 2、具体实现:按键K4(INT1)每按一次,数码管从0依次递增显示至F,再按则循环显示。 一、共阳数码管 1.1 共阳数码管结构 1.2 共阳数码管码表 共阳不带小数点0-F段码为&#xff…

《链表篇》---两数相加(中等)

题目传送门 方法一:迭代 文字描述看代母注释 class Solution {public ListNode addTwoNumbers(ListNode l1, ListNode l2) {//定义头结点和当前节点ListNode head null,cur null;//carry记录进位情况。int carry 0; while(l1 ! null || l2 ! null){//判断节点是…

Date工具类详细汇总-Date日期相关方法

# 1024程序员节 | 征文 # 目录 简介 Date工具类单元测试 Date工具类 简介 本文章是个人总结实际工作中常用到的Date工具类,主要包含Java-jdk8以下版本的Date相关使用方法,可以方便的在工作中灵活的应用,在个人工作期间频繁使用这些时间的格…

uniapp iOS打包证书过期——重新下载证书及更新文件

证书过期,重新生成步骤 关于所需的证书、标识符、描述文件等请查看iOS打包证书申请流程证书有效期为1年 过期提示 生成证书 点击 钥匙串访问 → 证书助理 → 从证书颁发机构请求证书 ; 我这里选择 存储到磁盘 ,邮件、名称 可自定义&#…

uniapp圆形波浪进度效果

uniapp圆形波浪进度效果 背景实现思路代码实现尾巴 背景 最近项目中有些统计的地方需要用到圆形的波浪进度效果,要求是根据百分比值然后在一个圆形内动态的展示一个波浪形的进度,看参考一下效果。 实现思路 这个效果看着挺复杂的,那么我们…

宠物空气净化器有用吗?有哪几款吸毛效果好且低噪的推荐

伴随着天气越来越凉,照常来说,猫咪掉毛的频率应该会变少,但是为什么我家的猫咪还在掉很多毛。 现在就连南方地区都要加外套了,但是猫咪掉毛太多,都不敢穿纯棉面料的衣服,还有本来想着顺应天气的变化&#…

深入理解C++ Lambda表达式:语法、用法与原理及其包装器的使用

深入理解C Lambda表达式:语法、用法与原理及其包装器的使用 lambda表达式C98中的一个例子lambda表达式语法lambda表达式各部分说明捕获列表说明 函数对象与lambda表达式 包装器function包装器 bind 🌏个人博客主页: 个人主页 本文深入介绍了…

2024最新Instagram养号攻略!海外社媒起号码住了

Instagram至今仍然是全球顶级的流量平合,不仅在国外是各大网红明星必备app,国内下载量也居高不下,但从2018年下半年开始加大了对新账号的监控和权限限制。新注册的账号会受到诸多限制,稍不慎就会进入安全模式或者被封,…

【vue】10.组件的生命周期-从Vue 2到Vue 3的演变

自Vue 2发布以来,它以其简单易用、灵活高效的特点赢得了众多开发者的喜爱。随着时间的推移,Vue 3在Vue 2的基础上进行了全面升级,其中包括对组件生命周期的调整。本文将首先回顾Vue 2的组件生命周期,然后重点介绍Vue 3组件生命周期…

STM32 HAL 点灯

首先从点灯开始 完整函数如下: #include "led.h" #include "sys.h"//包含了stm32f1xx.h(包含各种寄存器定义、中断向量定义、常量定义等)//初始化GPIO口 void led_init(void) {GPIO_InitTypeDef gpio_initstruct;//打开…

计算合约方法的签名

计算合约方法的签名 通过智能合约实现 // SPDX-License-Identifier: MIT pragma solidity ^0.8.26;contract FunctionSelector {/*"transfer(address,uint256)"0xa9059cbb"transferFrom(address,address,uint256)"0x23b872dd*/function getSelector(stri…

【Java】方法的使用 —— 语法要求、方法的重载和签名、方法递归

目录 1. 方法基础知识 1.1 方法的概念 1.2 语法格式 * 注意事项【与C不同】 1.3 return —— 返回值的严格检查【比C语言严格】 2. 形参与实参的关系 3. 方法重载 3.1 什么是方法重载?为什么要方法重载? 3.2 方法重载的规则 4. 方法签名 5. 递…

鸿蒙开发:arkts Refresh 组件

基本概念 在 ArkTS 5.0 中,Refresh组件是用于实现下拉刷新功能的重要元素。它为用户提供了一种直观的方式来获取最新的数据。当用户在界面上对Refresh组件所在的区域进行下拉操作时,如果满足一定的触发条件,就会触发刷新事件,从而…

ClickHouse 神助攻:纽约城市公共交通管理(MTA)数据应用挑战赛

本文字数:13198;估计阅读时间:33 分钟 作者:The PME Team 本文在公众号【ClickHouseInc】首发 我们一向对开放数据挑战充满热情,所以当发现 MTA(城市交通管理局)在其官网发起了这样的挑战时&…

HarmonyOS开发5.0 net 启动界面设置

第一步、创建我们界面 第二步, 在EntryAbility中配置启动页面,在entry/src/main/ets/entryability/EntryAbility.ets中配置启动页面 配置如下 至此大功告成

算法笔记day10

目录 1.牛牛冲钻五 2.最长无重复子数组_牛客题霸_牛客网 3.重排字符串 1.牛牛冲钻五 算法思路&#xff1a; 特别简单的模拟题&#xff0c;没什么说的。 #include <iostream> #include <vector> #include <string> using namespace std; int main() { …