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

news2024/11/20 11:37:05

目录

一、引言

二、定时器基础知识

三、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_PP
    GPIO_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_BRTx
    COMx_InitStructure.UART_BRT_Use   = BRT_Timer1;			//选择波特率发生器, BRT_Timer1, BRT_Timer2 (注意: 串口2固定使用BRT_Timer2)
    COMx_InitStructure.UART_BaudRate  = 115200ul;			//波特率, 一般 110 ~ 115200
    COMx_InitStructure.UART_RxEnable  = ENABLE;				//接收允许,   ENABLE或DISABLE
    COMx_InitStructure.BaudRateDouble = DISABLE;			//波特率加倍, ENABLE或DISABLE
    UART_Configuration(UART1, &COMx_InitStructure);		//初始化串口1 UART1,UART2,UART3,UART4

    NVIC_UART1_Init(ENABLE,Priority_1);		//中断使能, ENABLE/DISABLE; 优先级(低到高) Priority_0,Priority_1,Priority_2,Priority_3
    UART1_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_16BitAutoReloadNoMask
    init.TIM_ClkSource = TIM_CLOCK_1T;			//时钟源		TIM_CLOCK_1T,TIM_CLOCK_12T,TIM_CLOCK_Ext
    init.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,DISABLE

    Timer_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闪烁、按键扫描、延时等待等各种功能。

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

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

相关文章

【机器学习】逻辑化讲清PCA主成分分析

碎碎念&#xff1a;小编去年数学建模比赛的时候真的理解不了主成分分析中的“主成分”的概念&#xff01;&#xff01;但是&#xff0c;时隔两年&#xff0c;在机器学习领域我又行了&#xff0c;终于搞明白了&#xff01;且看正文&#xff01;再分享一个今天听到的播客中非常触…

ICode国际青少年编程竞赛- Python-4级训练场-绿色能量1

ICode国际青少年编程竞赛- Python-4级训练场-绿色能量1 1、 Dev.step(3) Dev.turnLeft() Dev.step(3) Spaceship.step(4) Spaceship.turnRight() Spaceship.step(4) Dev.step(3) while Item[1].y ! Dev.y:wait()2、 Dev.step(4) while Item[0].x ! Dev.x:wait() Dev.turnLe…

luceda ipkiss教程 69:导出器件或者线路的三维模型

ipkiss 3.12版加入write_obj函数&#xff0c;可以直接输出器件的三维模型。 如&#xff0c;输出自定义的mmi的三维模型&#xff1a; 代码如下&#xff1a; from si_fab import all as pdk from ipkiss3 import all as i3class MMI1x2(i3.PCell):"""MMI with …

北京车展现场体验商汤DriveAGI自动驾驶大模型展现认知驱动新境界

在2024年北京国际汽车展的舞台上&#xff0c;众多国产车型纷纷亮相&#xff0c;各自展示着独特的魅力。其中&#xff0c;小米SUV7以其精美的外观设计和宽敞的车内空间&#xff0c;吸引了无数目光&#xff0c;成为本届车展上当之无愧的明星。然而&#xff0c;车辆的魅力并不仅限…

学习3D几何和特征一致的高斯溅射目标去除

earning 3D Geometry and Feature Consistent Gaussian Splatting for Object Removal 学习3D几何和特征一致的高斯溅射目标去除 Yuxin Wang 王玉欣 HKUST &Qianyi Wu Monash University &Guofeng Zhang Zhejiang University &Dan Xu HKUST 香港科技大学&吴倩…

java期末复习

java jdk jre jvm .java-------->.class----jvm---->机器语言 编写源文件 编译源文件生成字节码 加载运行字节码 java语句执行顺序 顺序 选择 循环 异常处理 基本语法 方法格式 权限修饰符 返回值声明 方法名称(参数列表){方法中封装的逻辑功能;return 返回值;}–权…

三级综合医院微信预约挂号系统源码,PC后台管理端+微信公众号+支付宝小程序全套源码

智慧医院预约挂号系统&#xff0c;微信医疗预约挂号小程序源码&#xff0c;实体医院预约挂号支付系统源码 本系统主要面向中大型的医疗机构&#xff0c;适用于各级公立和民营医院&#xff0c;可对接院内his、lis、pacs系统。 PC后台管理端微信公众号支付宝小程序 系统支持当日…

mac安装禅道

前提已安装&#xff1a;phpapacheMySQL mac安装 php7.1/apache-CSDN博客 安装MySQL 一、禅道下载 安装官方文档 源码包下载地址&#xff1a;禅道下载 - 禅道开源项目管理软件 。 1. 解压禅道源码包 2. 将解压后的文件复制到Apache访问目录下 &#xff08;默认路径为 /Libra…

