fgm000
发表于 2024-7-31 09:31:02
已学习
baigezy
发表于 2024-8-1 08:52:34
float ADC_PIPE_READ(u8 p)
{
u16 dat=0;
float v=0;
dat =0xBD;
ADC_CONTR &= p;
ADC_POWER =1;
Delay1us();
ADC_START = 1;
while(!ADC_FLAG);
dat = (ADC_RES << 8)+ ADC_RESL;
printf("ADC_RES:%x\n",ADC_RES);
printf("ADC_RESL: %x\n",ADC_RESL);
ADC_FLAG = 0;
v=5/4096* (float)dat;
ADC_RES = 0;
ADC_RESL = 0;
return v;
}这段代码读取ADC数据。ADC_RESL数据始终位零。请问冲哥是那里写错了吗,USB串口打印结果如下:
接收←ADC_RES:fe
ADC_RESL: 0
电压:0.00
大叶子
发表于 2024-8-1 11:07:04
认真学习了pwm
baigezy
发表于 2024-8-1 11:14:26
baigezy 发表于 2024-8-1 08:52
float ADC_PIPE_READ(u8 p)
{
u16 dat=0;
找到原因了:
void ADC_Init( void )
{
P1M0 = 0x00; P1M1 = 0xff;
P0PU = 0x00;
P0PD = 0x00;
ADCTIM = 0X3F; //
ADCCFG = 0X37; //数据右对齐,时钟选择位SYSCLK/2/16最慢
ADC_POWER = 1;
}
//
float ADC_PIPE_READ(u8 p)
{
u16 adcval; //adc数值保存变量
float v=0;
ADC_RES =0;
ADC_RESL =0;
ADC_CONTR &= 0xf0;//清空通道
ADC_CONTR |= p;
// ADC_POWER = 1;
ADC_START = 1; //开启ADC转化
_nop_(); //空操作指令
_nop_();
while(!ADC_FLAG); //等待ADC转换结束
ADC_FLAG = 0;
printf("ADC_RES:->0x%X\r\n",ADC_RES);
printf("ADC_RESL:->0x%X\r\n",ADC_RESL);
adcval = (ADC_RES << 8)+ ADC_RESL; //计算adc的数值
printf("ADC_Data: %x\r\n",adcval);
v=(4.86/(float)4096)*(float)adcval;
printf("电压值:%.2f\r\n",v);
return v;
}
接收←ADC_RES:->0x6
ADC_RESL:->0x13
ADC_Data: 613
电压值:1.85
电压:1.85
fgm000
发表于 2024-8-2 08:28:17
打卡第2天
fgm000
发表于 2024-8-2 09:11:52
第九集学习
fgm000
发表于 2024-8-2 09:49:35
第十集学习
ysp5318
发表于 2024-8-2 15:18:26
今天学习了第4集,不要急,不怕错,勇往直前。
科学妞妞
发表于 2024-8-2 18:41:35
ysp5318 发表于 2024-8-2 15:18
今天学习了第4集,不要急,不怕错,勇往直前。
点了一盏灯,就入门了
ysp5318
发表于 2024-8-3 08:36:35
科学妞妞 发表于 2024-8-2 18:41
点了一盏灯,就入门了
谢谢{:handshake:}