问题:
想要做一个呼吸灯,不过在进入低功耗模式3后,呼吸等会无法出来。
时钟都设置了ALCK采用外部低频晶振,为什么程序一运行到 __bis_SR_register(LPM3_bits + GIE);就没有呼吸灯了呢?
芯片:msp430g2553 20P
硬件:LaunchPad开发板
软件:IAR
程序代码:
#include <msp430g2553.h>
// *************************************************************
// 延时函数,对于1M主频,约延时1ms
// *************************************************************
void delay_1ms(void)
{
unsigned int k;
for (k=0;k<195;k++);
}
// *************************************************************
// 延时函数,延时n*ms
// *************************************************************
void delay_nms(unsigned int n)
{
unsigned int j;
for (j=0;j<n;j++)
{
delay_1ms();
}
}
int main(void)
{
unsigned const PWMperiod=1500;
volatile unsigned int i;
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
P1DIR |= 0x40; // P1.6 output
P1SEL |= 0x40; // P1.6 options GPIO
CCR0 = PWMperiod; // PWM Period
CCTL1 = OUTMOD_7; // CCR1 reset/set
TACTL = TASSEL_1 + MC_1; // ACLK, up mode
/************下面几句其实不加效果也一样,但是为了确定最优ACLK在工作所以全选ACLK了****/
BCSCTL3|=LFXT1S_0; //外部32768HZ
BCSCTL1&=~BIT6; //XTS位清零ACLK选择低频晶振
BCSCTL2|=SELM_3; //MCLK选择LFXT1CLK
BCSCTL2|=BIT3; //SMCLK选择LFXT1CLK
__bis_SR_register(LPM3_bits + GIE);
while(1)
{
CCR1=0;
for(i=0;i<=PWMperiod;i+=1) //渐亮
{
TACCR1=i;
delay_nms(4-(i/500));
}
for(i=PWMperiod;i>0;i-=1) //渐暗
{
TACCR1=i;
delay_nms(4-(i/500));
}
CCR1=0;
delay_nms(4-(i/500));
}
}
求救各路专家,在线等待