第十五届蓝桥杯单片机组——定时器的基本原理与应用

文章目录

  • 一、定时器介绍
  • 二、定时器的应用
    • 2.1 定时功能
      • ❗注意事项!
      • ❗什么是1T和12T
    • 2.2 计数功能
      • ❗注意点
  • 三、利用定时器计数功能实现555频率测量

一、定时器介绍

  在没有钟表的时候,定时的方式通过有一注香的时间,或者一桶水的时间。前者烧香不断减少是减法,后者滴水不断增加是加法。
  定时/计数器,是一种能够对内部时钟信号或外部输入信号进行计数,当计数值达到设定要求时,向CPU提 出中断处理请求,从而实现定时或者计数功能的外设。定时/计数器的最基本工作原理是进行计数。作为定时器时,计数信号的来源选择周期性的内部时钟脉冲;用作计数器时,计数信号的来源选择非周期性的外部输入信号。
  不管是定时器还是计数器,本质上都是计数器。

二、定时器的应用

定时器有两个功能,分别是定时和计数功能,定时是对内部时钟计数是对外部时钟

2.1 定时功能

举个例子,比如我想每隔2ms实现做某一件事,那么我们就在初始化的时候设置定时时长为2ms就可以。比赛的时候不推荐大家自己算TLx和THx的值,直接用STC烧录工具就可以直接实现,顺带着帮你把中断服务函数格式都写了。

在这里插入图片描述

1.系统时钟频率为12Mhz,看板子最左侧的晶振。
2.设置时间单位为ms
3.定时器输入时钟12分频(12T)
4.使能定时器中断

❗注意事项!

用STC软件生成的初始化代码中只开启了定时器中断,并没有开启总中断,所以需要我们在调用Timer0_Init()后添加一行代码(EA=1;),或者直接在Timer0_Init()中添加EA=1也行。
此外AUXR寄存器在reg52.h中没有定义,所以需要自己定义一下,或者将reg52.h改为stc15f2k60s2.h虽然比较长,但是多写几遍就记住了。

在这里插入图片描述

❗什么是1T和12T

在51中,1T模式是指每一个系统基本时钟执行1个动作,12T指每12个系统基本时钟执行1个动作。IAP12f2k60s2是工作在1T模式,所以它的运行速度比stc89c51\52快12倍。我们在定时器初始化中设置AUXR为12T并不会改变系统指令的运行速度,它只是改变了定时器输入信号,将输入信号进行12分频。

为什么选择12T,因为这样定时器就可以计数更长的时间,比1T模式下多12倍呢!

#include <stc15f2k60s2.h>	// AUXR寄存器需要用到这个头文件void Timer0_Isr(void) interrupt 1
{
}void Timer0_Init(void)		//2ms@12.000MHz
{AUXR &= 0x7F;			//Timer clock is 12T mode,不会改变系统运行速度TMOD &= 0xF0;			//Set timer work modeTL0 = 0x30;				//Initial timer valueTH0 = 0xF8;				//Initial timer valueTF0 = 0;				//Clear TF0 flagTR0 = 1;				//Timer0 start runET0 = 1;				//Enable timer0 interruptEA=1;					// 开启总中断
}

2.2 计数功能

一样的我们利用软件生成初始化代码,在此基础上做一些修改就可以了。

❗注意点

1.开发板上只将定时器0的时钟输入引脚拉了出来,所以只能使用定时器0来实现外部时钟计数。
2.要使定时器的输入信号不分频,也就是设置为1T模式
3.切记不能设置成为自动重转载模式!!!
4.修改TMOD让定时器输入信号为外部信号

前面三点在烧录软件中操作,第四点在keil中改写。
在这里插入图片描述
在这里插入图片描述

根据寄存器说明,将生成代码中的TMOD |= 0x01;改为TMOD |= 0x05;

三、利用定时器计数功能实现555频率测量

可以直接复制到main.c中直接用。

#include <stc15f2k60s2.h>
#include <intrins.h>
unsigned char count_t=0;
unsigned int count_f=0;
unsigned int last_f=0;
unsigned char code dat[]={0xc0, 0xf9, 0xa4, 0xb0, 0x99,0x92, 0x82, 0xf8, 0x80, 0x90,0x88,0x80,0xc6,0xc0,0x86,0x8e,0xbf,0x7f};void Delay()
{unsigned char i, j;_nop_();_nop_();i = 22;j = 128;do{while (--j);} while (--i);
}void selectHC573(unsigned char num)  
{switch(num){case 4:P2=(P2 & 0x1f) | 0x80;break;case 5:P2=(P2 & 0x1f) | 0xa0;break;case 6:P2=(P2 & 0x1f) | 0xc0;break;case 7:P2=(P2 & 0x1f) | 0xe0;break;case 0:P2=(P2 & 0x1f) | 0x00;break;}
}void system_Init()
{selectHC573(5);P0=0x00;selectHC573(0);
}void display_SMG_Bit(unsigned char dat, unsigned pos)
{/*消影法2*/P0=0xff;selectHC573(7);selectHC573(0);P0=0x01<<(pos-1);selectHC573(6);selectHC573(0);P0=dat;selectHC573(7);selectHC573(0);
}void display_D_SMG(unsigned int dat1)
{	display_SMG_Bit(dat[15],1);Delay();display_SMG_Bit(0xff,2);Delay();display_SMG_Bit(0xff,3);Delay();if(dat1>9999){display_SMG_Bit(dat[dat1/10000],4);Delay();}if(dat1>999){display_SMG_Bit(dat[dat1/1000%10],5);Delay();}if(dat1>99){display_SMG_Bit(dat[dat1/100%10],6);Delay();}if(dat1>9){display_SMG_Bit(dat[dat1 / 10 % 10],7);Delay();}display_SMG_Bit(dat[dat1 % 10],8);Delay();
}void Timer1_Isr(void) interrupt 3
{count_t++;if(count_t==99){count_t=0;count_f=TH0;count_f=(count_f<<8)|TL0;last_f=count_f;TL0=0;TH0=0;}
}void Timer0_Init(void)		//1ms@12.000MHz
{AUXR |= 0x80;			//imer clock is 1T modeTMOD &= 0xF0;			//Set timer work modeTMOD |= 0x05;			//Set timer work modeTL0 = 0x00;				//Initial timer valueTH0 = 0x00;				//Initial timer valueTF0 = 0;				//Clear TF0 flagTR0 = 1;				//Timer0 start run
}void Timer1_Init(void)		//10ms@12.000MHz
{AUXR &= 0xBF;			//Timer clock is 12T modeTMOD &= 0x0F;			//Set timer work modeTL1 = 0xF0;				//Initial timer valueTH1 = 0xD8;				//Initial timer valueTF1 = 0;				//Clear TF1 flagTR1 = 1;				//Timer1 start runET1 = 1;				//Enable timer1 interruptEA=1;
}void main()
{system_Init();Timer0_Init();Timer1_Init();//开启总中断while(1){display_D_SMG(last_f);}
}

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

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

