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);
}
此帖出自
小平头技术问答
一周热门 更多>