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...
}
更改顯示;
}
}