打印

关于PIC12F的编程问题

[复制链接]
1738|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lzloong|  楼主 | 2011-7-23 15:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 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的值?
谢谢!!
沙发
yewuyi| | 2011-7-25 09:07 | 只看该作者
:Q 这代码编辑的风格,看的让俺抓狂。。。

使用特权

评论回复
板凳
lzloong|  楼主 | 2011-7-27 09:53 | 只看该作者
2# yewuyi 不好意思,一个是因为自己写的程序还不够多,很多该注意的地方可能没注意。
另外一个是代码复制上来格式有点变了

使用特权

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

本版积分规则

3

主题

8

帖子

1

粉丝