第二次优化代码,增加闹钟、蜂鸣器功能。
This commit is contained in:
@@ -0,0 +1,86 @@
|
||||
#include "ds18b20.h"
|
||||
|
||||
void DS18B20_Reset(void)
|
||||
{
|
||||
uchar i;
|
||||
DS18B20_DQ = 0;
|
||||
for(i=0; i<200; i++);
|
||||
DS18B20_DQ = 1;
|
||||
for(i=0; i<100; i++);
|
||||
}
|
||||
|
||||
void DS18B20_WriteByte(uchar dat)
|
||||
{
|
||||
uchar i, j;
|
||||
for(i=0; i<8; i++)
|
||||
{
|
||||
DS18B20_DQ = 0;
|
||||
_nop_();
|
||||
if(dat & 0x01)
|
||||
DS18B20_DQ = 1;
|
||||
else
|
||||
DS18B20_DQ = 0;
|
||||
for(j=0; j<30; j++);
|
||||
DS18B20_DQ = 1;
|
||||
_nop_();
|
||||
_nop_();
|
||||
dat >>= 1;
|
||||
}
|
||||
}
|
||||
|
||||
uchar DS18B20_ReadByte(void)
|
||||
{
|
||||
uchar i, j, dat = 0;
|
||||
for(i=0; i<8; i++)
|
||||
{
|
||||
dat >>= 1;
|
||||
DS18B20_DQ = 0;
|
||||
_nop_();
|
||||
DS18B20_DQ = 1;
|
||||
_nop_();
|
||||
_nop_();
|
||||
if(DS18B20_DQ)
|
||||
dat |= 0x80;
|
||||
for(j=0; j<20; j++);
|
||||
}
|
||||
return dat;
|
||||
}
|
||||
|
||||
void DS18B20_StartConvert(void)
|
||||
{
|
||||
DS18B20_Reset();
|
||||
DS18B20_WriteByte(0xCC);
|
||||
DS18B20_WriteByte(0x44);
|
||||
}
|
||||
|
||||
void DS18B20_SetResolution(uchar res)
|
||||
{
|
||||
// res: 0x1F=9bit, 0x3F=10bit, 0x5F=11bit, 0x7F=12bit
|
||||
DS18B20_Reset();
|
||||
DS18B20_WriteByte(0xCC); // Skip ROM
|
||||
DS18B20_WriteByte(0x4E); // Write Scratchpad
|
||||
DS18B20_WriteByte(0x00); // TH (user byte 1)
|
||||
DS18B20_WriteByte(0x00); // TL (user byte 2)
|
||||
DS18B20_WriteByte(res); // Configuration register
|
||||
DS18B20_Reset();
|
||||
DS18B20_WriteByte(0xCC); // Skip ROM
|
||||
DS18B20_WriteByte(0x48); // Copy Scratchpad to EEPROM
|
||||
}
|
||||
|
||||
bit DS18B20_GetTemp(int *temp)
|
||||
{
|
||||
uchar tempL, tempH;
|
||||
int raw;
|
||||
|
||||
DS18B20_Reset();
|
||||
DS18B20_WriteByte(0xCC);
|
||||
DS18B20_WriteByte(0xBE);
|
||||
|
||||
tempL = DS18B20_ReadByte();
|
||||
tempH = DS18B20_ReadByte();
|
||||
|
||||
raw = (tempH << 8) | tempL;
|
||||
*temp = raw;
|
||||
|
||||
return 1;
|
||||
}
|
||||
Reference in New Issue
Block a user