Randy 发表于 2012-7-18 09:20:31

【大赛原创经验贴】Timer_A之典型应用——PWM

前天在此发了一个贴,很意外,也很惊喜!因为内容虽然简单了些,但还是有不少人来捧场。尤其是管理员的鼓励,让我更加有学习的热情。其实,要表达的只有一句:谁都是从菜鸟阶段走过来的,所以不要气馁。要做就从最简单的做起,不然我们连摆脱菜鸟的机会也没有!

这两天没有闲着的自己,重点还是放在了Timer_A上,总觉得这一块再学一个星期也未必能掌握。接下来与大家分享一下自己“玩”PWM的亲身经历吧。PWM即脉冲调制,想必大家应该知道,强大的Timer_A可以输出任意占空比的脉冲。上次我分享的是定时闪烁,很简单但效果很直观。而这次我的简单玩法依然是通过led的直观来测试我的程序效果的!观察led的亮暗程度得以验证。

程序一:
#include "msp430x14x.h"
void main( void )
{
WDTCTL = WDTPW + WDTHOLD;      //关看门狗
TACTL=TASSEL0+TACLR+MC0;         //ACLK为时钟源,清TAR,增计数模式
TACCR0=512-1;                              //设定PWM周期
TACCTL1=OUTMOD_7;                      //CCR1输出为reset/set模式
TACCR1=384;                                 //CCR1的PWM占空比设定
TACCTL2=OUTMOD_7;                      //CCR2输出为reset/set模式
TACCR2=128;                                 //CCR2的PWM占空比设定
P1DIR|=0X0c;                                 //P1.2、P1.3输出,对应TA1,TA2
P1SEL|=0X0c;                                  //TA1,TA2输出功能
while(1);
}
功能:P1.2,P1.3分别输出TA1,TA2的pwm信号,通过杜邦线接两个led,
         可观察到不同占空比的pwm效果。一个亮些,一个暗些。

程序二:

void main( void )
{
// Stop watchdog timer to prevent time out reset
WDTCTL = WDTPW + WDTHOLD;

TBCTL=TBSSEL_2+TBCLR+MC0;   //SMCLK(800K),增模式
TBCCTL1=OUTMOD_3;         //置位/复位模式
TBCCR0=8000;                //PWM周期
TBCCR1=0;                   //PWM的低电平时间

P4DIR=0X02;            //P4.1输出,P4.1受TBCCR1控制
P4SEL=0X02;            //P4.1作为定时器B的PWM输出
P1DIR=0XFC;            //P1.0 P1.1输入
P1IE=0X03;             //允许中断P1.1和P1.2
P1IES=0XFC;            //上升沿中断

_EINT();
while(1);
}

#pragma vector=PORT1_VECTOR
__interrupt void PORT_INTERRUPT(void)
{
uint i;
for(i=8000;i>0;i--);    //延时,去抖
if(P1IFG&BIT0)
{
    if(TBCCR1>=8000)   
    {
      TBCCR1=1000;   
    }
    else
    {
      TBCCR1=TBCCR1+1000;   
    }
}
if(P1IFG&BIT1)
{
if(TBCCR1<1000)
{
    TBCCR1=8000;
}
else
{
    TBCCR1=TBCCR1-1000;
}
}
P1IFG=0X00;   //消除按键中断标志
}
功能:通过P4.1外接一个led灯
      430板子的key1,key2调节亮度。一个增,一个减。

今天的分享就这样结束了,有什么不足之处希望大家指正。最后希望大家能一起探讨学习过程中的疑问,分享自己的经历,大家一起努力。

124330190 发表于 2012-7-24 09:35:59

我发现改变 bright 的值 对led的亮度无影响啊~还是不是很理解bright的作用。

╃╄じ唁ぜ╗ 发表于 2012-8-2 09:24:38

MC0好像是停止模式吧,MC1是增模式,问下P1口是什么条件下中断的?有按键按下的时候吗?

tosa 发表于 2014-12-1 17:00:57

Mark!!!
页: [1]
查看完整版本: 【大赛原创经验贴】Timer_A之典型应用——PWM