请问各位:
最近调试AVR mega88的两路PWM,使用快速模式,不是很明白,请了解的朋友不吝赐教,这个OC1A,OC1B在使用的时候需要注意什么?
我想先使用OC1A,然后更改寄存器使用OC1B,分别控制不同颜色的LED,为什么不能实现? 在使用呢PWM的时候不可以两个通道进行切换么?
以下是我的测试程序,希望大家指正
void timer_init(void)
{
TCCR1A=0x82;定时器/计数器1 两路PWM,匹配清零
//0x82中A是指COM1A1:COM1A0置为10,COM1B1:COM1B0置10,即比较匹配时OCn置0;
//0x82中2是指WGM11 WGM10置为10与下方控制寄存器A一同控制选择快速PWM模式6
TCCR1B|=0x09;//定时器/计数器1的控制寄存器B;
//0x02中0是指将WGM13 WGM12置为01,CS12 CS11 CS10置为010
//WGM13 WGM12 WGM11 WGM10为0110时,选择快速PWM格式;
//CS12 CS11 CS10置为001表示选择1分频模式;
MCUCR=0x00;
}
void main()
{
port_init();
timer_init();
while(1)
{
for(count=0;count<512;count++) //OCR=0时,LED最亮,然后逐渐变暗
{
OCR1A=count; //比较匹配寄存器赋值
_delay_ms(5); //延时一段时间,以观察效果
}
_delay_ms(1500); // LED最暗时,延时一段时间
TCCR1A=0x22;
for(count=0;count<512;count++) //OCR=512时,LED最暗,然后逐渐变亮
{
OCR1B=512-count;
_delay_ms(5);
}
_delay_ms(1500); //LED最亮时,延时一段时间
}
}
调试的时候,在初始化的时候对TCCR1A进行设定的值,可以改变OC1A或者OC1B输出,但是在主循环中更改输出通道无法实现,不明白,当实现PWM之后,为什么改变这个寄存器的值,没有反应?就是我标注的部分。 |