基于MSP430系列单片机的常用程序编写总结

控制/MCU

1784人已加入

描述

前一段时间一直在用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()

{

关闭开门狗;

初始化时钟;

初始化端口;

初始化屏幕、键盘;

初始化其他外围;

开全局中断;

键盘设定数据,开机初始化;

键入低功耗;

}


中断服务程序1

{

退出低功耗;

中断服务程序;

}

比如在第一种模式里加入开机设定的部分。

d.菜单按键方式

void main()

{

关闭开门狗;

初始化时钟;

初始化端口;

初始化屏幕、键盘;

初始化其他外围;

开全局中断;

while(1)

{

扫描按键;

switch(键值)

{

case...

}

更改显示;

}

}

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分