AVR定时器中断溢出 (2016-07-29 23:06:51)

最近开始学习飞控的PWM信号输入,发现以前的认知不太正确。一年前做的蓝牙信号接收器,直接给了4个PWM信号的输出。而PWM的频率是arduino默认的频率。但是最近才发现,遥控器的PWM信号常用的是50Hz,也就是信号间隔20ms。

因此打算自己弄个定时器来生成中断,然后设置管脚的高低电平来模拟PWM。

以前用的是MEGA328P,现在打算改用TINY24了。

这是个16位的定时器,时钟频率是8M:

void timer1_init(void)

{

 TCCR1A = 0;

 TCCR1B = 0;

 // 这里设置256分频

 TCCR1B |= (_BV(CS12));

 // 其他控制寄存器都设置为空

 TCCR1C = 0;

 //这里设置了一个1.5ms的延时

//值 = 等待的时长(us) * 时钟频率(MHz)/分频

// 46 = 1500 * 8 / 256

 TCNT1 = 65536 - 46;

 // 开启溢出中断

 TIMSK1 = 1;

}

中断响应函数

ISR(TIMER1_OVF_vect)

{

 // 这里重置触发计数器

 TCNT1 = 65536 - 46;

}

看起来还是很简单。在设置寄存器的时候,要把未用的位先置0。

你可能感兴趣的:(AVR定时器中断溢出 (2016-07-29 23:06:51))