打印
[AVR单片机]

atmega32p 定时器 PWM模式疑问

[复制链接]
837|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
chendaohong|  楼主 | 2015-11-10 23:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
代码如下,用自定义的 delay_ms() 函数时 OCR0A/OCR0B 脚位(PD6/PD5)的LED一直亮,不会变化,但用for循环代替 delay_ms函数则正常,两个LED都会渐亮、渐暗的变化,求解;

//ICC-AVR application builder : 2015/9/24 22:04:07
// Target : M328p
// Crystal: 16.000Mhz
// Serial send and receive function

#include <iom328pv.h>
#include <avrdef.h>
//#include <macros.h>


void delay_ms(int n);
void timer0_init(void);

void main(void)
{
int i;
int j,k;
DDRD=0XFF;  //PORTD输出模式
PORTD=0X00;
DDRB=0XFF;  //PORTD输出模式
PORTB=0X0F;
CLI();
timer0_init();
SEI();

while(1)
{
  for(i=0;i<255;i++)
  {
   OCR0A=i;
   OCR0B=i;
   for(j=0;j<5;j++)
   {
    for(k=0;k<10000;k++);
   }
   //delay_ms(5);
  }
  
  for(i=254;i>0;i--)
  {
   OCR0A=i;
   OCR0B=i;
   for(j=0;j<5;j++)
   {
    for(k=0;k<10000;k++);
   }
   //delay_ms(5);
  }
}
}

void delay_ms(int n)
{
int k,j;
for(j=0;j<n;j++)
{
  for(k=0;k<10000;k++);
}
}


void timer0_init(void)
{
TCNT0=0X00;  //定时器初始值
TCCR0A|=(1<<COM0A0)|(1<<COM0A1)|(1<<COM0B0)|(1<<COM0B1)|(1<<WGM00); //WGM00置位1,Phase correct PWM模式,COM0A1/B1 COM0A0/B0置位1
TCCR0B|=(1<<CS00);  //无时钟分频
OCR0A=1;
OCR0B=0;
//TIMSK0=0x01;  //定时器计数器0比较匹配开启,溢出开启
}

相关帖子

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

本版积分规则

3

主题

9

帖子

0

粉丝