试了网上的呼吸灯程序发现了一点问题

2019-03-24 13:57发布

http://v.youku.com/v_show/id_XNDI5ODU5NTYw.html
上面是我使用网上呼吸灯程序在示波器上P1.6口的波形

使用的TimerA的PWM输出
理想情况是占空比平滑的递增递减循环下去
但是正如视频中那样,有一点跳动,而且跳动的幅度或是跳动过去的周期数和CCR1设置的值存在关系

程序中当CCR1设置的数值较大时例如1500,,会在每次占空比递增递减一个周期后跳几个周期,一开始以为是中断标志位没清空或是执行一些if的代码占用CPU产生的
但是当CCR1改小时,例如750时,就看不到视频中的那个跳动的

程序源码如下:

#include "msp430g2553.h"
#define PWM BIT6


int main( void )
{
          unsigned int i;
          unsigned char flag;
          flag = 1;
          i = 0;

          // Stop watchdog timer to prevent time out reset
          WDTCTL = WDTPW + WDTHOLD;

            //TACLK <-- SMCLK TACTL = TASSEL_2 + TACLR;
            //Timer时钟源选择 清零计时器 CCR0 = 1500;
                    TACCTL1 = OUTMOD_6;//输出模式选择:PWM复位/置位 CCR1 = 0;
                      P1DIR |= BIT6;//P1.6设置为输出 P1SEL |= PWM;//P1.6设置为PWM输出口功能 TACTL |= MC_1;//工作模式为增加模式
                      while(1) { if(TACTL & BIT0) {
                                 TACTL &= ~BIT0;
                                   if (TA0CCTL1 & CCIFG) TA0CCTL1 &= ~BIT0;
                                   if(flag) i++; else i--; if(i >= 1499) flag = 0;
                                  if(i == 0) flag = 1;
                                  CCR1 = i;//改变占空比
                        }
          }

          //while(1);
} 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
3条回答
zzzvvvxxxd
2019-03-24 20:24
 精彩回答 2  元偷偷看……0人看过

一周热门 更多>

相关问题

    相关文章