这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界» 论坛首页» 嵌入式开发» MCU» 关于silabs公司的C8051F020芯片的ADC数据采集问题

共4条 1/1 1 跳转至

关于silabs公司的C8051F020芯片的ADC数据采集问题

工程师
2020-11-20 20:43:05 打赏

PT100通过op07c芯片接到C8051F020芯片,用网上找的例程改的测到的温度室温只有8度,而且显示25以上就又称0了,大神们帮我看看是程序哪里不对? 万分感谢!!


程序如下

#include
#include

#define uchar unsigned char
#define uint unsigned int


sfr16 ADC0= 0xbe; // ADC0 data
sfr16 ADC0GT = 0xc4; // ADC0 greater than window
sfr16 ADC0LT = 0xc6; // ADC0 less than window
sfr16 DAC0= 0xd2; // DAC0 data
sfr16 DAC1= 0xd5; // DAC1 data


//#define SYSCLK 22118400 // SYSCLK frequency in Hz
//#define SAMPLE_RATE 50000 // Sample frequency in Hz
//#define AMX0SL_AIN 0 // 0=AIN0....7=AIN7,8=TEMP





uint ADCdata;
bit ADCflag;
uchar volarray[3]; //读到的数值缓存
//-----------------------------------------------------------------------------

//-----------------------------------------------------------------------------
// ADC0配置,ADC0BUSY为转换启动源, 并在转换完成时产生中断
//-----------------------------------------------------------------------------
void ADC0_Init (void)
{
AMX0CF = 0x60; // AMUX Configuration Register
AMX0SL = 0; // 第0个通道
ADC0CF = (22118400/50000)<< 3; // ADC conversion clock = .5MHz
ADC0CN = 0x80; // ADC Control Register
REF0CN = 0x03; // 启用内部基准源
EIE2 |= 0x02; // 启用 ADC 中断
}

//-----------------------------------------------------------------------------
// 显示子程序
//-----------------------------------------------------------------------------
void ADZH()
{

float Voltage;
int Vol;
uint temp;
if (ADCflag)
{
ADCflag=0;
Voltage=(ADCdata*2.4)/4096;
Vol=Voltage*100;
volarray[0]=Vol/100; //数码管第一位
temp=Vol%100;
volarray[1]=temp/10; //数码管第二位
volarray[2]=temp%10; //数码管第三位
AD0BUSY=1;

}

}


//-----------------------------------------------------------------------------
void ADCSH ()
{

ADC0_Init(); // init ADC
AD0BUSY=1;

}


//-----------------------------------------------------------------------------
// ADC0采样中断
//-----------------------------------------------------------------------------
void ADC0_ISR (void) interrupt 15
{
AD0INT = 0; // 清 ADC 中断标志位
ADCdata= ADC0; // ADC采样数据
ADCflag=1;

}





关键词: silabs C8051F020 数据采集 ADC

工程师
2020-11-20 20:57:09 打赏
2楼
Voltage=(ADCdata*2.4)/4096;
你的这个算法,c8051f单片机AD是多少位的AD啊?12位的AD就对了,2.4是你采样的AD最高电压吗?如果对,这条语句就没有问题了~



工程师
2020-11-20 21:06:42 打赏
3楼

跑一下官方例子最简单!


工程师
2020-11-20 21:24:29 打赏
4楼

感谢分享


共4条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册]