2019-03-24 09:40发布
qiushenghua 发表于 2015-11-18 16:59 过了两天不见楼主重写程序,看样子楼主已经没有在做这个项目了,那么就不上参考代码了。
最多设置5个标签!
首先感谢版主大大上心啊,非常抱歉啊,这两天我一直在忙其他事,所以没有上论坛回复。然后下面是我对低功耗的认识和了解以及用定时器中断改写的代码请版主指导指导。下面这段代码我想要实现的是:当P1.3按键按下不放的时候,P1.0 和P1.6保持亮的状态,当按键松开的时候两个的是灭的状态。代码编译没错,但是下载之后,没有实现上面的功能。
低功耗模式也叫休眠模式是一种间歇式工作方式。通过间歇性的方式来启动和停止系统时钟,就可以开启低功耗模式。
MSP430G2553的CPU有5种工作模式: AM(Active Mode)、LPM0(Low Power Mode 0)、LPM1、LPM2、LPM3。后四种为低功耗模式。有些程序中的CPUOFF也是休眠模式。
LMP0模式:CPU、MCLK停用,SMCLK,ACLK激活。
LMP1模式:CPU、MCLK、如果DCO(数控振荡器)不作为SMCLK源的时候停用,ACLK激活。
LMP2模式;CPU、MCLK、SMCLK、DCO停用。ACLK激活。
LMP3模式:CPU、MCLK、SMCLK、DCO停用。ACLK激活。(与LMP2模式不同的是LMP3模式SR寄存器的SCG0置1了)
LMP4模式:CPU、MCLK、SMCLK、DCO、ACLK停用。
常用的模式是LPM0、LPM3。如果想用LMP3模式,在主程序的最后调用内函数_bis_SR_register(LPM3_bits),如果是退出LMP3模式则调用内部函数_bic_SR_register_on_exit(LPM3_bits)。
代码如下:
#include "MSP430G2553.h"
void WDT_init();
void P1_IODect();
void P13_Onclick();
void main(void)
{
WDTCTL = WDTPW + WDTHOLD;
P1DIR |= BIT0+BIT6;
P1OUT |= BIT0;
P1OUT |= BIT6;
P1REN |= BIT3;
P1OUT |= BIT3;
WDTCTL = WDT_ADLY_16;
IE1 |= WDTIE;
_enable_interrupts();
_bis_SR_register(LPM3_bits);
}
#pragma vector=WDT_VECTOR
__interrupt void WDT_ISR(void)
{
P1_IODect();
}
void P1_IODect()
{
unsigned char KEY_1=0;
if(P1IN&BIT3) //如果BIT3的值为1,
KEY_1=1;
else KEY_1=0;
while(KEY_1==0)
P13_Onclick();
}
void P13_Onclick() //P1.3的事件处理函数
{
P1OUT ^= BIT0;
P1OUT ^= BIT6;
}
一周热门 更多>