MSP430单片机常用程序框架
扫描二维码
随时随地手机看文章
前一段时间一直在用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 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() { 关闭开门狗; 初始化时钟; 初始化端口; 初始化屏幕、键盘; 初始化其他外围; 开全局中断; 键盘设定数据,开机初始化; 键入低功耗; } { 退出低功耗; 中断服务程序; } 比如在第一种模式里加入开机设定的部分。 d.菜单按键方式 void main() { 关闭开门狗; 初始化时钟; 初始化端口; 初始化屏幕、键盘; 初始化其他外围; 开全局中断; while(1) { 扫描按键; switch(键值) { case... } 更改显示; } }
中断服务程序1