#include <msp430x16x.h>
void delay (void)
{
unsigned int i;
for (i=13350;i>0;i--);
}
static unsigned int a=5000,b=0;
void main(void)
{unsigned int i;
WDTCTL = WDTPW + WDTHOLD; //关狗
/*------选择系统主时钟为8MHz-------*/
BCSCTL1 &= ~XT2OFF; //打开XT2高频晶体振荡器
do
{
IFG1 &= ~OFIFG; //清除晶振失败标志
for (i = 0xFF; i > 0; i--); //等待8MHz晶体起振
}
while ((IFG1 & OFIFG)); //晶振失效标志仍然存在?
BCSCTL2 = SELM1 | DIVM1 | DIVM0|SELS | DIVS1 | DIVS0;
//对XT2CLK 8分频作为MCLK时钟, 8分频后作为SMCLK时钟
P1DIR |= 0x0C; // P1.2 and P1.3 output
P1SEL |= 0x0C; // P1.2 and P1.3 TA1/2 otions
P2SEL&=~0X03;
P2DIR&=~0X03;
P2IE|=0X03;
P2IES|=0X03;
P2IFG=0;
CCR0 = 10000; // PWM Period/2
// CCR2 PWM duty cycle
TACTL = TASSEL_2 + MC_3; // ACLK, up-down mode
_EINT();
for (;;)
{
CCTL1 = OUTMOD_6; // CCR1 toggle/set
CCR1 = a; // CCR1 PWM duty cycle
CCTL2 = OUTMOD_6; // CCR2 toggle/set
CCR2 = b;
LPM0;
}
}
//键控data大小
#pragma vector=PORT2_VECTOR
__interrupt void PORT2_ISR(void)
{
_BIC_SR_IRQ(CPUOFF); // Clear LPM0 bits from 0(SR)
P2IE=0;
if ((P2IFG&0X01)==0X01)
{
P2IFG=0;
delay ();
if ((P2IN&0X01)==0)
{
if (a==10000) a=0;
a+=1000;
}
}
else if ((P2IFG&0X02)==0X02)
{
P2IFG=0;
delay ();
if ((P2IN&0X02)==0)
{
if (a==0)a=10000;
a-=1000;
}
}
else _NOP();
P2IE|=0X03;
_NOP();
}