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

📄 tempin.c

📁 使用c8051f020的测温程序 一个内部温度的 一个外部的用AD590
💻 C
字号:
#include "TempIn.h"

/***************************************************************
* 函数原型: void ADC_init(void)
* 功    能: 配置A/D转换器,使能ADC
****************************************************************/
void ADCInInit(void)
{
	REF0CN = 0X07;	//使能温度传感器片内偏置发生器和偏置输出缓冲器
	AMX0SL = 0X0F;	//选择温度传感器为ADC多路开关的输出
	ADC0CF = 0X59;	//ADC转换时钟为SYSCLK/10,增溢为2
	ADC0CN = 0X81;	//使能ADC,数据左对齐
}

/***************************************************************
* 函数原型: float Get_temp()
* 功    能: 计算温度值,返回以百分之一摄氏度为单位的温度值
			在此读ADC采样值,将其放入到16个采样值的缓冲区内,
			求所有采样值的平均值,并将其转换为以十分之一
			摄氏度为单位的温度值
****************************************************************/
long GetInTemp()
{
	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;	//总和除以16求得平均值
/*
	temperature = temperature - 0x80a4;	//将偏差校正到0度0V
	temperature = temperature * 0x01e0;	//0.0025V/度
	temperature = temperature * 10;	//显示结果以十分之一摄氏度表示
	temperature = temperature >> 16;	//除以2的16次方
*/
	temperature = temperature - 41857;
    temperature = (temperature * 10L) / 154;
    	
	return temperature;
}

/*
//Test
main()
{	
	int tt,inte,frac;
	WDTCN=0xde;
	WDTCN=0xad;
	ADCInInit();
	while(1)
	{
		tt = GetInTemp();
		inte = tt / 10;
		frac = tt - (inte * 10);
	}	
}
*/

⌨️ 快捷键说明

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