MSP430_定时器输出PWM


#include
//MSP430G2553- 使用Timer_A,Up Mode, DCO SMCLK
//
//介绍: 该程序利用TIMER A 的 UP模式 在P1.0脚产生1S方波
//ACLK = na, SMCLK = MCLK = TACLK =DCO-16M
//
//MSP430G2553
//-----------------
///|\|XIN|-
//| ||
//--|RSTXOUT|-
//||
//|P1.0/TA1|-->led
//
//使用 MSP430 LaunchPad , MSP430G2553芯片
//CCS5.2编译通过
//******************************************************************************
/*#define CPU_F ((double)1630)//cpu frequency1630//CPU的实际MCLK大约为13.05/8=1.63KHz
#define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0))
#define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0))*/

void Timer_A0_1_init()//TA0.1输出PWM
{
TACTL|= TASSEL_1+MC_1; //ACLK,增计数
CCTL1=OUTMOD_7; //输出模式为复位/置位
CCR0=328; //时钟频率为32768HZ,100HZ
//CCR1=164; //时钟频率为32768HZ,占空比CCR1/CCR0=50%
CCR1=109; //占空比CCR1/CCR0=1/3TA0.1由P1.2 P1.6输出
}

void Timer_A1_2_init()//TA1.2输出PWM
{
TA1CTL|= TASSEL_1+MC_1; //ACLK,增计数
TA1CCTL2=OUTMOD_7; //输出模式为复位/置位,注意CCTL2要写为TA1CCTL2
TA1CCR0=163; //时钟频率为32768HZ,波形32768/CCR0=199HZ
TA1CCR2=41; //占空比CCR2/CCR0=1/4,注意CCR2要写成TA1CCR2TA1.2由P2.4 P2.5输出
}

void Timer_A1_1_init()//TA1.1输出PWM
{
TA1CCTL1=OUTMOD_7;
TA1CCR1=123; //占空比CCR1/CCR0=3/4,注意CCR1要写成TA1CCR1TA1.1由P2.1 P2.2输出
}

void IO_init()
{
P1SEL|=BIT2+BIT6;
P1DIR|=BIT2+BIT6; //P1.2 P1.6输出TA0.1OUT1
P2SEL|=BIT4;
P2DIR|=BIT4; //P2.4 P2.5输出TA1.2OUT2
P2SEL|=BIT1+BIT2;
P2DIR|=BIT1+BIT2; //P2.1 P2.2输出TA1.1OUT1
}

void main(void) {
WDTCTL=WDTPW+WDTHOLD;
IO_init();
TA1CCTL0 = CCIE;
Timer_A0_1_init();
Timer_A1_2_init();
Timer_A1_1_init();
_EINT();
_BIS_SR(CPUOFF); // Enter LPM0进入低功耗模式0 SMCLK ON,ACLK ON
}

#pragma vector=TIMER1_A0_VECTOR
__interrupt void TimerA1_ISR(void)
{
TA1CCR2 = 82;
}


【MSP430_定时器输出PWM】实验结果在P2.4引脚输出占空比可调的PWM,若想得到想要的占空比,在中断里更新TA1CCR2的值即可

    推荐阅读