//-----------------------------------------------------------------------------
// 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
//-----------------------------------------------------------------------------
ADC 配置
原创
©著作权归作者所有:来自51CTO博客作者wx5fc8832a61484的原创作品,请联系作者获取转载授权,否则将追究法律责任
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
PSoc™62开发板之ADC读取电压
ADC读取可调电位器电压值
Infineon RT-Thread PSoc™62 ADC OLED -
AntSword配置
此文描述AntSword工具安装操作。
初始化 加载器 管理工具 AntSword -
STMCube UART与ADC配置
DMA的中断服务函数可以通过以下方式寻找可以看到,其调用了HAL_DMA_IRQHandler函数这里的XferCpltCallback
STM32Cube #include ide 重定向 -
STM32之ADC配置,ADC_Mode模式理解
对于STM32,在使用ADC的时候需要配置几...
数据 数组 3c 左对齐 数据转换