网站首页
IC库存
IC展台
电子资讯
技术资料
PDF文档
我的博客
IC72论坛
ic72 logo
搜索关键字: 所有资讯 行业动态 市场趋势 政策法规 新品发布 技术资讯 价格快报 展会资讯
  • 达普IC芯片交易网 > 新闻中心 > 经验交流 > 正文
  • RSS
  • 基于MSP430F1121的开发经验总结
    http://www.ic72.com 发布时间:2009/6/12 16:15:40

    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


    www.ic72.com 达普IC芯片交易网
  • 行业动态
  • 市场趋势
  • 政策法规
  • 新品发布
  • Baidu

    IC快速检索:abcdefghijklmnopqrstuvwxyz0123456789
    COPYRIGHT:(1998-2010) IC72 达普IC芯片交易网
    客户服务:service@IC72.com 库存上载:IC72@IC72.com
    (北京)联系方式: 在线QQ咨询:点击这里给我发消息 联系电话:010-82614113 传真:010-82614123
    京ICP备06008810号-21 京公网安备 11010802032910 号 企业资质