0510_IO5

练习题&#xff1a; #include <stdio.h>#include <string.h>#include <stdlib.h>#include <sys/types.h>#include <unistd.h>#include <sys/stat.h>#include <fcntl.h>#include <pthread.h>#include <semaphore.h>#incl…

LED出海混战,雷曼光电“冲锋陷阵”的数智化暗线

2022年春天&#xff0c;在北京冬奥会开幕式上&#xff0c;晶莹剔透的“冰雪五环”从巨型冰块中徐徐升起&#xff0c;成为国人经典集体回忆。这个面积达134平方米、重约3吨的冰雪五环&#xff0c;是LED技术与光影艺术的完美融合。深圳LED上市公司雷曼光电参与“冰雪五环”异形屏…

车载电子电器架构 —— 应用软件开发(中)

车载电子电器架构 —— 应用软件开发(中) 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不对。非必要不费力证明…

GPT+Python近红外光谱数据分析

原文链接&#xff1a;GPTPython近红外光谱数据分析https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247603913&idx1&sn6eb8fd6f1abcdd8160815997a13eb03d&chksmfa82172ecdf59e389a860547a238bb86c7f38ae3baa14e97c7490a52ef2a2c206f88d503a5eb&token…

推荐几款国内的AI写作工具,好用免费还能在线生成AI文案

AI写作简介&#xff1a; 在专业领域中&#xff0c;人工智能技术的进步正以前所未有的速度推动着写作行业的革新。当前&#xff0c;我们见证了生成式人工智能&#xff08;AI&#xff09;在文本产生领域的广泛应用&#xff0c;其对提升创作效率和拓展创意边界的贡献是显著的。以…

Vue3知识总结-1

前面学习一段时间的前端&#xff0c;但是没有进行过太多的练习&#xff0c;并且对于里面一些重要的知识点也没有去着重的记忆&#xff0c;所以打算在学习Vue3的时候&#xff0c;做一些笔记&#xff0c;方便后面翻看。这个笔记会对于学习一些做一些&#xff0c;而不是一个整体的…

java中的oop(一)、概念

一、三大主线 &#xff08;非官方&#xff09; 成员&#xff1a;属性、方法、构造器、&#xff08;代码块&#xff0c;内部类&#xff09;&#xff1b; 特征&#xff1a;封装、继承、多态、&#xff08;抽象&#xff09;——三大特征&#xff1b; 关键字&#xff1a; this、…

免费软件不一定不好用,分享5个实用小工具

​ 今天继续分享5个超实用的小工具&#xff0c;都是非常小巧精致的免费软件。 1.广告拦截与隐私保护——AdGuard ​ AdGuard是一款跨平台广告拦截和隐私保护软件&#xff0c;支持Windows、MacOS、Android和iOS系统。它能有效屏蔽不必要的广告、弹窗和跟踪&#xff0c;同时抵御…

(Mac)RocketMQ的本地安装测试(详细图示)

目录 部署服务 namesrv / broker下载解压缩运行 namesrvnohup ./bin/mqnamesrv & 启动命令详解运行 broker 测试收发消息运行自带的生产者测试类运行自带的消费者测试类 部署 Dashboard 可视化下载打包运行访问 部署服务 namesrv / broker 下载解压缩 官网下载 https://r…

会话劫持攻击就在我们身边,我们要如何防范

会话劫持攻击&#xff08;Session Hijacking&#xff09;是一种网络攻击方式&#xff0c;攻击者通过某种手段获取到用户的会话标识&#xff08;Session ID&#xff09;&#xff0c;然后使用这个会话标识冒充合法用户进行恶意操作。这种攻击方式允许攻击者以合法用户的身份访问受…

【go项目01_学习记录10】

操作数据库 1 插入数据2 显示文章2.1 修改 articlesShowHandler() 函数2.2 代码解析 3 编辑文章3.1 添加路由3.2 编辑articlesEditHandler()3.3 新建 edit 模板3.4 代码重构3.5 完善articlesUpdateHandler()3.6 测试更新3.7 封装表单验证 1 插入数据 . . . func articlesStore…

测径仪供风设备的操作和维护

关键字:测径仪供风系统,测径仪供风设备,测径仪冷却设备维护,测径仪冷却设备故障, 测径仪的供风设备包括高压鼓风机和空气过滤装置两部分。 鼓风机要求有独立的供电系统和电源开关&#xff0c;安装时应调整好风机叶轮的旋向&#xff0c;保证接通电源后鼓风机正常工作。另外&am…