>
首页 » 业界动态 » 基于MSP430F1121的开发经验总结

基于MSP430F1121的开发经验总结

作者:  时间:2007-04-12 16:20  来源:www.edires.net

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

想参与讨论请去:

http://www.edires.net/bbs/board.aspx?boardid=4


相关推荐

基于MSP430和Zigbee的无线抄表终端设计

MSP430  ZigBee  终端  2011-04-02

MSP430单片机在电源控制中的应用

MSP430  单片机  2011-02-18

基于MSP430单片机的十二导联同步心电图机的设计

MSP430  心电图机  2011-01-20

ARM处理器与嵌入式系统

嵌入式系统  MSP430  ARM  2010-12-01

基于MSP430单片机ARINC429总线通讯的硬件设计

基于TinyOS的嵌入式无线传感器网络设计

无线  传感器  MSP430  2010-05-21
在线研讨会
焦点