MSP430F149的AD采样问题!!!!

2019-03-24 09:57发布

    你们谁知道msp430F149用多通道采样时为什么两个通道的采集电压会互相影响呢?




void ADC12(void)

{

  P6SEL |=0X03;  //使能ADC通道

  ADC12CTL0=ADC12ON+SHT0_15+MSC+REFON + REF2_5V;//打开ADC,设置采样时间,多次转换

  ADC12CTL1=SHP+CONSEQ_3;//使用采样定时器;多通道转换

  ADC12MCTL0 |=SREF_1+INCH_0;//通道选择

  ADC12MCTL1 |=SREF_1+INCH_1+EOS; //以EOS结束此次转换

  ADC12IE=0X03;//使能ADC中断

  ADC12CTL0 |=ENC+ADC12SC;//使能转换;开始转换



  _EINT();

}



/*ADC中断服务函数,各个通道转换值的存储*/

#pragma vector=ADC_VECTOR

__interrupt void ADC12ISR(void)

{

    k++;

    if(k==100) {k=0;}

    caltmp[k]=ADC12MEM0;

    caltmpp[k]=ADC12MEM1;

}



void xian_shi(void)

{

    int i,j ;

    ulong AVR0,AVR1;

    ulong sum0=0,sum1=0;

    for(i=0;i<100;i=i+2)

      sum0 += caltmp[i];

    AVR0 = sum0/50;

    //sum0=0;

    Temp=(AVR0*25000)/4096;          //计算十进制的电压值

    ptr[0]=(int)Temp/10000;            

    ptr[1]=(int)Temp%10000/1000;

    ptr[3]=(int)Temp%1000/100;

    ptr[4]=(int)Temp%100/10;

    ptr[5]=(int)Temp%10/1;

    ptr[6]=11;

    ptr[2]=10;

    LCD_write_com(0x88);

    DisplayCgrom(0x88,"电压:   ");

    for(i=0;i<7;i++)

    {

      delay_ms(100);

      LCD_write_data(shuzi[ptr[i]]);

     }



    for(j=1;j<100;j=j+2)

      sum1 += caltmpp[j];

    AVR1 = sum1/50;

    Temp=(AVR1*25000.0)/4096.0;

    ptr[0]=(int)Temp/10000;            

    ptr[1]=(int)Temp%10000/1000;

    ptr[3]=(int)Temp%1000/100;

    ptr[4]=(int)Temp%100/10;

    ptr[5]=(int)Temp%10/1;

    ptr[6]=11;

    ptr[2]=10;

    LCD_write_com(0x98);

    DisplayCgrom(0x98,"电压:   ");

    for(j=0;j<7;j++)

    {

      delay_ms(10);

      LCD_write_data(shuzi[ptr[j]]);

     }

}

//***********************************************************************

//      主程序

//***********************************************************************

void main(void)

{

   WDT_Init();                 //看门狗设置

   Clock_Init();               //系统时钟设置

   Port_init();                //系统初始化,设置IO口属性

   delay_ms(100);              //延时100ms

   LCD_init();                 //液晶参数初始化设置

   LCD_clear();                //清屏

   ADC12();                    //ADC初始化

   delay_ms(100);

   DisplayCgrom(0X80,"傻人 有 傻福");

   DisplayCgrom(0x90,"神啊!救救我吧");

   while(1)

   {

     delay_ms(10);

     xian_shi();

   }



}



此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
8条回答
qiushenghua
2019-03-24 21:03
这么长的代码,让人看着眼晕,你还是简单描述一下你要干嘛吧,又是怎么实现的。
先将程序思路给一下,别人好帮你排查问题。
如果是遇到了故障,那么得先将故障现象描述清楚,别人才知道该怎么去排查。

一周热门 更多>

相关问题

    相关文章