| 
 
| 这几天一直再搞ADC12 和 DAC0832,昨晚测试的时候发现个挺严重的问题,ADC12双通道采样相互影响 我采样的是定时钟中断 双通道 多次采样,程序如下,
 我用的是买的开发板,开始我以为是采样的两个通道相互影响可能是硬件的问题,于是我使用通道0 和 通道3 采样,结果
 采样还是会受影响,数据如下,当通道0采样值由3750变到0时,另一路采样输出电压从2.32变到2.10V(我两路采样结果用数码管显示,一路经过ADC转化成电压,一路直接显示结果寄存器值)
 
 大家有没有类似的情况,望指教!!!
 
 
 //*************************************************************************
 //        ADC初始化程序,用于配置ADC相关寄存器
 //*************************************************************************
 void ADC_Init()
 {
 P6SEL|=0x03;                                    //选择ADC通道,设置对应IO口的功能模式
 ADC12CTL0|= ADC12ON + MSC + SHT0_2 + REF2_5V + REFON; //打开ADC;多路转换打开适合序列或重复;
 //采样保持时间 ,16个CLK;ADC电源控制开,内部基准2.5V
 ADC12CTL1|= SHP + CONSEQ_3 + ADC12SSEL1 + ADC12SSEL0; //采样保持脉冲模式选择;多通道重复采样;SMCLK做时钟源;
 ADC12MCTL0= SREF0 + INCH_0;                     //参考电压源控制位及通道选择
 
 ADC12MCTL0=INCH_0;
 ADC12MCTL1=INCH_1+EOS;
 ADC12CTL0|= ENC;                                //使能转换器
 }
 
 //*************************************************************************
 //        ADC中断服务程序
 //*************************************************************************
 #pragma vector=TIMERA0_VECTOR
 __interrupt void Timer_A(void)
 {
 
 
 uchar j;
 uint result[10];
 
 uint result1[10];
 
 result[count]=ADC12MEM0;                //读取ADC转换值,存入暂存区
 
 result1[count]=ADC12MEM1;
 
 count++;
 
 ADC12CTL0 |= ADC12SC;
 _NOP() ;
 while(count>8)
 {
 count=0;
 for(j=0;j<8;j++)
 {
 TEMP+=result[j];                    //求和,10次转换的结果相加
 TEMP1+=result1[j];
 }
 TEMP=TEMP>>3;                         //求平均值
 TEMP1=TEMP>>3;
 Data_do(TEMP);                        //处理ADC值,用于显示
 Data_do1(TEMP1);
 for(j=0;j<50;j++)
 {
 Display();                          //显示ADC的数据
 }
 
 
 }
 }
 
 
 void TIMERA_Init(void)                                   //UP模式计数,计数周期为CCR0+1
 {
 TACTL |= TASSEL1 + TACLR + ID0 + ID1 + MC_1 ;     //SMCLK做时钟源,8分频,增加计数模式,开中断 + TAIE
 TACCR0 = 999;                                         //CCR0=999,1ms中断一次
 CCTL0 = CCIE;
 }
 | 
 |