现在的位置: 首页 > 综合 > 正文

avr 8位定时器/计数器0 介绍及程序

2013年11月22日 ⁄ 综合 ⁄ 共 1352字 ⁄ 字号 评论关闭

1.定时器计数器0输出比较流程图

T/C0相关寄存器:

TCCR0A : 控制寄存器

TIMSK0  : 中断屏蔽寄存器

OCR0A  :  输出比较寄存器,包含一个8 位的数据,不间断地与计数器数值TCNT0 进行比较。匹配事件可以用来产生输出比较中断,或者用来在OC0 引脚上产生波形。

TCNT0   : 计数寄存器,通过它 寄存器可以直接对计数器的8 位数据进行读写访问。

 

2.对应can128引脚:

PB7 (OC0A/OC1C)

OC0A为T/C0的输出引脚,即设置当TNCT0A和OCR0A数值相等时,外部输出引脚OC0A上的电平变化。 

 

3.功能说明:

8 位比较器持续对TCNT0 和输出比较匹配寄存器OCR0 进行比较。一旦TCNT0 等于OCR0 ,比较器就给出匹配信号。

 

4.定时器计数器0输出模式:

 

普通模式: 普通模式(WGM01:0 = 0) 为最简单的工作模式。在此模式下计数器不停地累加。计到8 比特的最大值后(TOP = 0xFF),由于数值溢出,计数器简单地返回到最小值0x00 重新开始。

CTC(比较匹配时清0定时器):在CTC 模式(WGM01:0 = 2) 下OCR0 寄存器用于调节计数器的分辨率。当计数器的数值TCNT0等于OCR0时计数器清零。OCR0定义了计数器的TOP值,亦即计数器的分辨率。

快速PWM :快速PWM 模式(WGM01:0 = 3) 可用来产生高频的PWM 波形。快速PWM 模式与其他PWM模式的不同之处是其单斜坡工作方式。计数器从BOTTOM计到MAX,然后立即回到BOTTOM重新开始。

 

相位修正PWM :相位修正PWM 模式(WGM01:0 = 1) 为用户提供了一个获得高精度相位修正PWM 波形的方法。此模式基于双斜坡操作。计时器重复地从BOTTOM 计到MAX,然后又从MAX倒退回到BOTTOM。

 

5.T/C0时钟选择:

定时器/计数器的工作必须指定时钟源,无时钟源定时器不能工作。时钟源有内部时钟源和外部时钟源,由CS02,CS01,CS00位选择。外部时钟源由T0引脚输入。

 

6.比较匹配输出模式:

 

 

7.程序:

7.1 T/C0 CTC模式:

void Timer0_Init(void)
{
                                                            
   TCCR0A |= (1 << WGM01 ) | ( 0 << WGM00 ) | ( 0 << COM0A1 ) | ( 0 << COM0A0 ) | ( 1 << CS02 ) | ( 0 << CS01 ) | ( 1 << CS00 );
   TIMSK0 |= ( 1 << TOIE0 );

   OCR0A = 0xFF;
   TCNT0 = 0x7F;
}

#pragma vector =  TIMER0_OVF_vect 
__interrupt void TIMER0_serve(void)
{
    static char counter = 0;
    static char state = 0;
    static char CountTimes = 60;
       
    counter++;
    if(counter > CountTimes )
    {
      counter = 0; 
      state ^= ON;    
      led(LED_RUN,state);           
    }
    TCNT0 = 1;
}

 

 

抱歉!评论已关闭.