基于 Atmega16 的Timer 实现的 PWM 信号, 设置定时器的溢出中断和比较中断的不同时间,从而控制 PWM 的频率和占空比。代码比较简单,但可以了解 AVR 单片机的中断系统,以及定时器的使用。
开发环境 :ICC AVR
程序代码如下 :
#include <iom16v.h>
#include <macros.h>
#define PPM_PORT PORTB
#define PPM_DIR DDRB
#define PPM_Pin BIT(7)
unsigned int timeValue = 2100;
#define Counter (65536 - timeValue)
#define Compare (Counter + 400)
/* PPM 初始化 */
void PPM_Init(void)
{
/* -------------- GPIO 管脚初始化 -------------- */
PPM_PORT |= PPM_Pin;
PPM_DIR |= PPM_Pin;
/* -------------- 定时器初始化 --------