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

Timer串口常用库函数(STC8系列)

STC8系列定时器(Timer)串口库函数使用指南

STC8系列单片机内置多个定时器和串口模块,官方库函数简化了配置流程。以下为关键函数及使用方法:

定时器头文件和依赖

1. Timer.c Timer.h Timer_Isr.c
2. NVIC.c NVIC.h

#include "Timer.h"
#include "NVIC.h"

实现初始化定时器和中断函数

需在中断控制寄存器中开启相应中断:

void	Timer_config(void)
{TIM_InitTypeDef		TIM_InitStructure;						//结构定义//定时器0做16位自动重装, 中断频率为1000HZTIM_InitStructure.TIM_Mode      = TIM_16BitAutoReload;	//指定工作模式,   TIM_16BitAutoReload,TIM_16Bit,TIM_8BitAutoReload,TIM_16BitAutoReloadNoMaskTIM_InitStructure.TIM_ClkSource = TIM_CLOCK_1T;		//指定时钟源,     TIM_CLOCK_1T,TIM_CLOCK_12T,TIM_CLOCK_ExtTIM_InitStructure.TIM_ClkOut    = DISABLE;				//是否输出高速脉冲, ENABLE或DISABLETIM_InitStructure.TIM_Value     = 65536UL - (MAIN_Fosc / 1000UL);		//初值,TIM_InitStructure.TIM_Run       = ENABLE;				//是否初始化后启动定时器, ENABLE或DISABLETimer_Inilize(Timer0,&TIM_InitStructure);				//初始化Timer0	  Timer0,Timer1,Timer2,Timer3,Timer4NVIC_Timer0_Init(ENABLE,Priority_0);		//中断使能, ENABLE/DISABLE; 优先级(低到高) Priority_0,Priority_1,Priority_2,Priority_3
}

中断使能配置

需在中断控制寄存器中开启相应中断:

EA = 1;                 //全局中断开关
ET0 = 1;                //定时器0中断允许
ES = 1;                 //串口中断允许

波特率计算方法

STC8系列波特率计算公式:
在这里插入图片描述
在这里插入图片描述

数据收发示例

发送数据使用:

if(COM1.RX_TimeOut > 0) {//超时计数if(--COM1.RX_TimeOut == 0) {if(COM1.RX_Cnt > 0) {// 这里处理收到的数据,做具体的逻辑,可以调用自己的on_uart1_recvfor(i=0; i<COM1.RX_Cnt; i++)	{// RX1_Buffer[i]存的是接收的每个字节,写出用 TX1_write2buff}}COM1.RX_Cnt = 0;}
}// 不要处理的太快
delay_ms(10);

方法1
接收数据通过中断处理:修改Timer_Isr.c实现中断函数的调用,并在main.c中声明实现timer0_call函数

extern void timer0_call();//声明//========================================================================
// 函数: Timer0_ISR_Handler
// 描述: Timer0中断函数.
// 参数: none.
// 返回: none.
// 版本: V1.0, 2020-09-23
//========================================================================
void Timer0_ISR_Handler (void) interrupt TMR0_VECTOR		//进中断时已经清除标志
{// TODO: 在此处添加用户代码timer0_call();
}

然后在main.c中实现timer0_call:

void timer0_call(){// TODO: 在此处添加用户代码
}

方法2
直接在main.c中实现interrupt函数(记得删掉或注释掉Timer_Isr.c中对应的中断函数)

void Timer0_ISR (void) interrupt TMR0_VECTOR		//进中断时已经清除标志
{// TODO: 在此处添加用户代码
}

注意事项

  • 使用1T模式时需设置AUXR寄存器对应位
  • 12时钟模式下定时器初值计算与1T模式不同
  • 多串口系统需注意中断优先级配置

以上为STC8系列定时器与串口库函数的核心使用方法,具体参数需根据实际时钟频率和通信需求调整。

http://www.lryc.cn/news/608727.html

相关文章:

  • 代码随想录算法训练营第三十九天
  • 【内容规范】关于标题中【】标记的使用说明
  • 【机器学习③】 | CNN篇
  • k8s日志收集
  • Node.js 操作 MySQL
  • [硬件电路-129]:模拟电路 - 继电器的工作原理、关键指标、常用芯片与管脚定义
  • OSPF知识点整理
  • Flutter 函数的基本使用
  • OpenCV轻松入门_面向python(第一章OpenCV入门)
  • 企业IT管理——集团IT项目实施管理办法模板
  • Linux Deepin深度操作系统应用商店加载失败,安装星火应用商店
  • 学习笔记《区块链技术与应用》第六天 问答 匿名技术 零知识证明
  • 机器翻译的分类:规则式、统计式、神经式MT的核心区别
  • 基于单片机火灾报警系统/防火防盗系统设计
  • 块三角掩码(Block-Triangular Masking)
  • MySQL的创建管理表:
  • Memcached Slab分配器:零碎片的极速内存管理
  • [spring-cloud: 服务发现]-源码解析
  • Day 30:模块和库的导入
  • 风光储综合能源系统双层优化规划设计【MATLAB模型实现】
  • 第九章:了解特殊场景下的redis
  • 控制建模matlab练习07:比例积分控制-③PI控制器的应用
  • Spring 03 Web springMVC
  • ESP32学习-I2C(IIC)通信详解与实践
  • C++:STL中的栈和队列的适配器deque
  • Spring Boot AOP 优雅实现异常重试机制
  • AD方案(OpenLDAP或微软AD)适配信创存在的不足以及可能优化方案
  • Nvidia Orin DK 刷机CUDA TensorRT+硬盘扩容+ROS+Realsense+OpenCV+Ollama+Yolo11 一站式解决方案
  • CUDA杂记--nvcc使用介绍
  • Elastic 9.1/8.19:默认启用 BBQ,ES|QL 支持跨集群搜索(CCS)正式版,JOINS 正式版,集成 Azure AI Foundry