×
嵌入式 > 技术百科 > 详情

MSP430之Timer_A之典型应用——PWM

发布时间:2020-06-20 发布时间:
|
程序一:
#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调节亮度。一个增,一个减 



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
实时控制.安全.如何加速实现未来工厂落地?