2015-08-26 53 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); 
相關問題