📄 ds18b20.c
字号:
/*
//************************************************************************* //
//
//
// COPYRIGHT (c) 2006 BY FOSHAN LX.
// -- ALL RIGHTS RESERVED --
//
// File Name: ds18b20.C
// Author: guobin
// Created: 2006/04/20
// Modified:
// Revision: 2.0
//
//*************************************************************************
*/
#include "hardware.h"
UCHAR ROM64Bit[8];
UCHAR RAM9Byte[9];
RealTM RealTimeTM;
bit DS18B20_Initial(void)
{
UINT i;
DS18B20_DQ=0;
i=200;
while(i--); //delay minimum= 480us
DS18B20_DQ=1;
i=15;
while(i--); //delay 15~60us=40us
i=80;
while(i--) //delay 60~240us
if(!DS18B20_DQ)
break;
if(i==0xFFFF)
return 0;
i=100; //delay 240us
while(i--);
return 1;
}
void DS18B20_Write(UCHAR Dat)
{
UCHAR i=0;
UCHAR j;
for(j=1;j<=8;j++)
{
if((Dat&0x01)==0x01)
{
DS18B20_DQ=0;
for(i=0;i<5;i++); //delay min=1us 4us
DS18B20_DQ=1;
i=20;
while(i--); //delay max=60us
}
else
{
DS18B20_DQ=0;
i=40; //delay min=60us max=120us 84us
while(i--);
DS18B20_DQ=1;
for(i=0;i<5;i++); //delay min=1us
}
Dat>>=1;
}
}
UCHAR DS18B20_Read(void)
{
UCHAR i,j;
UCHAR Dat;
Dat=0;
for(i=0;i<8;i++)
{
DS18B20_DQ=0;
for(j=0;j<2;j++); //delay min=1us 2us
DS18B20_DQ=1;
for(j=0;j<5;j++); //delay 2us~10us
if(DS18B20_DQ)
Dat+=1<<i;
j=30;
while(j--); //delay min=45us
}
return Dat;
}
UCHAR DS18B20_Start(void)
{
UCHAR i;
if(!DS18B20_Initial())
return 0;
DS18B20_Write(0x33); //read rom code 64bit
for(i=0;i<8;i++)
ROM64Bit[i]=DS18B20_Read();
DS18B20_Write(0x44); //start convert temprature
return 1;
}
void DS18B20_WaitDQ(void)
{
while(!DS18B20_DQ);
}
void DS18B20_ReadTM(void)
{
UCHAR i;
UINT j;
DS18B20_Initial();
DS18B20_Write(0x33); //read rom code 64bit
for(i=0;i<8;i++)
ROM64Bit[i]=DS18B20_Read();
DS18B20_Write(0xBE); //Read temprature
for(i=0;i<9;i++)
RAM9Byte[i]=DS18B20_Read();
((UCHAR *)&j)[0]=RAM9Byte[1];
((UCHAR *)&j)[1]=RAM9Byte[0];
if(RAM9Byte[1]>0x80)
{
RealTimeTM.Sign=1;
RealTimeTM.ZhengShu=(UCHAR)(~j>>4);
RealTimeTM.XiaoShu=(16-(j&0x000F))*625;
if(RealTimeTM.XiaoShu==0)
RealTimeTM.ZhengShu++;
}
else
{
RealTimeTM.Sign=0;
RealTimeTM.ZhengShu=(UCHAR)(j>>4);
RealTimeTM.XiaoShu=(j&0x000F)*625;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -