【问题标题】:How to extract more value from one variable如何从一个变量中提取更多价值
【发布时间】:2015-08-26 05:54:49
【问题描述】:

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

请参考附件中的图片文件。

这里是代码:

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

这里是我的 sprint 代码:

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

谢谢

问候, 纳西夫

【问题讨论】:

  • 你是认真的吗:a = 4; a &lt; 5; a = a++?你可能想要这个:a = 4; a &lt; 5; a++,但这仍然值得怀疑,你的循环只会运行一次。
  • result是什么类型?
  • 注意:在循环中写入 a=a++ 将导致无限循环,因为 a++ 将增加 a 中的值,但仅在赋值之后,因此 a 将保持不变。相反,你应该写 (a = 4;a
  • @NazifJaafar 您的 sprintf 导致未定义的行为,您有 4 个 %d 格式说明符,但您只提供一个参数 (result)。
  • 您想单独打印result 的每个字节吗?如果是,uint32_t 可能是更好的选择,因为 int 只需要能够保持值 2^16 - 1。请告诉我们ADC1BUF0 是如何创建的。

标签: c pic


【解决方案1】:

如果我理解正确的话,你基本上有:

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 一次只能保存一个值。每次通过循环,赋值都会用新的值替换旧的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);

【讨论】:

    猜你喜欢
    • 2012-01-23
    • 1970-01-01
    • 2011-11-12
    • 1970-01-01
    • 2023-03-14
    • 2014-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多