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

📄 tempad590.c

📁 使用c8051f020的测温程序 一个内部温度的 一个外部的用AD590
💻 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 + -