萌萌的非洲人 2020-06-16 13:53 采纳率: 33.3%
浏览 171

LPC2124芯片使用a/d功能时ADCR寄存器应该如何设置

#include

#define CR 0x0D

void init_serial (void) { /* 初始化串行接口*/
PINSEL0 = 0x00050000; //设置RxD1和TxD1的使能
U1LCR = 0x83; //8位 1个停止位 无奇偶校验
U1DLL = 97; //9600波特率 15MHz
U1LCR = 0x03; //DLAB = 0;
}

int putchar (int ch) { /* 将字符写入串行端口 */
if(ch == '\n'){
while(!(U1LSR & 0x20)){
U1THR = CR; //输出cr
}
}

while(!(U1LSR & 0x20));

return (U1THR =ch);

}

void puthex (int hex) { //写一个16进制的数值量写给串口

if(hex > 9){
putchar('A' + (hex-10));
}else{
putchar('0' + hex);
}
}

void putstr (char *p) { //利用串口写出一个字符串

while(*p){
putchar(*p++);
}
}

void adc(void) {

unsigned int val;
unsigned int i;

ADCR = 0x012eff01;//开始ad转换
do{
val = ADDR;//读取ad数据的寄存区
}while((val & 0x80000000)==0);//等待ad转换结束

ADCR &=~0x01000000; //停止ad转换
val = (val >> 6) & 0x3FF; //提取的AIN0的值

//利用串口实现将获取的值输出
putstr("\nAIN0 result = 0x");
puthex((val >> 8) & 0x0F);//写第一位的16进制数值
puthex((val >> 16) & 0x1F);//写第二位的16进制数值
puthex((val >> 24) & 0x2F);//写第三位的16进制数值

//调整延时值 可以用我们之前写的delay函数替换
val = (val >> 2) << 12;
for(i = 0; i < val; i++);//延时

}

int main (void) {
ADCR = 0x012eff 01;
init_serial();//串口初始化

while(1){
adc();//开启ad的转换
}

}

图片说明

我是个初学者,芯片的相关设置还不是很清楚,想问一下这段代码中有什么问题

  • 写回答

1条回答 默认 最新

  • zqbnqsdsmd 2020-08-24 16:43
    关注
    评论

报告相同问题?

悬赏问题

  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记