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

共4条 1/1 1 跳转至

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

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

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


程序如下

#include <stdio.h>
#include <INTRINS.H>

#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 跳转至

回复

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