打印
[AVR单片机]

pwm 红外发送有问题

[复制链接]
2563|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
suoma|  楼主 | 2010-3-11 22:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 suoma 于 2010-3-12 21:17 编辑

我想用PWM输出红外编码的0,1.比如0是低电平800us高电平200us,1低电平为600us,高电平400us。在程序的中断中修改占空比,但是这样做后出现第一个波形就不是很准,周期短了100us,而修改后第一个周期波形明显不对。请熟悉的说下原因。
void OC1A_Port(void)   //TCNT1
{
set_bit(DDRD,PD5);      

                             //把OC1A设置为输出,在管脚设置为定时器功能时要设置管脚的方向
}




void OC1A_Init(void)         //产生PWM,用于产生Start,0,1,End几种模式。有不同的初始化产生
{
TCCR1A = _BV(COM1A1);   //当计时器往TOP计数时若TCNT1与OCR1A匹配OC1A将清零为低电平   
  //在计时器往BOTTOM计数时TCNT1与OCR1A匹配OC1A将置位为高电平
  TCCR1B = _BV(CS11) |_BV(WGM13);         
                                           //设置T1为相位与频率修正PWM模式8 TOP值为ICR1   
  ICR1   = 500;                               //ICR1控制分辨率 2-16
  OCR1A = 100;                              //OCR1A控制占空比   
TIMSK = _BV(OCIE1A) | _BV(TOIE1);  //输出比较A匹配中断使能
}


int main(void)
{
cli(); //全局中断关
  OC1A_Port(); //管脚初始化
OC1A_Init();
sei(); //全局中断开
while(1);
}


SIGNAL(TIMER1_COMPA_vect)
{
OCR1A = 400;
}

相关帖子

沙发
Karlshen| | 2010-3-11 23:24 | 只看该作者
先整理下再发上来

使用特权

评论回复
板凳
suoma|  楼主 | 2010-3-12 21:18 | 只看该作者
不知道这样可读性怎么样,高手提示下

使用特权

评论回复
地板
huamunv| | 2010-3-12 21:47 | 只看该作者
是不是那个全局中断的问题

使用特权

评论回复
5
xinjie1023| | 2010-5-19 21:40 | 只看该作者
与定时器方法比较如何?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

82

主题

714

帖子

5

粉丝