单片机 > 单片机程序设计 > 详情

AVR定时器中断溢出

发布时间:2024-11-01 发布时间:
|

最近开始学习飞控的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。



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
MSP430低功耗模式-while循环失效