[资料分享]
MSP430单片机电源开关休眠和唤醒 程序
MSP430单片机电源开关休眠和唤醒 程序
电源开关休眠和唤醒:
- #include "msp430x42x.h"
- char TimeCount=0; //闪烁计时
- char BT_IntervalFlag; //定时中断全局变量标志
- void main( void )
- {
- DTCTL=WDTPW+WDTHOLD; //停止看门狗
- FLL_CTL0|=XCAP18PF; //配置晶振负载电容
- P1DIR |= BIT0+BIT1+BIT2+BIT3+BIT4;
- P2DIR |= BIT0+BIT1+BIT2+BIT3; //悬空不用的IO口要置为输出
- P1OUT = 0; //否则不确定电平会造成IO耗电
- P2OUT = 0;
- BTCTL = BT_ADLY_125; //BasicTimer时钟选为ACLK,设为125ms中断一次
- IE2 |= BTIE; // 允许BasicTimer中断
- P1IES |= BIT6; // P1.6下降沿触发中断
- P1IE |= BIT6; // 允许P1.6中断
- _EINT(); // 总中断允许
- while(1) // 主循环
- { BT_IntervalFlag=0;
- while(BT_IntervalFlag==0) LPM3;
- //休眠,仅留ACLK,仅能被被BasicTimer唤醒。以下代码将每1/8秒执行一次。
- TimeCount++; //计数
- if(TimeCount>=4) TimeCount=0; //产生0~3计数(0.5秒)
- if(TimeCount==0) P2OUT |= BIT0; //亮125ms
- else P2OUT &=~BIT0; //灭375ms
- if((P1IN & BIT5)==0) //若KEY1被按下
- {
- P2OUT &=~ BIT0; //关闭LED
- P1IFG &=~ BIT5; //清除P1.5中断标志
- LPM4; //关机
- }
- }
- }
- #pragma vector = BASICTIMER_VECTOR // BasicTimer定时器中断
- __interrupt void BT_ISR(void) // 声明一个中断服务程序,名为BT_ISR()
- {
- BT_IntervalFlag=1;
- __low_power_mode_off_on_exit(); //退出中断时唤醒CPU。
- }
- #pragma vector = PORT1_VECTOR //P1口中断源
- __interrupt void P1_ISR(void) //声明一个中断服务程序,名为P1_ISR()
- {
- P1IFG=0;
- __low_power_mode_off_on_exit(); //退出中断时唤醒CPU。
- }
[color=rgb(51, 102, 153) !important]复制代码
电源开关复位:
- #include "msp430x42x.h"
- char TimeCount=0; //闪烁计时
- __no_init char PWR_Flag; //电源标志
- void main( void )
- {
- WDTCTL=WDTPW+WDTHOLD; //停止看门狗
- FLL_CTL0|=XCAP18PF; //配置晶振负载电容
- P1DIR |= BIT0+BIT1+BIT2+BIT3+BIT4;
- P2DIR |= BIT0+BIT1+BIT2+BIT3; //悬空不用的IO口要置为输出
- P1OUT = 0; //否则不确定电平会造成IO耗电
- P2OUT = 0;
- BTCTL = BT_ADLY_125; //BasicTimer时钟选为ACLK,设为125ms中断一次
- IE2 |= BTIE; // 允许BasicTimer中断
- _EINT(); // 总中断允许
- if(PWR_Flag ==0) PWR_Flag=1; // 电源标志每次复位后取反
- else PWR_Flag=0;
- if(PWR_Flag ==0) LPM4; //电源标志为0时关机
- //--------------电源标志为1时才执行主循环--------------------------
- while(1) // 主循环
- {
- LPM3; //休眠,仅留ACLK,以下代码将每1/8秒执行一次。
- TimeCount++; //计数
- if(TimeCount>=4) TimeCount=0; //产生0~3计数(0.5秒)
- if(TimeCount==0) P2OUT |= BIT0; //亮125ms
- else P2OUT &=~BIT0; //灭375ms
- }
- }
- #pragma vector = BASICTIMER_VECTOR // BasicTimer定时器中断
- __interrupt void BT_ISR(void) // 声明一个中断服务程序,名为BT_ISR()
- {
- __low_power_mode_off_on_exit(); //退出中断时唤醒CPU。
- }
[color=rgb(51, 102, 153) !important]复制代码