×
单片机 > 单片机程序设计 > 详情

MSP430_定时器输出PWM

发布时间:2020-12-29 发布时间:
|

#include

//MSP430G2553  - 使用Timer_A,Up Mode, DCO SMCLK

//

//  介绍: 该程序利用TIMER A 的 UP模式 在P1.0脚产生1S方波

//  ACLK = na, SMCLK = MCLK = TACLK =  DCO-16M

//

//               MSP430G2553

//            -----------------

//        /||              XIN|-

//         | |                 |

//         --|RST          XOUT|-

//           |                 |

//           |         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/3                              TA0.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要写成TA1CCR2       TA1.2由P2.4 P2.5输出

}


void Timer_A1_1_init()   //TA1.1输出PWM

{

    TA1CCTL1=OUTMOD_7;

    TA1CCR1=123;   //占空比CCR1/CCR0=3/4,注意CCR1要写成TA1CCR1   TA1.1由P2.1 P2.2输出

}


void IO_init()

{

    P1SEL|=BIT2+BIT6;

    P1DIR|=BIT2+BIT6;//P1.2 P1.6输出   TA0.1   OUT1

    P2SEL|=BIT4;

    P2DIR|=BIT4;//P2.4 P2.5输出   TA1.2   OUT2

    P2SEL|=BIT1+BIT2;

    P2DIR|=BIT1+BIT2; //P2.1 P2.2输出  TA1.1   OUT1

}


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;

}


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



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

热门文章 更多
STM32中断向量表的位置.重定向