#include "ds18b20.h"
//DS18B20_Temp_L=0x00;
// DS18B20_Temp_H=0x00;
//sbit DQ = P3^4; //定义DS18B20的数据总线
unsigned char DS18B20_Temp_L =0x00;
unsigned char DS18B20_Temp_H =0x00;
/******************************************************
*函数名称:void Delay15us()
*输 入:--
*返 回 值:--
*函数功能:15us延时函数
******************************************************/
void Delay15us()
{
unsigned int i;
for(i=0;i<30;i++)
{
_nop_();
}
}
/******************************************************
*函数名称:void Delay15(unsigned char n)
*输 入:--
*返 回 值:--
*函数功能:15us的n倍延时
******************************************************/
void Delay15(unsigned char n)
{
do{
Delay15us();
n--;
}while(n);
}
/******************************************************
*函数名称:void Delay2us()
*输 入:--
*输 出:--
*返 回 值:--
*函数功能:2us延时函数
******************************************************/
void Delay2us()
{
unsigned int i;
for(i=0;i<4;i++)
{
_nop_();
}
}
/******************************************************
*函数名称:void RST18B20(void)
*输 入:--
*返 回 值:--
*函数功能:初始化18B20
******************************************************/
void RST18B20(void)
{
DQ=0; //拉低总线 开始复位信号
Delay15(36); //延时540us
DQ=1; //释放总线
Delay15(6); //延时 等待DS18B20 发送存在脉冲
Delay15(24); //延时
}
/******************************************************
*函数名称:void WR18B20(unsigned char i_data)
*输 入:unsigned char i_data
*返 回 值:--
*函数功能:向DS18B20写入一个字节
******************************************************/
void WR18B20(unsigned char i_data)
{
unsigned char i;
for(i=8;i>0;i--)
{
DQ=0;
Delay15(1);
DQ=i_data&0x01;
Delay15(1);
DQ=1;
Delay15(1);
i_data=i_data>>1;
}
}
/******************************************************
*函数名称:unsigned char RD18B20(void)
*输 入:--
*返 回 值:unsigned char i_data
*函数功能:从DS18B20读取一个字节
******************************************************/
unsigned char RD18B20(void)
{
unsigned char i;
unsigned char i_data=0x00;
for(i=8;i>0;i--)
{
i_data>>=1;
DQ=0;
Delay2us();
DQ=1;
Delay2us();
if(DQ)
i_data|=0x80;
Delay15(3);
Delay2us();
Delay2us();
}
return(i_data);
}
/******************************************************
*函数名称:void ConvertT(void)
*输 入:--
*返 回 值:--
*函数功能:开始温度转换
******************************************************/
void ConvertT(void)
{
RST18B20(); //初始化DS18B20
WR18B20(0xCC); //发送Skip Rom命令
WR18B20(0x44); //发送温度转换命令
}
/******************************************************
*函数名称:void ReadT(void)
*输 入:--
*返 回 值:--
*函数功能:读取转换完成的温度
******************************************************/
void ReadT(void)
{
RST18B20(); //初始化DS18B20
WR18B20(0xCC); //发送Skip Rom命令
WR18B20(0xBE); //发送读取暂存器命令
DS18B20_Temp_L=RD18B20(); //读温度的低字节
DS18B20_Temp_H=RD18B20(); //读温度的高字节
}