STC8增强型单片机开发【定时器Timer⭐】

2024-05-10 22:44

本文主要是介绍STC8增强型单片机开发【定时器Timer⭐】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

一、引言

二、定时器基础知识

三、STC8定时器配置

四、代码示例

五、总结


一、引言

在单片机开发中,定时器(Timer)是一个极其重要的组件,它允许开发者基于时间触发各种事件或任务。STC8增强型单片机作为一款功能丰富的微控制器,内置了高性能的定时器模块,为开发者提供了精确的时间控制功能。本文将详细介绍STC8增强型单片机定时器的基本原理、配置方法以及应用示例。

二、定时器基础知识

定时器是单片机内部的一个计数器,它以一定的频率(时钟源)进行计数,当计数值达到设定的阈值时,会产生一个中断或标志位的变化,从而触发相应的处理程序。STC8增强型单片机的定时器通常具有多种工作模式,如定时模式、计数模式、捕获模式等,以满足不同的应用需求。

三、STC8定时器配置

STC8增强型单片机的定时器配置主要包括以下几个方面:

  1. 时钟源选择:定时器可以选择不同的时钟源进行计数,如系统时钟、外部时钟等。时钟源的选择会影响定时器的计数速度和精度。

  2. 工作模式设置:根据应用需求,选择合适的定时器工作模式。例如,在需要精确计时的场合,可以选择定时模式;在需要测量外部事件频率的场合,可以选择计数模式。

  3. 计数初值和重装载值:设置定时器的计数初值和重装载值,以确定定时器的溢出时间和周期。计数初值是定时器开始计数时的初始值,重装载值是在定时器溢出后重新加载到定时器的值。

  4. 中断和标志位设置:根据需要,配置定时器的中断和标志位。当定时器溢出时,可以产生中断请求,并在中断服务程序中执行相应的处理逻辑。同时,定时器溢出时还会设置相应的标志位,方便程序查询定时器的状态。

四、代码示例

以下是一个基于STC8增强型单片机的定时器应用示例代码,用于实现一个简单的LED闪烁功能:

