//-----------------------------------------------------------------------------
 // ADC0.c
 //-----------------------------------------------------------------------------
 // Includes
 //-----------------------------------------------------------------------------
 #include <C8051F340.h>                 // SFR declarations
 #include "public.h"
 //-----------------------------------------------------------------------------
 // 16-bit SFR Definitions for 'F34x
 //-----------------------------------------------------------------------------
 sfr16 ADC0 = 0xBD;                      // 10-bit ADC0 result
 //-----------------------------------------------------------------------------
 // Global Variables
 // 模拟输入引脚配置:
 //
 //    AMX0P      Port Pin
 //    0x02         P2.2
 //    0x03         P2.3
 //    0x1E         温度传感器
 //-----------------------------------------------------------------------------
 // Temperature Sensor Calibration PARAMETERS
 //-----------------------------------------------------------------------------
 #define AMB_TEMP           22         // Ambient Calibration Temperature 
                                        // (degC)此校准值取决于运行程序时的环境温度
 #define TEMP_SENSOR_GAIN   2860        // Temp Sensor Gain in (uV / degC)
 #define VREF           2470   // 3300        // ADC 参考电压 (mV)
 #define TEMP_OFFSET        0          // offset
 //-----------------------------------------------------------------------------
 // ADC0_Init
 //-----------------------------------------------------------------------------
 //
 // Return Value : None
 // Parameters   : None
 //
 //-----------------------------------------------------------------------------
 void ADC0_Init (void)
 {
    
 ADC0CF  = 0x20; //0x80 转换时钟为SYSCLK/17. 3M
   sysclk/5
ADC0LTH = 0xFF; //ADC上限数据高位
ADC0LTL = 0xFF; //ADC上限数据高位
ADC0GTH = 0x00; //ADC下限数据高位
ADC0GTL = 0x00; //ADC下限数据低位
 
ADC0CN  = 0xC0; 
REF0CN  = 0x07;
 //0x0E 电压基准控制寄存器;2.457内部基准作为电压基准,内部偏压发生器工作,温度传感器工作使能
AMX0N   = 0xFF; //GND 单端方式
 }
 uint ADconvert(uchar iChannels)
 {
    AMX0P = iChannels; //配置输入通道   
    AD0BUSY=1;
    while(!AD0INT);
    AD0INT=0;  
    return ADC0;
 } 
 
 /
 uint DET_DU_TR()
 //P2^2;
 
 {  uint ADC_code,i,tmp;
    ADC_code=ADconvert(0x02);
    ADC_code=0;
       
    for(i=0;i<10;i++)
 //配置P2^2;为单端输入
    {   tmp=ADconvert(0x02);
  ADC_code=ADC_code+tmp;
 
    }
    ADC_code=ADC_code/10;    
    return ADC_code;  
 }
 uint Temprature_DET()
 //温度检测
 {
 
AMX0P = 0x1e;   //配置为单端输入
AD0BUSY=1;
while(!AD0INT);
AD0INT=0;  
return ADC0;
 }
 uint get_temp_int(void)                       //返回数字采样值
 {
    uint ADC_code,i,tmp;
    
    ADC_code = Temprature_DET();
    ADC_code=0;
                 //第一次采样丢掉
 
    for(i=0;i<10;i++)
    {
    
   tmp=Temprature_DET();
  ADC_code=ADC_code+tmp;
 
    }
    ADC_code=ADC_code/10;    
    return ADC_code;
 }
 int get_temp(void)
 {
     long result=0L;
    //result=230;                                 //仅做测试用
       
    result=get_temp_int();
    if(result>241)
    {
    
 result = (result * (long) VREF / 1024 -776)* 1000/ TEMP_SENSOR_GAIN ;
}
else                                        //负温
{
result = 65536-(776-result * (long) VREF / 1024 )* 1000/ TEMP_SENSOR_GAIN ;
}
    
    return (int) result;
 }
 //*/
 //-----------------------------------------------------------------------------
 // End Of File
 //-----------------------------------------------------------------------------
                










