位置:51电子网 » 技术资料 » 接口电路

1-Wire总线与DS18B20应用仿真

发布时间:2008/8/16 0:00:00 访问次数:992

  1-wire总线的基本通信协议

  作为一种单主机多从机的总线系统,在一条1-wire总线上可挂接的从器件数量几乎不受限制。为了不引起逻辑上的冲突,所有从器件的1-wire总线接口都是漏极开路的,因此在使用时必须对总线外加上拉电阻(一般取5kω左右)。主机对1-wire总线的基本操作分为复位、读和写三种,其中所有的读写操作均为低位在前高位在后。复位、读和写是1-wire总线通信的基础,下面通过具体程序详细介绍这3种操作的时序要求。(程序中dq代表1-wire总线,定义为p1.0,uchar定义为unsigned char)

  1 1-wire总线的复位

  复位是1-wire总线通信中最为重要的一种操作,在每次总线通信之前主机必须首先发送复位信号。如程序1.1所示,产生复位信号时主机首先将总线拉低480~960μs然后释放,由于上拉电阻的存在,此时总线变为高电平。1-wire总线器件在接收到有效跳变的15~60μs内会将总线拉低60~240μs,在此期间主机可以通过对dq采样来判断是否有从器件挂接在当前总线上。函数reset()的返回值为0表示有器件挂接在总线上,返回值为1表示没有器件挂接在总线上。

  程序1.1 总线复位

  uchar reset(void)
{
uchar tdq;
dq=0; //主机拉低总线
delay480μs(); //等待480μs
dq=1; //主机释放总线
delay60μs(); //等待60μs
tdq=dq; //主机对总线采样
delay480μs(); //等待复位结束
return tdq; //返回采样值
}

  2 1-wire总线的写操作

  由于只有一条i/o线,主机1-wire总线的写操作只能逐位进行,连续写8次即可写入总线一个字节。如程序1.2所示,当mcs-51单片机的时钟频率为12mhz时,程序中的语句_nop_();可以产生1μs的延时,调用此函数时需包含头文件“intrins.h”。向1-wire总线写1bit至少需要60μs,同时还要保证两次连续的写操作有1μs以上的间隔。若待写位wbit为0则主机拉低总线60μs然后释放,写0操作完成。若待写位wbit为1,则主机拉低总线并在1~15μs内释放,然后等待60μs,写1操作完成。

  程序1.2 向总线写1bit

  void writebit(uchar wbit)
{
  _nop_();
//保证两次写操作间隔1μs以上
  dq=0;
_nop_();
//保证主机拉低总线1μs以上
if(wbit)
{
//向总线写1
dq=1;
delay60μs();
}
else
{
//向总线写0
delay60μs();
dq=1;
}
}

  3 1-wire总线的读操作

  与写操作类似,主机对1-wire总线的读操作也只能逐位进行,连续读8次,即可读入主机一个字节。从1-wire总线读取1bit同样至少需要60μs,同时也要保证两次连续的读操作间隔1μs以上。如程序1.3所示,从总线读数据时,主机首先拉低总线1μs以上然后释放,在释放总线后的1~15μs内主机对总线的采样值即为读取到的数据。

程序1.3 从总线读1bit

uchar readbit()
{
uchar tdq;
_nop_();
//保证两次连续写操作间隔1μs以上
dq=0;
_nop_();
//保证拉低总线的时间不少于1μs
dq=1;
_nop_();
tdq=dq;
//主机对总线采样
delay60μs();
//等待读操作结束
return tdq;
//返回读取到的数据
}

数字温度传感器ds18b20

1 ds18b20的基本特性

