关于PIC12F的编程问题

2020-02-08 12:24发布

我想编个PWM程序,脉宽要求从小到大,然后从大到小。有两种方式 1、我想在tmr2的中断中改变脉宽  2、在主函数中改脉宽。这两种方法我都遇到了相同的问题。我把延时延长了 pwm就不按设定的方式变化。
中断改脉宽:/*void interrupt ISR(void) //中断服务程序
{

   if (TMR2IE && TMR2IF) //判TMR2 中断
                 {
                        TMR1IF = 0; //清除TMR1 中断标志
                        count++;
                     if(count==40) //每40个中断,修改PWM的脉宽即CCPR1L的值
                                {
                                    count=0;
                                   if(flag==0)
                                      {
                                         ++CCPR1L;
                                        if(CCPR1L==0xc7)
                                             flag=1;
                                       }
                     
                                   if(flag==1)
                                       {
                                          --CCPR1L;
                                         if(CCPR1L==1)
                                         flag=0;
                                            }
               
                }       
                    }

} //中断结束并返回
*/                  我把couont的值改大了,就不行。比如改成200.


主函数改脉宽:
do{
         
     
        __delay_ms(80);
      
         if(flag==0)
            {
               ++CCPR1L;
               if(CCPR1L==0xc7)
                                        flag=1;
               }
                     
          if(flag==1)
              {
                 --CCPR1L;
                  if(CCPR1L==1)
                    flag=0;
                             }
         }while(1);
我把  __delay_ms(80)中的80改成150,能通过编译,但pwm有很长段时间是高电平,而且变化规律不是参数是80的那样。
我不知道是为什么,请教下PIC的达人们。。。
我手头只有kit2 不能在线调试。。。
我还想问下,这两种改脉宽的方式那种好?? 在中断中我想改变修改脉宽的时间间隔是不是只能通过修改count的值?
谢谢!!
0条回答

一周热门 更多>