This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

关于Timer1输出PWM的问题,有间隔时间要求?



HI,各位大神:

小弟写的利用Timer1产生PWM信号做呼吸灯程序

while(1)
{
    if(flag)
    {
    flag=0;
/********************UP/DOWN**************************/
   if(i==0)
   {
                if(j<65000)
                {
                   j=j+250; //步长太小时呼吸时间过长
                   DutyCycleSet(j);
                }
               else
               {
                    i=1;
                       DutyCycleSet(j);
                    }
   }
   else if(i==1)
   {
          if(j>0)
              {
                  j=j-250;
                 DutyCycleSet(j);
              }
          else
               {
                 i=0;
                 DutyCycleSet(j);
               }
     }

   }
DelayMS(3); //必要的延时,间隔时间太短将会无反应,最小3ms
}

其中

void DutyCycleSet(uint16 cmp)
{

T1CC1L=(uint8)cmp;
T1CC1H=(uint8)(cmp>>8);
T1CNTL=0; //复位计数器
T1CTL |=1; //Free-Run模式
}

为什么这里必须要加一个延时呢,没有延时或者延时太小就灯就没反应了,难道太快了与什么东西冲突吗?

求解!!!