MSP430单片机常用程序框架

  前一段时间一直在用TI公司的MSP430系列的单片机,总结了点430常用的程序框架。

a.循环低功耗、中断服务程序唤醒

void main()

{

  关闭开门狗;

  初始化时钟;

  初始化端口;

  初始化屏幕;

  其他外围必要的初始化;

  开中断;

  while(1)

  {

    进入低功耗模式;

    执行某函数;

  }

}

 

中断函数1

{

  退出低功耗;

  中断服务程序;

}

 

例如:

View Code
 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...

    }

    更改显示;

  }

} 

你可能感兴趣的:(单片机)