进入AD之后无法跳出AD服务中断函数,请教各位大神指教!谢谢,以下是代码:
/*************************************************************************
** 函数名称:main
** 工作环境: IAR 5.22
** 相关文件:
** 修改日志:
功能: AD转换多通道多次转换
*************************************************************************/
#define Num_of_Results 32
static unsigned int resultss[36]; // 转换值存取变量
volatile long temp;
volatile long IntDegC;
void main(void)
{
unsigned int i;
WDTCTL = WDTPW+WDTHOLD; // 关闭看门狗
UCSCTL4 = SELM__DCOCLK + SELS__DCOCLK; // 选择时钟源
P6DIR &= ~(BIT2 + BIT3 + BIT4); // 选择6.2,6.3,6.4口为输入端口
P6SEL |= (BIT2 + BIT3 + BIT4); // P6口第二功能
ADC12CTL2 = ADC12RES_2 + ADC12REFOUT; // AD基本配置
ADC12CTL0 = ADC12ON + ADC12MSC + ADC12SHT03 + ADC12REFON + ADC12REF2_5V;
//ADC12MCTL10 |= ADC12SREF_0 + ADC12INCH_10; // 采样温度
ADC12MCTL2 |= ADC12SREF_0 + ADC12INCH_2; // 采样6.2端口数据输入
ADC12MCTL4 |= ADC12SREF_0 + ADC12INCH_4 + ADC12EOS; // 采样6.4端口数据输入
ADC12CTL1 = ADC12SHP + ADC12CONSEQ_3; // 选择转换模式
for (i=0;i<0xFFFF;i++); // 等待基准电压建立
UCSCTL8 |= MODOSCREQEN;
ADC12IE |= 0X08; // 使能通道4中断
ADC12CTL0 |= ADC12ENC; // 开启转换
_EINT(); // 打开总中断
ADC12CTL0 |= ADC12SC; // 转换开始
// while (!(ADC12IFG & BIT0));
//display1(sj);
//LPM3; // 进入低功耗3
}
/*************************************************************************
** 函数名称:AD转换中断函数
** 工作环境: IAR 5.22
** 功能: 保存转换值
** 相关文件:
** 修改日志:
*************************************************************************/
#pragma vector = ADC12_VECTOR
__interrupt void ADC12ISR(void)
{
static uint index = 0;
resultss[index++] = ADC12MEM2; // Move results
if(index == Num_of_Results)
uchar i;
unsigned long sum = 0;
index = 0;
for(i = 0; i < Num_of_Results; i++)
{
sum += resultss[i];
}
sum >>= 5;
Trans_val(sum);
delay1(200);
//ADC12CTL0 &= ~ADC12ENC;
//ADC12CTL0 &= ~ADC12ON;
//_DINT();
}
}