void init_adc12(void)
{
P6SEL |= (BIT0+BIT1+BIT2+BIT3+BIT4+BIT5+BIT6); //P6 功能选择为:ADC模拟信号输入
ADC12CTL0 &= ~ENC; // 在进行设置时首先复位ADC的转换使能
ADC12CTL0 =(SHT0_8 + MSC + REF2_5V + REFON + ADC12ON);
//采样保持时间
//内部参考电压 2.5V
//打开内部参考电压
//打开 ADC12,可以进行转换
//ADC12CTL1=0;
ADC12CTL1 =(CSTARTADD_0 + SHS_1 + SHP + ADC12DIV_0 + ADC12SSEL_3 + CONSEQ_3);//CONSEQ_1
ADC12MCTL0=(SREF_1 + INCH_0);
ADC12MCTL1=(SREF_1 + INCH_1);
ADC12MCTL2=(SREF_1 + INCH_2);
ADC12MCTL3=(SREF_1 + INCH_3);
ADC12MCTL4=(SREF_1 + INCH_4 );
ADC12MCTL5=(SREF_1 + INCH_5);
ADC12MCTL6=(SREF_1 + INCH_6+ EOS);
delay_ms(20); // 延时等待参考电压启动
//关闭各个通道的转换中断
ADC12IE = 0x00;//0x7f; // 允许最后一个通道的中断
ADC12CTL0 |= ENC + ADC12SC;//使能转换
_EINT();
}
void init_timerA(void)
{
TACTL &= ~ID1;
TACTL &= ~ID0; //ID_0: 1分频
//当主时钟为8M时,用SMCLK定时(准确); 否则用 ACLK定时(有误差)
TACTL |= TASSEL1;
TACTL &= ~TASSEL0; //输入时钟源选择 SMCLK 8M
TACCR0 = 7999; //定时为 1 ms
TACTL |= TACLR; //计数器内容清零
TACTL &= ~MC1; //工作模式:加计数(MC1=0; MC0=1)
TACTL |= MC0; //开始计数
TACTL |= TAIE; //开定时器 A 的定时溢出中断
}
// 函数名称:Timer_A(void)
// 函数描述:定时器 A 定时溢出中断函数 中断一次为 x 秒
// 参 数:无
// 返 回 值:无
#pragma vector = TIMERA1_VECTOR
__interrupt void Timer_A(void)
{
if(TAIV==10)
{
Counter_mS++;
// 关闭转换
ADC12CTL0 &= ~ENC;
//温度采集
Temper_ADC12MEMA[num]=ADC12MEM3;
Temper_ADC12MEMB[num]=ADC12MEM4;
Temper_ADC12MEMC[num]=ADC12MEM5;
num++;
if(num==10)
{
num=0;
Temper_nADC_Flage=1;
}
// 启动AD转换
ADC12CTL0 |= ENC + ADC12SC;
}
//LPM3_EXIT; //退出低功耗模式3
}
以上定时器A的中断李为什么读不到AD值呢!
请各位大虾指教!!!!! |