最后一次优化和调整代码,增加支持keil4的中文注释。
This commit is contained in:
@@ -0,0 +1,109 @@
|
||||
#include "ds18b20.h"
|
||||
|
||||
/*
|
||||
* ????????DS18B20_Reset
|
||||
* ???? ????¦ËDS18B20????????????
|
||||
* ???? ????
|
||||
* ??? ??1=?????0=??????
|
||||
*/
|
||||
bit DS18B20_Reset(void)
|
||||
{
|
||||
unsigned int i;
|
||||
unsigned char presence;
|
||||
|
||||
DS18B20_DQ = 0; /* ????????480~960us */
|
||||
for(i=250; i>0; i--); /* DJNZ???: 250*2=500us */
|
||||
DS18B20_DQ = 1; /* ????????DS18B20????15~60us??????60~240us */
|
||||
for(i=10; i>0; i--); /* DJNZ: 10*2=20us, ?????????? */
|
||||
|
||||
presence = DS18B20_DQ; /* ???????????(0=?????1=??????) */
|
||||
|
||||
for(i=200; i>0; i--); /* DJNZ: 200*2=400us, ????????? */
|
||||
|
||||
return (presence == 0); /* ????1?????????????? */
|
||||
}
|
||||
|
||||
/*
|
||||
* ????????DS18B20_WriteByte
|
||||
* ???? ????DS18B20§Õ????????(LSB????)
|
||||
* ???? ??dat=?§Õ???????
|
||||
* ??? ????
|
||||
*/
|
||||
void DS18B20_WriteByte(uchar dat)
|
||||
{
|
||||
unsigned char i, j;
|
||||
|
||||
for(i=0; i<8; i++)
|
||||
{
|
||||
DS18B20_DQ = 0; /* ??????????§Õ?? */
|
||||
if(dat & 0x01) /* §Õ1????????? */
|
||||
DS18B20_DQ = 1;
|
||||
else /* §Õ0?????????? */
|
||||
DS18B20_DQ = 0;
|
||||
for(j=35; j>0; j--); /* DJNZ: 35*2=70us, ?????>=60us */
|
||||
DS18B20_DQ = 1; /* ??????? */
|
||||
dat >>= 1; /* ???¦Ë(LSB first) */
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* ????????DS18B20_ReadByte
|
||||
* ???? ????DS18B20?????????(LSB????)
|
||||
* ???? ????
|
||||
* ??? ????????????
|
||||
*/
|
||||
uchar DS18B20_ReadByte(void)
|
||||
{
|
||||
unsigned char i, j, dat = 0;
|
||||
|
||||
for(i=0; i<8; i++)
|
||||
{
|
||||
DS18B20_DQ = 0; /* ?????????????? */
|
||||
DS18B20_DQ = 1; /* ??????? */
|
||||
for(j=7; j>0; j--); /* DJNZ: 7*2=14us, ???DS18B20???????(~15us) */
|
||||
|
||||
dat >>= 1; /* ?????¦Ë */
|
||||
if(DS18B20_DQ)
|
||||
dat |= 0x80; /* LSB first?????????????¦Ë??????¦Ë */
|
||||
|
||||
for(j=23; j>0; j--); /* DJNZ: 23*2=46us, ?????>=60us */
|
||||
}
|
||||
return dat;
|
||||
}
|
||||
|
||||
/*
|
||||
* ????????DS18B20_StartConvert
|
||||
* ???? ??????DS18B20??????
|
||||
* ???? ????
|
||||
* ??? ????
|
||||
*/
|
||||
void DS18B20_StartConvert(void)
|
||||
{
|
||||
if(!DS18B20_Reset()) return; /* ??¦Ë???????? */
|
||||
DS18B20_WriteByte(0xCC); /* ????ROM */
|
||||
DS18B20_WriteByte(0x44); /* ????????? */
|
||||
}
|
||||
|
||||
/*
|
||||
* ????????DS18B20_ReadTemp
|
||||
* ???? ?????DS18B20??????(16¦Ë)
|
||||
* ???? ??temp=??????????????
|
||||
* ??? ??1=????????0=DS18B20¦Ä???
|
||||
*/
|
||||
bit DS18B20_ReadTemp(int *temp)
|
||||
{
|
||||
uchar tempL, tempH;
|
||||
int raw;
|
||||
|
||||
if(!DS18B20_Reset()) return 0; /* ??¦Ë???????? */
|
||||
DS18B20_WriteByte(0xCC); /* ????ROM */
|
||||
DS18B20_WriteByte(0xBE); /* ??????? */
|
||||
|
||||
tempL = DS18B20_ReadByte(); /* ?????????? */
|
||||
tempH = DS18B20_ReadByte(); /* ?????????? */
|
||||
|
||||
raw = (tempH << 8) | tempL; /* ???16¦Ë???? */
|
||||
*temp = raw;
|
||||
|
||||
return 1;
|
||||
}
|
||||
Reference in New Issue
Block a user