代码之家  ›  专栏  ›  技术社区  ›  Nazif Jaafar

如何从一个变量中提取更多值

pic c
  •  -2
  • Nazif Jaafar  · 技术社区  · 9 年前

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

    请参阅随附的图像文件。

    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       ;
               }
    

    这里是我的精神代码:

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

    谢谢

    当做 纳齐夫

    1 回复  |  直到 9 年前
        1
  •  0
  •   Dmitri    9 年前

    如果我正确理解这一点,你基本上有:

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

    …您希望对四个通道中的每一个进行采样,然后尝试打印所有四个结果:

    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 一次只能保存一个值。每次通过循环时,赋值都会替换旧的 后果 值与新值之间的关系--它不会将第二个、第三个等值添加到 后果 而是改变了一个值 后果 持有。因此,您需要有四个单独的变量(例如数组的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);