MSP430單片機經常使用程序框架

a.循環低功耗、中斷服務程序喚醒


void main() 函數

{ it

  關閉開門狗; 循環

  初始化時鐘; 程序

  初始化端口; im

  初始化屏幕; 數據

  其餘外圍必要的初始化; static

  開中斷; 端口

  while(1) di

  { 鍵盤

    進入低功耗模式;

    執行某函數;

  }

}

 

中斷函數1

{

  退出低功耗;

  中斷服務程序;

}

 

例如:

View Code 
 #pragma vector=ADC12_VECTOR
 __interrupt void ADC12ISR (void)  //AD轉換中斷服務程序
 {
   static unsigned char index = 0;
   LPM3_EXIT;
   switch(__even_in_range(ADC12IV,34))
   {
   case  0: break;                           // Vector  0:  No interrupt
   case  2: break;                           // Vector  2:  ADC overflow
   case  4: break;                           // Vector  4:  ADC timing overflow
   case  6:                                  // Vector  6:  ADC12IFG0
     if(index < 8)
     {
       results[index] = (ADC12MEM0*2.048/4096);
       index++;
     }
     if(8==index) { index=0; }
     S_judge=1;
     break;
   default: break;
   }
 }
 
 void main()
 
 {
 
   WDTCTL = WDTPW + WDTHOLD;
   Init_CLK()  ;
   LCD_Init()  ;
   Clear_LCD(Color_BK);
   Init_Port() ;
   Init_RTC();
 
   _EINT();  //開全局中斷
 
   Init_ADC();
   ADC12CTL0 |= ADC12SC;  //開始AD轉換
   while(1)
   {
        LPM3;
        Show_Clock();
     if(S_judge==1)
     {
         for(int n=0;n<Num_of_Results;n++)
         {
           fsum+=fresults[n];
       }
        m=fsum/Num_of_Results;
         sprintf(str,"%02.1f",m);
         PutStringEN24(104,260,str);
         fsum=0;
         S_judge=0;
         ADC12CTL0 |= ADC12SC;
 
  }
 }

 

b.低功耗、中斷服務程序

  該種結構比較簡單,與第一種結構的差異在於主程序沒有循環執行某函數。

void main()

{

  關閉開門狗;

  初始化時鐘;

  初始化端口;

  初始化屏幕;

  其餘外圍必要的初始化;

  開全局中斷;

  進入低功耗;

}

中斷服務程序1

{

  退出低功耗;

  中斷服務程序;

}

c.開機設定、低功耗、中斷服務程序

void main()

{

  關閉開門狗;

  初始化時鐘;

  初始化端口;

  初始化屏幕、鍵盤;

  初始化其餘外圍;

  開全局中斷;

  鍵盤設定數據,開機初始化;

  鍵入低功耗;

}


中斷服務程序1

{

  退出低功耗;

  中斷服務程序;

}

好比在第一種模式里加入開機設定的部分。

d.菜單按鍵方式

void main()

{

  關閉開門狗;

  初始化時鐘;

  初始化端口;

  初始化屏幕、鍵盤;

  初始化其餘外圍;

  開全局中斷;

  while(1)

  {

    掃描按鍵;

    switch(鍵值)

    {

      case...

    }

    更改顯示;

  }

} 

相關文章
相關標籤/搜索