📄 tempad590.c
字号:
#include "TempAD590.h"
/***************************************************************
* 函数原型: void ADC_init(void)
* 功 能: 配置A/D转换器,使能ADC
****************************************************************/
void ADCInit(void)
{
REF0CN = 0X03; //关闭内部温度传感器,使能片内偏置发生器和偏置输出缓冲器
AMX0SL = 0X00; //选择温度传感器为ADC多路开关的输出
ADC0CF = 0X58; //ADC转换时钟为SYSCLK/10,增溢为1
ADC0CN = 0X81; //使能ADC,数据左对齐
}
/***************************************************************
* 函数原型: long Get_temp()
* 功 能: 计算温度值,返回以十分之一摄氏度为单位的温度值
在此读ADC采样值,将其放入到16个采样值的缓冲区内,
求所有采样值的平均值,并将其转换为以十分之一
摄氏度为单位的温度值
****************************************************************/
long GetTemp()
{
int i;
long temperature = 0L; //以十分之一度表示的温度值
long temp[16]; //温度采样值的循环缓冲区
for(i = 0; i < 16; i++)
{
AD0BUSY = 1;
while(!AD0INT); //判断一次转换结束
AD0INT = 0; //清除ADC转换结束中断标志
temperature = (ADC0H << 8) | ADC0L; //装入16位ADC结果
temp[i] = temperature;
}
temperature = 0L;
for(i = 0; i < 16; i++)
temperature = temperature + temp[i];
temperature = temperature / 16; //总和除以64求得平均值
//Vin=2.0/100*temp
//code=Vin*(gain/Vref)*2的16次方
//gain=1,Vref=2.4
//联立上面两个方程得temp=code*120/(2的16次方)
temperature = temperature * 120;
temperature = temperature * 10; //显示结果以十分之一摄氏度表示
temperature = temperature >> 16; //除以2的16次方
return temperature;
}
/*
//Test
void main()
{
ADCInit();
while(1)
{
int re_temp,inte,frac;
re_temp = GetTemp();
inte = re_temp / 10;
frac = re_temp - (inte * 10);
}
}
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -