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

📄 ds18b20_driver.c

📁 这是利用凌阳单片机实现的多路温度测量
💻 C
字号:
//======================================================
// 文件名称:	ds18b20_driver.c
// 功能描述:	DS18B20应用层驱动程序
// 维护记录:	2006-10-10	v1.0
//======================================================

#include "spce061a.h"
#include "18b20.h"

//=====================================================================
//语法格式:	void DS18B20_WriteByte(unsigned int uiChannel,unsigned int Data)
//实现功能:	DS18B20字节写入子程序
//					无需修改,实际上是属于整合的程序,供其它的API调用
//入口参数:	uiChannel	要写入的通道
//				Data		要写入的数值,低八位有效
//返回值:		无
//=====================================================================
void DS18B20_WriteByte(unsigned int uiChannel,unsigned int Data)
{
	unsigned int i;
	for(i=0;i<8;i++)
	{
		if(Data&0x0001)
			F_18B20_Write_1(uiChannel);
		else
			F_18B20_Write_0(uiChannel);
		Data = Data>>1;        
	}
}
//=====================================================================
//语法格式:	unsigned int DS18B20_ReadByte(unsigned int uiChannel)
//实现功能:	DS18B20字节读出子程序
//					无需修改,实际上是属于整合的程序,供其它的API调用
//入口参数:	uiChannel	要写入的通道
//返回值: 		读出的字节数据,低八位有效
//=====================================================================
unsigned int DS18B20_ReadByte(unsigned int uiChannel)
{
	unsigned int i,Data=0;
	for(i=0;i<8;i++)
	{
		Data = Data>>1;
		Data = Data|F_18B20_Read_DQ(uiChannel);
	}
	return Data;       
}
//=====================================================================
//语法格式:	unsigned int DS18B20_Initial(unsigned int uiChannel)
//实现功能:	DS18B20初始化
//					包括对端口的初始化,以及对DS18B20进行一次复位(总线)
//入口参数:	uiChannel	要写入的通道	
//返回值:		初始化结果,返回0表示初始化失败
//=====================================================================
unsigned int DS18B20_Initial(unsigned int uiChannel)
{
	unsigned int uiTemp=0;
	F_18B20_SetSystemCLK();
	F_18B20_Initial_IO(uiChannel);
	uiTemp = F_18B20_Reset(uiChannel);
	F_18B20_RsuSystemCLK();
	return uiTemp;
}


//=====================================================================
//语法格式:	float DS18B20_ReadTemp(unsigned int uiChannel)
//实现功能:	启动一次DS18B20测温,并读取测温结果,以浮点数返回
//					在本函数中,启动测温后在程序里面作了等待,以待测DS18B20
//					完成本次测温转换如用户觉得不合适,可对本函数进行个性化的
//					修改,以适应自己的应用需求
//入口参数:	uiChannel	要写入的通道
//返回值:      温度值,浮点数  以摄氏度为单位
//=====================================================================
float DS18B20_ReadTemp(unsigned int uiChannel)
{
	int uiTemp=0;
	float fTemp=0.0;
	unsigned int Data[2];
	__asm("int off");
	F_18B20_SetSystemCLK();
	
	F_18B20_Reset(uiChannel);
	DS18B20_WriteByte(uiChannel,0xcc);		// 不进行ROM匹配
	DS18B20_WriteByte(uiChannel,0x44);		// 启动一次温度采样
	while(F_18B20_Read_DQ(uiChannel)==0)	// 等待转换结束
	{
		*P_Watchdog_Clear = 0x0001;
	}
	F_18B20_Reset(uiChannel);
	DS18B20_WriteByte(uiChannel,0xcc);       // 不进行ROM匹配
	DS18B20_WriteByte(uiChannel,0xbe);       // 读取ROM命令
	for(uiTemp=0;uiTemp<2;uiTemp++)
	{
		Data[uiTemp] = DS18B20_ReadByte(uiChannel);
	}
	F_18B20_Reset(uiChannel);
	
	uiTemp = (Data[1]<<8)|Data[0];			// 取得温度部分
	fTemp = (float)uiTemp;
	fTemp = fTemp/16;						// 转换为实际温度
	F_18B20_RsuSystemCLK();
	__asm("irq on");
	return fTemp;
}

⌨️ 快捷键说明

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