高手们见笑了,这个程序是测10次AD转换的值,但是我在调试的时候发现10次测试完之后,Index的值会变成一个特别大的值比如1024, 所以我想问这个程序中断测完后,怎么退出呢?还有我想计算这10个数的平均值,这个应该放在程序的哪块,中断里面吗?
#include <msp430x14x.h>
typedef unsigned char uchar;
typedef unsigned int uint;
#define Num_of_Results 10
static uint results[Num_of_Results]; //保存ADC转换结果的数组
/************************主函数****************************/
void main(void)
{
WDTCTL = WDTPW+WDTHOLD; //关闭看门狗
/*下面六行程序关闭所有的IO口*/
P1DIR = 0XFF;P1OUT = 0XFF;
P2DIR = 0XFF;P2OUT = 0XFF;
P3DIR = 0XFF;P3OUT = 0XFF;
P4DIR = 0XFF;P4OUT = 0XFF;
P5DIR = 0XFF;P5OUT = 0XFF;
P6DIR = 0XFF;P6OUT = 0XFF;
P6DIR |= BIT0;P6OUT |= BIT0; //关闭电平转换
P6SEL |= 0x01; // 使能ADC通道
ADC12CTL0 = ADC12ON+SHT0_15+MSC+REF2_5V+REFON; //打开ADC,设置采样时间,内部参考电压2.5V
ADC12CTL1 = CSTARTADD_0+SHP+CONSEQ_2; //MEM0为起始地址+采样定时器+单通道多次采样
ADC12MCTL1|=INCH_0+SREF_1;
ADC12IE = 0x01; // 使能ADC中断
ADC12CTL0 |= ENC; // 使能转换
while(1)
{
ADC12CTL0 |= ADC12SC; // 开始转换
_EINT();
LPM0;
}
}
/*******************************************
函数名称:ADC12ISR
功 能:ADC中断服务函数,在这里用多次平均的
计算P6.0口的模拟电压数值
参 数:无
返回值 :无
********************************************/
#pragma vector=ADC_VECTOR
__interrupt void ADC12ISR (void)
{
static uint index = 0;
results[index++] = ADC12MEM0; // 转换结果存入results
}