相关文章

智慧灌区解决方案:针对典型灌区水利管理需求

​随着国家对农业水利的重视,各地积极推进智慧灌区建设,以实现对水资源的精准调度和科学化管理。下面我们针对典型灌区水利管理需求,推荐智慧灌区解决方案。 一、方案构成智慧水利解决方案- 智慧水利信息化系统-智慧水利平台-智慧水利公司 - 星创智慧水利 一、方案构成 (一)水…

WAF攻防相关知识点总结1--信息收集中的WAF触发及解决方案

什么是WAF WAF可以通过对Web应用程序的流量进行过滤和监控&#xff0c;识别并阻止潜在的安全威胁。WAF可以检测Web应用程序中的各种攻击&#xff0c;例如SQL注入、跨站点脚本攻击&#xff08;XSS&#xff09;、跨站请求伪造&#xff08;CSRF&#xff09;等&#xff0c;并采取相…

【迅搜19】扩展(二)TNTSearch和JiebaPHP方案

扩展&#xff08;二&#xff09;TNTSearch和JiebaPHP方案 搜索引擎系列的最后一篇了。既然是最后一篇&#xff0c;那么我们也轻松一点&#xff0c;直接来看一套非常有意思的纯 PHP 实现的搜索引擎及分词方案吧。这一套方案由两个组件组成&#xff0c;一个叫 TNTSearch &#xf…

基于springboot+vue的免税商品优选购物商城系统(前后端分离)

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容&#xff1a;毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目背景…

Ubuntu18.04在线镜像仓库配置

在线镜像仓库 1、查操作系统版本 rootubuntu:~# lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 18.04.5 LTS Release: 18.04 Codename: bionic 2、原文件备份 sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak 3、查…

浅析Redis①:命令处理核心源码分析(上)

写在前面 Redis作为我们日常工作中最常使用的缓存数据库&#xff0c;其重要性不言而喻&#xff0c;作为普调开发者&#xff0c;我们在日常开发中使用Redis&#xff0c;主要聚焦于Redis的基层数据结构的命令使用&#xff0c;很少会有人对Redis的内部实现机制进行了解&#xff0c…

mac PyCharm 使用conda环境

1 使用conda创建虚拟环境 conda create -n test6 python3.9 -y conda activate test62 选择conda环境 本地 选择已经存在的conda环境 右下角会显示现在的环境。

推荐算法常见的评估指标

推荐算法评估指标比较复杂&#xff0c;可以分为离线和在线两部分。召回、粗排、精排和重排由于定位区别&#xff0c;其评估指标也会有一定区别&#xff0c;下面详细讲解。 1 召回评价体系 召回结果并不是最终推荐结果&#xff0c;其本质是为后续排序层服务的&#xff0c;故核…

高效火情监测,科技助力森林防火【数字地球开放平台】

数字地球开放平台-以卫星遥感为核心的空天信息服务开放平台 (geovisearth.com) 2019年3月30日&#xff0c;四川省凉山州木里县爆发了一场森林火灾&#xff0c;火点位于海拔3800米左右&#xff0c;地形险峻、坡度陡峭、谷深难以抵挡火势。在扑救的过程中&#xff0c;27名森林消防…

弗洛伊德循环查找算法-原理

本文灵感来自哔哩哔哩视频 视频链接: 弗洛伊德循环查找算法 算法代码(java) package rain;class ListNode {int value;ListNode next;public ListNode(int value) {this.value value;this.next null;}Overridepublic String toString() {return "ListNode{" &q…

linux|操作系统|centos7物理机安装网卡驱动8188gu(内核升级,firmware固件,USB设备管理,module管理)

前言&#xff1a; 目前服务器领域centos7基本是主流的操作系统&#xff0c;而linux相对于Windows来说&#xff0c;软硬件方面的支持是差很多的&#xff0c;在硬件方面来说&#xff0c;以一个免驱的网卡为例&#xff0c;window xp可能不会自动识别到&#xff0c;但Windows10基本…

SqlAlchemy使用教程(四) MetaData 与 SQL Express Language 的使用

SqlAlchemy使用教程(一) 原理与环境搭建SqlAlchemy使用教程(二) 入门示例及编程步骤SqlAlchemy使用教程(三) CoreAPI访问与操作数据库详解SqlAlchemy使用教程(四) MetaData 与 SQL Express Language 的使用SqlAlchemy使用教程(五) ORM API 编程入门 四、Database MetaData 与 S…