#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的值即可 |