本帖最后由 lzloong 于 2011-7-27 09:57 编辑
我想编个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;
i f(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的值?
谢谢!! |