● 采用1-wire总线接口,可以方便实现多点测温。
● 与主机连接方便,除5kω的总线上拉电阻外无须其他额外器件。
● 电源电压范围为3.0~5.5v,与3.3v和5v数字系统均可很好地兼容。
● 测量范围为-55~+125℃,分辨率为9~12位可编程。
● 通过编程可设置温度报警上下限,设置值掉电不丢失。
● 内部集成了用于器件寻址的64bit光刻rom编码。

  2 ds18b20中的存储器

  在ds18b20中共有三种存储器,分别是rom、ram、eeprom,每种存储器都有其特定的功能,可查阅相关资料。

  3 1-wire总线rom功能命令

  在ds18b20内部光刻了一个长度为64bit的rom编码,这个编码是器件的身份识别标志。当总线上挂接着多个ds18b20时可以通过rom编码对特定器件进行操作。rom功能命令是针对器件的rom编码进行操作的命令,共有5个,长度均为8bit(1byte)。

  ①读rom(33h)

  当挂接在总线上的1-wire总线器件接收到此命令时,会在主机读操作的配合下将自身的rom编码按由低位到高位的顺序依次发送给主机。总线上挂接有多个ds18b20时,此命令会使所有器件同时向主机传送自身的rom编码,这将导致数据的冲突。

  ②匹配rom(55h)

  主机在发送完此命令后,必须紧接着发送一个64bit的rom编码,与此rom编码匹配的从器件会响应主机的后续命令,而其他从器件则处于等待状态。该命令主要用于选择总线上的

  1-wire总线的基本通信协议

  作为一种单主机多从机的总线系统,在一条1-wire总线上可挂接的从器件数量几乎不受限制。为了不引起逻辑上的冲突,所有从器件的1-wire总线接口都是漏极开路的,因此在使用时必须对总线外加上拉电阻(一般取5kω左右)。主机对1-wire总线的基本操作分为复位、读和写三种,其中所有的读写操作均为低位在前高位在后。复位、读和写是1-wire总线通信的基础,下面通过具体程序详细介绍这3种操作的时序要求。(程序中dq代表1-wire总线,定义为p1.0,uchar定义为unsigned char)

  1 1-wire总线的复位

  复位是1-wire总线通信中最为重要的一种操作,在每次总线通信之前主机必须首先发送复位信号。如程序1.1所示,产生复位信号时主机首先将总线拉低480~960μs然后释放,由于上拉电阻的存在,此时总线变为高电平。1-wire总线器件在接收到有效跳变的15~60μs内会将总线拉低60~240μs,在此期间主机可以通过对dq采样来判断是否有从器件挂接在当前总线上。函数reset()的返回值为0表示有器件挂接在总线上,返回值为1表示没有器件挂接在总线上。

  程序1.1 总线复位

  uchar reset(void)
{
uchar tdq;
dq=0; //主机拉低总线
delay480μs(); //等待480μs
dq=1; //主机释放总线
delay60μs(); //等待60μs
tdq=dq; //主机对总线采样
delay480μs(); //等待复位结束
return tdq; //返回采样值
}

  2 1-wire总线的写操作

  由于只有一条i/o线,主机1-wire总线的写操作只能逐位进行,连续写8次即可写入总线一个字节。如程序1.2所示,当mcs-51单片机的时钟频率为12mhz时,程序中的语句_nop_();可以产生1μs的延时,调用此函数时需包含头文件“intrins.h”。向1-wire总线写1bit至少需要60μs,同时还要保证两次连续的写操作有1μs以上的间隔。若待写位wbit为0则主机拉低总线60μs然后释放,写0操作完成。若待写位wbit为1,则主机拉低总线并在1~15μs内释放,然后等待60μs,写1操作完成。

  程序1.2 向总线写1bit

  void writebit(uchar wbit)
{
  _nop_();
//保证两次写操作间隔1μs以上
  dq=0;
_nop_();
//保证主机拉低总线1μs以上
if(wbit)
{
//向总线写1
dq=1;
delay60μs();
}
else
{
//向总线写0
delay60μs();
dq=1;
}
}

  3 1-wire总线的读操作

  与写操作类似,主机对1-wire总线的读操作也只能逐位进行,连续读8次,即可读入主机一个字节。从1-wire总线读取1bit同样至少需要60μs,同时也要保证两次连续的读操作间隔1μs以上。如程序1.3所示,从总线读数据时,主机首先拉低总线1μs以上然后释放,在释放总线后的1~15μs内主机对总线的采样值即为读取到的数据。

程序1.3 从总线读1bit

uchar readbit()
{
uchar tdq;
_nop_();
//保证两次连续写操作间隔1μs以上
dq=0;
_nop_();
//保证拉低总线的时间不少于1μs
dq=1;
_nop_();
tdq=dq;
//主机对总线采样
delay60μs();
//等待读操作结束
return tdq;
//返回读取到的数据
}

数字温度传感器ds18b20

1 ds18b20的基本特性

● 采用1-wire总线接口,可以方便实现多点测温。
● 与主机连接方便,除5kω的总线上拉电阻外无须其他额外器件。
● 电源电压范围为3.0~5.5v,与3.3v和5v数字系统均可很好地兼容。
● 测量范围为-55~+125℃,分辨率为9~12位可编程。
● 通过编程可设置温度报警上下限,设置值掉电不丢失。
● 内部集成了用于器件寻址的64bit光刻rom编码。

  2 ds18b20中的存储器

  在ds18b20中共有三种存储器,分别是rom、ram、eeprom,每种存储器都有其特定的功能,可查阅相关资料。

  3 1-wire总线rom功能命令

  在ds18b20内部光刻了一个长度为64bit的rom编码,这个编码是器件的身份识别标志。当总线上挂接着多个ds18b20时可以通过rom编码对特定器件进行操作。rom功能命令是针对器件的rom编码进行操作的命令,共有5个,长度均为8bit(1byte)。

  ①读rom(33h)

  当挂接在总线上的1-wire总线器件接收到此命令时,会在主机读操作的配合下将自身的rom编码按由低位到高位的顺序依次发送给主机。总线上挂接有多个ds18b20时,此命令会使所有器件同时向主机传送自身的rom编码,这将导致数据的冲突。

  ②匹配rom(55h)

  主机在发送完此命令后,必须紧接着发送一个64bit的rom编码,与此rom编码匹配的从器件会响应主机的后续命令,而其他从器件则处于等待状态。该命令主要用于选择总线上的

相关IC型号

Warning: Undefined variable $stockkeys in G:\website_51dzw\www.51dzw.com\code\tech\view.php on line 152

热门点击

 

推荐技术资料

耳机放大器
    为了在听音乐时不影响家人,我萌生了做一台耳机放大器的想... [详细]
版权所有:51dzw.COM
深圳服务热线:13692101218  13751165337
粤ICP备09112631号-6(miitbeian.gov.cn)
公网安备44030402000607
深圳市碧威特网络技术有限公司
付款方式


 复制成功!