问题描述
我的课程中有 LPC2148 微控制器接口。在那,对于基本的模数转换,我有这个程序。它按预期工作。为此,我使用的是 Keil uVision 教育版。
#include <lpc214x.h>
void delay_ms(unsigned int j);
int main() {
IO0DIR = 1 << 21; // config P0.21 as output
PINSEL1 = 1 << 24; // config P0.28 as AD0.1 ADC
LED_ON;
while(1) {
AD0CR = (1 << 1 | 1 << 21 | 1 << 24 | 6 << 8); // config and start AD control register
while((AD0GDR & 1ul << 31) == 0); // wait for completion
unsigned int i = (AD0GDR >> 6) & 0x3FF ; // read 10 bit digital value
if(i > 256)
IO0CLR = 1 << 21; // turn off led
else
IO0SET = 1 << 21; // turn on led
delay_ms(10); // delay - don't know why
}
}
void delay_ms(unsigned int ms) {
for(int i = 0; i < ms; i++) {
for(int x = 0; x < 10000; x++); // loop to generate 1 milisecond delay with CCLK = 60MHz
}
}
上面的程序现在正在生成所需的输出。软件延迟不准确,但现在不是问题。但是不知道在while循环里面调用delay有什么作用。
如果没有它,程序就不会产生所需的输出。 (逻辑分析仪中的线不会随着输入而改变。)我不确定为什么会发生这种情况。我试图获得上述程序集的输出,但我的 Keil 版本对此没有帮助。它需要许可版本。谁能给我解释一下。
PS:我不知道,这个问题是否更适合不同的 StackExchange 站点。如果是这样,请直接告诉我。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)