前一段时间一直在用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...
}
更改显示;
}
}