【发布时间】:2011-11-08 13:56:14
【问题描述】:
我目前在基于 32 位 ARM9 的微控制器内对 10 位 ADC 进行 C 编程。这个 10 位 ADC 将数字化模拟值保存在 名为“ADC_DATA_REG” 的 10 位寄存器中,该寄存器使用位 9-0 (LSB)。我必须读取该寄存器的值并将其与一个名为“CONST”的32 位常量 进行比较。我的尝试看起来像这样,但它不起作用。我在这里想念什么?我应该使用移位操作吗?这是我第一次处理这个问题,所以欢迎任何例子。
以下代码已针对评论和 anwsers 进行了编辑,但仍然无法正常工作。我还添加了一个 while 语句,用于在读取 ADC_DATA_REG 之前检查 ADC_INT_STATUS 标志是否被提升。提到的标志表示一个中断,一旦 ADC 完成转换并且数据准备好从 ADC_DATA_REG 读取,该中断就挂起。事实证明,即使将寄存器 ADC_DATA_REG 的值分配给它,数据仍然为 0,这就是我的 LED 始终亮着的原因。这也意味着我有一个中断,ADC_DATA_REG中应该有数据,但似乎没有......
#define CONST 0x1FF
unsigned int data = 0;
while (!(ADC_INT_STATUS_REG & ADC_INT_STATUS))
data = ADC_DATA_REG;
if ((data & 0x3FF)> CONST){
//code to turn off the LED
}
else{
//code to turn on the LED
}
【问题讨论】:
-
屏蔽值位:if ((data & 0x3ff) > CONST) {}
-
“不工作”到底如何?您是否收到编译错误、运行时错误或错误结果?
-
我确实编辑了上面的代码,并实现了你给我的所有建议,但我的数据始终保持为 0,即使我旋转电位器,我的 LED 也一直亮着。
-
看起来您缺少
;,因此在读取数据之前,while 会在标志上循环。