前一段时间一直在用TI公司的MSP430系列的单片机,总结了点430常用的程序框架。
a.循环低功耗、中断服务程序唤醒
void main()
{
关闭开门狗;
初始化时钟;
初始化端口;
初始化屏幕;
其他外围必要的初始化;
开中断;
while(1)
{
进入低功耗模式;
执行某函数;
}
}
中断函数1
{
退出低功耗;
中断服务程序;
}
例如:

1 #pragma vector=ADC12_VECTOR 2 __interrupt void ADC12ISR (void) //AD转换中断服务程序 3 { 4 static unsigned char index = 0; 5 LPM3_EXIT; 6 switch(__even_in_range(ADC12IV,34)) 7 { 8 case 0: break; // Vector 0: No interrupt 9 case 2: break; // Vector 2: ADC overflow 10 case 4: break; // Vector 4: ADC timing overflow 11 case 6: // Vector 6: ADC12IFG0 12 if(index < 8) 13 { 14 results[index] = (ADC12MEM0*2.048/4096); 15 index++; 16 } 17 if(8==index) { index=0; } 18 S_judge=1; 19 break; 20 default: break; 21 } 22 } 23 24 void main() 25 26 { 27 28 WDTCTL = WDTPW + WDTHOLD; 29 Init_CLK() ; 30 LCD_Init() ; 31 Clear_LCD(Color_BK); 32 Init_Port() ; 33 Init_RTC(); 34 35 _EINT(); //开全局中断 36 37 Init_ADC(); 38 ADC12CTL0 |= ADC12SC; //开始AD转换 39 while(1) 40 { 41 LPM3; 42 Show_Clock(); 43 if(S_judge==1) 44 { 45 for(int n=0;n<Num_of_Results;n++) 46 { 47 fsum+=fresults[n]; 48 } 49 m=fsum/Num_of_Results; 50 sprintf(str,"%02.1f",m); 51 PutStringEN24(104,260,str); 52 fsum=0; 53 S_judge=0; 54 ADC12CTL0 |= ADC12SC; 55 56 } 57 }
b.低功耗、中断服务程序
该种结构比较简单,与第一种结构的差别在于主程序没有循环执行某函数。
void main()
{
关闭开门狗;
初始化时钟;
初始化端口;
初始化屏幕;
其他外围必要的初始化;
开全局中断;
进入低功耗;
}
中断服务程序1
{
退出低功耗;
中断服务程序;
}
c.开机设定、低功耗、中断服务程序
void main()
{
关闭开门狗;
初始化时钟;
初始化端口;
初始化屏幕、键盘;
初始化其他外围;
开全局中断;
键盘设定数据,开机初始化;
键入低功耗;
}
中断服务程序1
{
退出低功耗;
中断服务程序;
}
比如在第一种模式里加入开机设定的部分。
d.菜单按键方式
void main()
{
关闭开门狗;
初始化时钟;
初始化端口;
初始化屏幕、键盘;
初始化其他外围;
开全局中断;
while(1)
{
扫描按键;
switch(键值)
{
case...
}
更改显示;
}
}