⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 msp430f1121_inter_watchdog.txt

📁 MSP430F1121单片机应用, 中断的应用
💻 TXT
字号:
MSP430F1121单片机应用, 中断的应用,以及看门狗定时器的操作。
#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<k;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++;

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -