arduino的定时器功能

一直很好奇arduino的定时器是怎么工作的,最近查了一下Atmega328P的芯片资料,现已Atmega328P的Timer1定时器作为说明,控制输出匹配引脚D9口的输出电平。

Arduino定时器有普通模式、CTC模式、快速PWM模式、相位可调PWM模式。本文采用CTC模式,即当寄存器TCNT1与OCR1A/OCR1B相等时(即匹配),OC1A/OC1B按照COM1x[1:0]的值相应的改变(置位,清零或取反)。同时TCNT1清零,TCNT1从0x00重新开始计数,当计数结果和下一个OCR1A/OCR1B寄存器中值相等时又发生匹配。发生匹配时,匹配比较标志OCF1x置位,即OCF1x=1,可申请匹配比较中断。本文使用OC1A(Arduino pro mini 的D9引脚)引脚作为输出,且比较匹配时电平取反。

Arduino定时器设置步骤:1设置定时器初值,确定定时时间;2、设置定时器匹配模式;2、设置预分频模式,与定时时间有关。下面是相关代码。

 1 /*******************************************************************************
 2 ***
 3 *PROJECT CODE: 定时输出                                                        *
 4 *CREATE DATE : 2014/11/27                                                      *
 5 *CREATED BY  :HGXH                                                             *
 6 *FUNCTION    :定时时间到后,OC1A输出引脚电平交替变化,每隔1s                   *
 7 *MODIFY DATE :2014/11/27                                                       *
 8 *DOCUMENT    :                                                                 *
 9 *OTHERS      :CPU = 16MHZ                                                      *
10 *********************************************************************************
11 **/
12 void setup(){
13     DDRB = (1 << 1);//OC1A设置为输出模式,OC1A引脚为PB1引脚,即Arduino pro moni D9引脚
14     OCR1A = 15624;//定时器初值周期0.5Hz OCR1A = 16000000/(2*1024*0.5) - 1 = 15624
15     TCCR1A = (0<<COM1A1) | (1<<COM1A0) | (0<<WGM11) | (0<<WGM10);//OC1A输出电平交替变换,CTC模式
16     TCCR1B = (0<<WGM13) | (1<<WGM12) | (1<<CS12) | (0<<CS11) | (1<<CS10);//1024分频,CS[12:10]决定分频模式有1、8、64、256、1024几种
17
18 }
19 void loop()
20 {
21
22     if((TIFR1 & 0x01) == 1)//输出比较器A匹配后OCF1A位置1
23     OCR1A = 15624;//定时器初值
24 }
时间: 2024-12-15 06:39:00

arduino的定时器功能的相关文章

Boost.deadline_timer实现定时器功能时需注意的时区问题

利用boost.deadline_timer() 可以很方便的实现定时器功能,详情参考:http://www.boost.org/doc/libs/1_57_0/doc/html/boost_asio/reference/deadline_timer.html 比如等待指定的时间数: boost::asio::io_service ioservice; boost::asio::deadline_timer tm(ioservice, boost::posix_time::seconds(5))

微信小程序学习Course 7 定时器功能

微信小程序学习Course 7 定时器功能 微信小程序中有一个定时器API函数,其提供了四个API接口 7.1.number setTimeout(function callback, number delay, any rest) 设定一个定时器,在定时到期以后执行注册的回调函数,值得注意的是本函数只执行一次!!!! setTimeout(this.DaoJiShi, 1000);//时间到达一秒执行一次DaoJiShi函数 如果我们想实现一个不停调用的函数,怎末实现呢?以下函数利用递归实现了

定时器_在.net core3.0 webapi中添加自定义定时器功能

原文:定时器_在.net core3.0 webapi中添加自定义定时器功能 前言:想在.net framework环境使用自定义定时器的话,参考我的另一篇文章:https://www.cnblogs.com/lxhbky/p/10242839.html 想在.net core中使用定时器功能,需要借助一个服务接口:IHostedService,   继承并实现对应方法,最后再setup.cs类中添加注册服务:services.AddHostedService<实现服务类>();   既然要写

MFC的DLL中实现定时器功能

方法一:创建一个线程, 反复读系统时间不就可以了? 如果定时要求不严,用Sleep就可以了.DWORD WINAPI TimerThread(LPVOID pamaram) { UINT oldTickCount, newTickCount; oldTickCount = GetTickCount(); //获取的是毫秒数 while(TRUE) { while(TRUE) { newTickCount = GetTickCount(); // 获取的是毫秒数 if(newTickCount -

Delphi的DLL里如何实现定时器功能?

一,首先引入“mmsystem”单元. 二,启动定时器: var MMTimerID: Integer; // 定时器ID MMTimerID := timeSetEvent(1000, 0, @TimerProc, 0, TIME_PERIODIC); 三,定时器过程代码: procedure TimerProc(uTimerID, uMessage: UINT; dwUser, dw1, dw2: DWORD); stdcall;begin  // 业务代码end; 四,结束定时器: tim

Android定时器功能实现方法

在Android开发中,定时器一般有以下3种实现方法: 1.采用Handler与线程的sleep(long)方法 2.采用Handler的postDelayed(Runnable, long)方法 3.采用Handler与timer及TimerTask结合的方法 下面逐一介绍: 一.采用Handle与线程的sleep(long)方法 Handler主要用来处理接受到的消息.这只是最主要的方法,当然Handler里还有其他的方法供实现,有兴趣的可以去查API,这里不过多解释. 1.定义一个Hand

不用写Windows服务实现定时器功能(FluentScheduler )

链接:http://www.cnblogs.com/mafly/p/FluentScheduler.html MacBook Pro 只有四个 USB Type-C 接口是否错了? 一项新技术的诞生总会对已存在的事物造成冲击或影响,如果大家都害怕冲击与影响,那这个世界永远像现在不变就行了,大家都好好的,待在自己的舒适区,社会丝毫没有创新与进步而言. 其实, USB Type-C 接口协议在三年前几个科技巨头公司就参与制定了协议,并答应要在自家的产品上推广它,但谁都怕一下子在自家产品上升级 USB

使用quartz实现定时器功能

首先导入两个包 1 <dependency> 2 <groupId>org.quartz-scheduler</groupId> 3 <artifactId>quartz</artifactId> 4 <version>2.2.2</version> 5 </dependency> 6 <dependency> 7 <groupId>org.quartz-scheduler</gr

基于c#中Timer实现定时器功能

在c#中关于定时器类就有三个 定义在System.Windows.Forms里 System.Windows.Forms.Timer是应用于WinForm中的,它是通过Windows消息机制实现的,类似于VB或Delphi中的Timer控件,内部使用API SetTimer实现的.它的主要缺点是计时不精确,而且必须有消息循环,Console Application(控制台应用程序)无法使用 定义在System.Threading.Timer类里 定义在System.Timers.Timer类里