This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

ADC128S022数据采集问题【急】

Other Parts Discussed in Thread: ADC128S022

整个系统的连接关系图如下所示:

(MG2455/51单片机-12MHz晶振)  <--(模拟SPI)-->   (ADC128S022)

问题:

(1) 当使用第8路数据的时候,数据能正常读出;

(2) 当使用第第7路数据的时候,数据能正常读出;

(3) 当配置为其他路数据的时候,数据不能正常读出;特别是当设置为0x00时,应读取第一路数据,但从读取的数据来看,没有读取到任何数据;

 

模拟程序如下:

 

void Reading_ADC_Data(unsigned char serial_number, unsigned short *adc_data)

 {

//function's relative variable define  

unsigned char lvuc_adc_input  = 0x00;  

unsigned char lvuc_adc_cnt  = 0x00;  

unsigned short lvus_adc_data  = 0x0000;           

unsigned char lvuc_adc_numbytes = 0x00;

 //Initial the function's relative variable according to ADC's datasheet

 lvuc_adc_numbytes = 16;  

lvus_adc_data  = 0;  

ADC_CSN    = 1;  

ADC_SCK    = 1;  

ADCDelay(2);  

ADC_CSN    = 0;    

//The main processing for the processing of Reading ADC

//step 1: according to the input's serial number and confirm the adc's input  

switch(serial_number)  

{   

case 0:    lvuc_adc_input = ADC_INPUT0;    break;  

 case 1:    lvuc_adc_input = ADC_INPUT1;    break;   

case 2:    lvuc_adc_input = ADC_INPUT2;    break;   

case 3:    lvuc_adc_input = ADC_INPUT3;    break;   

case 4:    lvuc_adc_input = ADC_INPUT4;    break;   

case 5:    lvuc_adc_input = ADC_INPUT5;    break;   

case 6:    lvuc_adc_input = ADC_INPUT6;    break;   

case 7:    lvuc_adc_input = ADC_INPUT7;    break;   default:    break;  }

#if 1 //debug the AD with all bit setting '1'  

lvuc_adc_input = 0xe1;

#endif  

//Step2: sending the controller register and reading the convert data  

for(lvuc_adc_cnt = 0; lvuc_adc_cnt < lvuc_adc_numbytes; lvuc_adc_cnt++)  

{   

//Step 2A: drop-down the SclK signal to low period   

ADCDelay(4);   

ADC_SCK  = 0;     

 //Step 2a: sending the ADC's input address into the ADC registers  

 if(lvuc_adc_cnt < 5)   {    

//setting the SPI output interference signal   

 if(lvuc_adc_input&0x80)    {     ADC_DOU = 1;    }    else    {     ADC_DOU = 0;    }

   //left moving the sending byte    

lvuc_adc_input <<= 1;   }   

else   {    ADC_DOU = 0;   }

  //Step 2B: reading the data from the ADC  

 ADCDelay(5);   ADC_SCK = 1;   ADCDelay(1);

  //recording the data reading from ADC   

if(lvuc_adc_cnt >= 4 )   

{    //recording the history data    

lvus_adc_data <<= 1;    //setting the SPI output interference signal    

if(ADC_DIN)    {     lvus_adc_data |= 0x0001;    }    else    {     lvus_adc_data &= 0xfffe;    }   }   else   {    ;   }     }

 //Step 4: letting the ADC going to deep-sleeping modeling  ADC_CSN    = 1;  ADC_SCK    = 1;

 //getting the ADC values  *adc_data   = lvus_adc_data;    

return; }