📄 ds18b20_driver.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 + -