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系列定时器与串口库函数的核心使用方法,具体参数需根据实际时钟频率和通信需求调整。