⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 aad.#2

📁 这是c8051F005的AD转换程序
💻 #2
字号:
//************************************************************

//             AD采样程序

//

// (1)使用C8051F005芯片

// (2)外部晶振11.0592MHZ ,使用内部2.4V基准电压

// (2)单端输入方式,两通道输入ANIO、ANI1,向ADBUSY置1启动AD转换

// (3)对采样10次在求平均值以减小误差

// (4)经过处理与实际值相差0~3MV

//  注:测量参考电压和输入电压为同一表

//*************************************************************

#include <c8051f000.h>               

#include <stdio.h>

 
                

sfr16 ADC0     = 0xbe;                 

sfr16 ADC0GT   = 0xc4;                 

sfr16 ADC0LT   = 0xc6;                 

                            

#define SYSCLK       18432000            //系统时钟 频率   

#define SAMPLE_RATE  50000             

#define VREF         2.4                //参考电压值

  

void ADC0_Init (void);                      //AD转换初始化设置函数

void Timer3_Init (int counts);                        //定时3初始化设置函数

void ADC0_ISR (void);                      //AD转换中断函数

void delay (int t);                           //延时程序

void SYSCLK_Init (void);                    //系统时钟函数

void WDT_CLOSE(void);                    //关闭看门狗

 

int result;               //数据存储

float value;             //存储测量值

char  flag;             //标志

//***********************************************************

//关闭看们狗

//***********************************************************

void WDT_CLOSE(void)

{  EA=0;

   WDTCN = 0xde;                       

   WDTCN = 0xad;                     

   EA=1;

 }

//***********************************************************

//系统时钟设置

//晶振振荡方式,F>6.7mhz

//选用外部时钟

//允许时钟复位

//************************************************************

void SYSCLK_Init (void)

{  int i;

                              

   OSCXCN = 0x67;                     

   for (i=0; i < 256; i++)  ;           

   while (!(OSCXCN & 0x80)) ;         //等待外部准备      

   OSCICN = 0x88;                      

                                      

 }



//**********************************************************

//AD初始化设置

//AIN0 独立输入

//使用内部参考电压, PGA= 2,使用4系统时钟

//转换数据右对齐

//**********************************************************

void ADC0_Init (void)

{

   ADC0CN = 0x44;                   //右对齐           

   REF0CN = 0x03;                   //使用内部参考电压              

                                       

   AMX0SL = 0x00;                   //AIN0 独立输入

   AMX0CF = 0x00;    

           

   ADC0CF = 0x20;                   // 4系统时钟     PGA  1       



   EIE2  |= 0x02;                     // 中断开            

}

//**********************************************

//AD转换程序

//**********************************************

void ADC0_ISR (void) interrupt 15

{    

   TMR3CN &=0x20;                   //关定时器3  清除标准位

   ADCINT = 0x00;                       //清除中断标准位

   delay (10);                           //延时等待AD转换稳定

   

   result = ADC0;                       //数据转存

   

   TMR3CN |= 0x04;                    //定时器3开

   flag = 1;

  }

//***********************************************

//延时子程序

//***********************************************

void delay (int t)

{ int i,j;

     for (i=0;i<t;i++)

           for(j=0;j<10;j++) ;

}

//******************************************

//MAIN

//******************************************

void main (void)       

  { int i=0;

    float voltage=0;

    WDT_CLOSE();                       //关闭看门狗

    SYSCLK_Init ( );                      //系统时钟设置

    Timer3_Init (SYSCLK/SAMPLE_RATE);  //定时器3初始化设置   

    ADC0_Init ();                         //AD初始化 

    ADCEN = 1;                          //AD转换允许打开

    EA = 1;                          

    flag = 0;

    while (1)                                //循环

       {                        

         while (flag == 1)

                 { flag = 0;

                   value = VREF*((float)result/4096.0)/2; //单次测量值

             i++;

                      voltage+=value;          

                   }

               while(i==100)                //测量100次的值求平均值

                   { i=0;

                     voltage=(float)voltage/100;

                        value=0;

                    }

         }

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -