`
相关寄存器:TCCR0:位3和位6用来设置模式。普通模式相位修正PWM,CTC,快速PWM模式。配置成CTC模式。位4和位5用来设置OC0脚(PB3)输出电平的模式。
tiMSK:中断屏蔽寄存器。0位定时器0溢出中断使能位。1定时器输出比较中断。 OCR0:输出比较寄存器,当设置为非普通模式后,此寄存器就会始终与TCNT0(定时器计数器)相互比较。
说明:CTC模式,可以设置输出一个1/2占空比的波形。可通过示波器观察OC0引脚输出电平情况。
#include//8位的定时器
typedef unsigned int uint;
void CTC_Init(void)
{
TCCR0|=(1<<3);
TCCR0&=~(1<<6);//3,6位01设置为CTC模式非PWM模式
TCCR0|=(1<<4);
TCCR0&=~(1<<5);//4,5位设置当TCNT0与OCR0相等时,OC0脚输出取反
TCCR0|=(1<<2);
TCCR0&=~(1<<1);
TCCR0&=~(1<<0);//0,1,2设置定时器的分频
TCNT0=0x00;
OCR0=0xfc;//设置输出比较寄存器的值
TIMSK|=(1<<1);//使能输出比较匹配中断
SREG|=(1<<7);//设置全局中断
DDRB=0xff;
PORTB=0xff;//OC0脚对应PB口的PB3脚,设置B口为输出方向
}
void main(void)
{
CTC_Init();//定时器初始化
while(1);
}
#pragma interrupt_handler CTC_isr:20
//比较匹配中断不做任何操作
void CTC_isr(void)
{
;
}
`