访问手机版页面
你的位置:老古开发网 > 单片机 > MSP430单片机 > 正文  
用MSP430F1121设计电子产品的心得,与大家探讨
内容导读:
MSP430系列功耗很低,用来设计电子产品时可以不设电源开关,以下是我设计的电子产品的

思路:

1.用两节电池供电,接上电池后F1121复位,设置好端口立即进入低功耗状态。

2.将on/off按钮接在 P2.0,利用端口的中断使电路进入工作状态。

3.当按着on/off超过几秒后电路进入低功耗状态。

4.利用WDT,当一段时间没有任何操作后电路进入低功耗状态。



程序如下:

#include  "msp430x11x1.h"



#define uint unsigned int

#define uchar unsigned char



unsigned short *sptr;           // Stack pointer

extern void getsptr (void);     // Get Stack Pointer



uchar    interrupt_flag;

uint times;



interrupt[PORT2_VECTOR] void P2_ISR(void);

interrupt[WDT_VECTOR] void watchdog_timer(void);



void delay(uchar k)

{

uchar i;



for(i=0;i
}



void beep(void)

{

P1OUT |= BIT3; // beep on

delay(120);

P1OUT &= ~BIT3; // beep off

}



void reset_port(void)

{

P1OUT &= ~BIT0;

P1OUT &= ~BIT1;

P1OUT &= ~BIT2;

P1OUT &= ~BIT3;



P2OUT &= ~BIT1;

P2OUT &= ~BIT2;

}    



void sleep(void)

{

    P2IES |= BIT0;        //P2.0 interrupt hi->low edge

      P2IFG &= ~BIT0;        //P2.0 IFG cleared

    P2IE |= BIT0;        //P2.0 interrupt enabled



    getsptr();                    // Get the current stack pointer - 2

    sptr-=1;

        

    IE1 &= ~WDTIE;     // disable WDT interrupt



    reset_port();

        

    LPM4;

    

}



void main(void)

{

uchar     i;



WDTCTL = WDTPW+WDTTMSEL+WDTCNTCL+WDTIS1; // Set Watchdog Timer interval to 0.5ms



P1DIR |= BIT0;

P1DIR |= BIT1;

P1DIR |= BIT2;

P1DIR |= BIT3;



P2DIR &= ~BIT0;    //设为on/off按钮输入

P2DIR |= BIT1;

P2DIR |= BIT2;



reset_port();

    

P2IES |= BIT0;        //P2.0 interrupt hi->low edge

P2IFG &= ~BIT0;        //P2.0 IFG cleared

P2IE |= BIT0;        //P2.0 interrupt enabled



delay(250);



_EINT();                      // Enable Interrupts



sleep();  //进入低功耗



beep();   //提示



times=0;

IE1 |= WDTIE;     // Enable WDT interrupt



interrupt_flag=0;



if((P2IN&BIT0) != BIT0 )    //当on/off按钮按着超过5秒后进入低功耗

  {    

    times=0;

    while((P2IN&BIT0) != BIT0 )

        {

          if( times>6000 )        //5s

            {

            beep();

            sleep();

            break;

            }

        }

  }



while(1)

  {



  IE1 |= WDTIE;     // Enable WDT interrupt

    

  interrupt_flag=0;

    

.......

  if( times > 12000 )        

    {

    beep();

        sleep();

      }



 }

}

interrupt[PORT2_VECTOR] void P2_ISR(void)

{

//     Exit LPM4, disable P2.0 interrupt      

P2IE &= ~BIT0;        //P2.0 interrupt disabled

P2IFG &= ~BIT0;        //P2.0 IFG cleared



interrupt_flag=1;



*sptr &= ~(SCG1+SCG0+OSCOFF+CPUOFF);   // Clear LPM4 from the stacked status

register



beep();

}  



interrupt[WDT_VECTOR] void watchdog_timer(void)

{

times++;



}



程序getsptr.s43摘自安装目录下FET_examples的fet_9目录



    NAME getsptr

    PUBLIC getsptr

    EXTERN sptr ;Stack pointer variable declared in C file

    RSEG CODE

getsptr:

    mov SP,&sptr ;Copy the current stack pointer.

    ret

    END



标签:
来源: 作者: 时间:2001/9/10 0:00:00
相关阅读
推荐阅读
阅读排行
最近更新
商品推荐