打印
[MCU]

MSP430G2553定时器输出PWM编程实例

[复制链接]
577|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
laocuo1142|  楼主 | 2020-10-23 15:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include <msp430.h>
//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的值即可

使用特权

评论回复

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1167

主题

5098

帖子

12

粉丝