2015-08-26 85 views
-2

中的更多值,并存储了四个值。 如何提取该值以显示值(sprintf)?如何从我的“for”循环中的结果中抽取一个变量

请参阅随附的图像文件。

Extrac value in ADC1BUF0

下面的代码:

for(a = 4; a < 5; a = a++) 
      { 
       AD1CHS0bits.CH0SA = a ; //select which ANI connect to channel 0 
       AD1CHS0bits.CH0NA = 0 ; //vref as channel 0 -ve input 
       AD1CON1bits.ADON = 1 ; 
       AD1CON1bits.SAMP = 1 ; 
       __delay32(50)   ; 
       AD1CON1bits.SAMP = 0 ; //sampling bit to 0 
       while(!AD1CON1bits.DONE); 
       result = ADC1BUF0  ; 
      } 

这里我sprinf代码:

  sprintf(lala,"test: %d, %d, %d, %d\r\n",result); 
      sendString(lala); 
      __delay32(20000); 

感谢

问候, 纳齐夫

+1

您对此是否认真:'a = 4;一个<5; a = a ++'?你可能想要这个:'a = 4;一个<5; a ++',但这仍然值得怀疑,你的循环只能运行一次。 –

+1

'result'是什么类型? – Downvoter

+0

注意:在循环中写入a = a ++将导致无限循环,因为a ++会将a中的值递增,但仅在赋值后才会使a保持不变。相反,你应该写(a = 4; a <5; a ++) – CIsForCookies

回答

0

如果我理解正确的这个,你主要有:

for(a = 4; a < 5; a = a++) 
{ 
    /* code to sample one channel and store 
    * the result in "result" */ 
} 

...你希望品尝每4个通道,然后尝试打印所有四个结果有:

sprintf(lala,"test: %d, %d, %d, %d\r\n",result); 
sendString(lala); 
__delay32(20000); 

第一,您的循环目前仅执行一次迭代(在校正a = a++a++之后),其中a等于4。你似乎它需要循环从0至3(对AN0-AN3):

for (a = 0; a < 4; a++) 

此外,result只能在一个时间有一个值。每次通过循环时,赋值都会替换旧的result值 - 它不会将第二个,第三个等值添加到result,而是它将更改一个值result。所以你需要有四个单独的变量(比如一个数组的4个元素),或者用循环中的每个值做你需要的,以便在读完下一个之前完成它。对于阵列,您可能有:

int results[4]; 

/* ... */ 

for(a = 0; a < 4; a++) 
{ 
    /* ... */ 
    results[a] = ADC1BUF0; 
} 

/* ... */ 

sprintf(lala,"test: %d, %d, %d, %d\r\n", 
     results[0],results[1],results[2],results[3]); 
sendString(lala); 
__delay32(20000); 
相关问题