#include "STC8G_H_GPIO.h"
#include "STC8G_H_NVIC.h"
#include "STC8G_H_UART.h"
#include "STC8G_H_Switch.h"
#include "STC8G_H_Timer.h"
#include "Config.h"
void GPIO_config(void) {GPIO_InitTypeDef	GPIO_InitStructure;				//结构定义GPIO_InitStructure.Pin  = GPIO_Pin_3;				//指定要初始化的IO,GPIO_InitStructure.Mode = GPIO_PullUp;			//指定IO的输入或输出方式,GPIO_PullUp,GPIO_HighZ,GPIO_OUT_OD,GPIO_OUT_PPGPIO_Inilize(GPIO_P5, &GPIO_InitStructure);	//初始化
}void UART_config(void) {// >>> 记得添加 NVIC.c, UART.c, UART_Isr.c <<<COMx_InitDefine		COMx_InitStructure;					//结构定义COMx_InitStructure.UART_Mode      = UART_8bit_BRTx;	//模式, UART_ShiftRight,UART_8bit_BRTx,UART_9bit,UART_9bit_BRTxCOMx_InitStructure.UART_BRT_Use   = BRT_Timer1;			//选择波特率发生器, BRT_Timer1, BRT_Timer2 (注意: 串口2固定使用BRT_Timer2)COMx_InitStructure.UART_BaudRate  = 115200ul;			//波特率, 一般 110 ~ 115200COMx_InitStructure.UART_RxEnable  = ENABLE;				//接收允许,   ENABLE或DISABLECOMx_InitStructure.BaudRateDouble = DISABLE;			//波特率加倍, ENABLE或DISABLEUART_Configuration(UART1, &COMx_InitStructure);		//初始化串口1 UART1,UART2,UART3,UART4NVIC_UART1_Init(ENABLE,Priority_1);		//中断使能, ENABLE/DISABLE; 优先级(低到高) Priority_0,Priority_1,Priority_2,Priority_3UART1_SW(UART1_SW_P30_P31);		// 引脚选择, UART1_SW_P30_P31,UART1_SW_P36_P37,UART1_SW_P16_P17,UART1_SW_P43_P44
}int count = 0;void timer0_callback() {int i;// 当Timer0中断触发时,会回调这个函数count++;// 灯光闪烁if (count == 1000) {	// 1000ms进入if语句一次P53 = !P53;count = 0;}//  发送接收数据// if (count == 20) {	// 20ms进入if语句一次// 是否消息发送完毕//if (COM1.RX_TimeOut > 0 && --COM1.RX_TimeOut == 0) {// 数据长度是否大于0//if(COM1.RX_Cnt > 0) {// 收数据//for (i = 0; i < COM1.RX_Cnt; i++) {//TX1_write2buff(RX1_Buffer[i]);//}//COM1.RX_Cnt = 0;//}//}//count = 0;//}
}void Timer_config() {TIM_InitTypeDef init;// 16位自动重载机制模式init.TIM_Mode = TIM_16BitAutoReload;		//工作模式,  	TIM_16BitAutoReload,TIM_16Bit,TIM_8BitAutoReload,TIM_16BitAutoReloadNoMaskinit.TIM_ClkSource = TIM_CLOCK_1T;			//时钟源		TIM_CLOCK_1T,TIM_CLOCK_12T,TIM_CLOCK_Extinit.TIM_ClkOut = DISABLE;							//可编程时钟输出,	ENABLE,DISABLE/*装载初值TIM_Value,目标值:65536目标值   装载初值* 差值: 65536 - 65530 = 6* 差值: 65536 - 64536 = 1000* 差值:	 65536 - 41536 = 24000装载初值41536 = 65536 - (MAIN_Fosc / 1000)24000000次/s ÷ 1000 = 24000次/ms根据系统主频,按照装载的初值开始逐渐向目标值递增;一旦到达目标值后,触发一次Timer的中断 -> 调用中断函数: interrupt TMR0_VECTOR;16位自动重载机制模式:达到目标值后,重新回到装载的初值,开始递增;*/init.TIM_Value = 65536 -(MAIN_Fosc / 1000);		//装载初值  = 目标值减去差值// init.TIM_PS = 0;         //8位预分频器 (注意:并非所有系列都有此寄存器,详情请查看数据手册)init.TIM_Run = ENABLE;			//是否运行		ENABLE,DISABLETimer_Inilize(Timer0, &init);// 中断配置NVIC_Timer0_Init(ENABLE, Priority_0);}int main() {// 开启全局中断EA = 1;// 1. 设置P53引脚的工作模式GPIO_config();UART_config();// 2. 配置Timer的参数Timer_config();P53 = 0;		// 熄灯while(1) {}}

上列代码所需库函数文件:

 

上列代码中提到的MAIN_Fosc在Config.h文件中:

五、总结

本文详细介绍了STC8增强型单片机定时器的基本原理、配置方法以及应用示例。通过合理配置定时器的时钟源、工作模式、计数初值和重装载值等参数,可以实现精确的时间控制功能。在实际应用中,我们可以利用定时器来实现LED闪烁、按键扫描、延时等待等各种功能。

这篇关于STC8增强型单片机开发【定时器Timer⭐】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/977766

相关文章

Django开发时如何避免频繁发送短信验证码(python图文代码)

《Django开发时如何避免频繁发送短信验证码(python图文代码)》Django开发时,为防止频繁发送验证码,后端需用Redis限制请求频率,结合管道技术提升效率,通过生产者消费者模式解耦业务逻辑... 目录避免频繁发送 验证码1. www.chinasem.cn避免频繁发送 验证码逻辑分析2. 避免频繁

Spring Boot集成/输出/日志级别控制/持久化开发实践

《SpringBoot集成/输出/日志级别控制/持久化开发实践》SpringBoot默认集成Logback,支持灵活日志级别配置(INFO/DEBUG等),输出包含时间戳、级别、类名等信息,并可通过... 目录一、日志概述1.1、Spring Boot日志简介1.2、日志框架与默认配置1.3、日志的核心作用

PyQt5 GUI 开发的基础知识

《PyQt5GUI开发的基础知识》Qt是一个跨平台的C++图形用户界面开发框架,支持GUI和非GUI程序开发,本文介绍了使用PyQt5进行界面开发的基础知识,包括创建简单窗口、常用控件、窗口属性设... 目录简介第一个PyQt程序最常用的三个功能模块控件QPushButton(按钮)控件QLable(纯文本

基于Python开发一个图像水印批量添加工具

《基于Python开发一个图像水印批量添加工具》在当今数字化内容爆炸式增长的时代,图像版权保护已成为创作者和企业的核心需求,本方案将详细介绍一个基于PythonPIL库的工业级图像水印解决方案,有需要... 目录一、系统架构设计1.1 整体处理流程1.2 类结构设计(扩展版本)二、核心算法深入解析2.1 自

SpringBoot开发中十大常见陷阱深度解析与避坑指南

《SpringBoot开发中十大常见陷阱深度解析与避坑指南》在SpringBoot的开发过程中,即使是经验丰富的开发者也难免会遇到各种棘手的问题,本文将针对SpringBoot开发中十大常见的“坑... 目录引言一、配置总出错?是不是同时用了.properties和.yml?二、换个位置配置就失效?搞清楚加

Python中对FFmpeg封装开发库FFmpy详解

《Python中对FFmpeg封装开发库FFmpy详解》:本文主要介绍Python中对FFmpeg封装开发库FFmpy,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、FFmpy简介与安装1.1 FFmpy概述1.2 安装方法二、FFmpy核心类与方法2.1 FF

基于Python开发Windows屏幕控制工具

《基于Python开发Windows屏幕控制工具》在数字化办公时代,屏幕管理已成为提升工作效率和保护眼睛健康的重要环节,本文将分享一个基于Python和PySide6开发的Windows屏幕控制工具,... 目录概述功能亮点界面展示实现步骤详解1. 环境准备2. 亮度控制模块3. 息屏功能实现4. 息屏时间

Python实例题之pygame开发打飞机游戏实例代码

《Python实例题之pygame开发打飞机游戏实例代码》对于python的学习者,能够写出一个飞机大战的程序代码,是不是感觉到非常的开心,:本文主要介绍Python实例题之pygame开发打飞机... 目录题目pygame-aircraft-game使用 Pygame 开发的打飞机游戏脚本代码解释初始化部

使用Python开发一个现代化屏幕取色器

《使用Python开发一个现代化屏幕取色器》在UI设计、网页开发等场景中,颜色拾取是高频需求,:本文主要介绍如何使用Python开发一个现代化屏幕取色器,有需要的小伙伴可以参考一下... 目录一、项目概述二、核心功能解析2.1 实时颜色追踪2.2 智能颜色显示三、效果展示四、实现步骤详解4.1 环境配置4.

Python使用smtplib库开发一个邮件自动发送工具

《Python使用smtplib库开发一个邮件自动发送工具》在现代软件开发中,自动化邮件发送是一个非常实用的功能,无论是系统通知、营销邮件、还是日常工作报告,Python的smtplib库都能帮助我们... 目录代码实现与知识点解析1. 导入必要的库2. 配置邮件服务器参数3. 创建邮件发送类4. 实现邮件