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 }

 

转载于:https://www.cnblogs.com/hgxh/p/4127366.html

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值