访问电脑版页面

导航:老古开发网手机版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

想参与讨论请去:

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


来源:www.edires.net   作者:  2007/4/12 0:00:00
栏目: [ MSP430单片机经验总结]

相关阅读

总结下开发调试MSP430系列的一些另类问题

STC单片机EEPROM掉电瞬间的数据保存处理方法

MSP430单片机函数延时的问题分析

如何提高MSP430单片机的操作效率

MSP430G2333下位机乘法运算需要注意的一个问题

分享MSP430用TB捕获脉宽问题与解决心得

TIMSP430微控制器软件编程经验和应用技巧

基于MSP430F1611中AD采样不准确与分压电阻问题的详细解答

msp430f147死机

提高MSP430G系列单片机的Flash擦写寿命的方法

MSP430G2553捕获程序案例与经验分享

基于MSP430F1121的开发经验总结