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;
}