你好!欢迎来到深圳市品慧电子有限公司!
语言
当前位置:首页 >> 传感器 >> DS18B20读写操作程序详解

DS18B20读写操作程序详解


  一、DS18B20的初始化

(1) 先将数据线置高电平“1”。

(2) 延时(该时间要求的不是很严格,但是尽可能的短一点)

(3) 数据线拉到低电平“0”。

(4) 延时750微秒(该时间的时间范围可以从480到960微秒)。

(5) 数据线拉到高电平“1”。

(6) 延时等待(如果初始化成功则在15到60毫秒时间之内产生一个由DS18B20所返回的低电平“0”。据该状态可以来确定它的存在,但是应注意不能无限的进行等待,不然会使程序进入死循环,所以要进行超时控制)。

(7) 若CPU读到了数据线上的低电平“0”后,还要做延时,其延时的时间从发出的高电平算起(第(5)步的时间算起)最少要480微秒。

(8) 将数据线再次拉高到高电平“1”后结束。

  二、 DS18B20的写操作

(1) 数据线先置低电平“0”。

(2) 延时确定的时间为15微秒。

(3) 按从低位到高位的顺序发送字节(一次只发送一位)。

(4) 延时时间为45微秒。

(5) 将数据线拉到高电平。

(6) 重复上(1)到(6)的操作直到所有的字节全部发送完为止。

(7) 最后将数据线拉高。

  三、DS18B20的读操作

(1)将数据线拉高“1”。

(2)延时2微秒。

(3)将数据线拉低“0”。

(4)延时15微秒。

(5)将数据线拉高“1”。

(6)延时15微秒。

(7)读数据线的状态得到1个状态位,并进行数据处理。

(8)延时30微秒。

  四、DS18B20读写操作程序

//----------------------------------------------------------

// 模块名称:DS18B20.h

// 模块功能:DS18B20 读写操作

//----------------------------------------------------------

sbit DS = P1^0;

//----------------------------------------------------------

// 函数名称:void DelayTmp(unsigned int count)

// 函数功能:延时

//----------------------------------------------------------

void DelayTmp(unsigned int count)

{

unsigned int i;

while(count)

{

i=200;while(i》0)i--;

count--;

}

}

//----------------------------------------------------------

// 函数名称:void DsReset(void)

// 函数功能:复位

//----------------------------------------------------------

void DsReset(void)

{

unsigned int i;

DS=0;

i=103; while(i》0)i--;

DS=1;

i=4;while(i》0)i--;

}

//----------------------------------------------------------

// 函数名称:bit TmpReadBit(void)

// 函数功能:读取一位

//----------------------------------------------------------

bit TmpReadBit(void)

{

unsigned int i;

bit dat;

DS=0;i++;

DS=1;i++;i++;

dat=DS;

i=8;while(i》0)i--;

return (dat);

}

//----------------------------------------------------------

// 函数名称:unsigned char TmpRead(void)

// 函数功能:读取一字节

//----------------------------------------------------------

unsigned char TmpRead(void)

{

unsigned char i,j,dat;

dat=0;

for(i=1;i《=8;i++)

{j=TmpReadBit();

dat=(j《《7)|(dat》》1); }

return(dat);

}

//----------------------------------------------------------

// 函数名称:void TmpWriteByte(unsigned char dat)

// 函数功能:写入一字节

//----------------------------------------------------------

void TmpWriteByte(unsigned char dat)

{

unsigned int i;

unsigned char j;

bit testb;

for(j=1;j《=8;j++)

{

testb=dat&0x01;

dat=dat》》1;

if(testb) //write 1

{

DS=0;

i++;i++;

DS=1;

i=8;while(i》0)i--;

}

else

{

DS=0; //write 0

i=8;while(i》0)i--;

DS=1;

i++;i++;

}

}

}

//----------------------------------------------------------

// 函数名称:void TmpChange(void)

// 函数功能:温度转换

//----------------------------------------------------------

void TmpChange(void)

{

DsReset();

DelayTmp(1);

TmpWriteByte(0xcc);

TmpWriteByte(0x44);

}

//----------------------------------------------------------

// 函数名称:unsigned int Tmp()

// 函数功能:获取温度

//----------------------------------------------------------

unsigned int Tmp()

{

float tt;

unsigned char a,b;

unsigned int temp;

DsReset();

DelayTmp(1);

TmpWriteByte(0xcc);

TmpWriteByte(0xbe);

a=TmpRead();

b=TmpRead();

temp=b;

temp《《=8;

temp=temp|a;

tt=temp*0.0625;

temp=tt*10+0.5;

return temp;

}

//----------------------------------------------------------

// 函数名称:void RefreshTmp()

// 函数功能:刷新温度

//----------------------------------------------------------

void RefreshTmp()

{

TmpChange();

DisplayTmp(Tmp());

}

用户评论

发评论送积分,参与就有奖励!

发表评论

评论内容:发表评论不能请不要超过250字;发表评论请自觉遵守互联网相关政策法规。

深圳市品慧电子有限公司