碧波液压网 欢迎你,游客。 登录 注册

1-Wire总线与DS18B20应用仿真

版权信息:站内文章仅供学习与参考,如触及到您的版权信息,请与本站联系。

  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

你没有登陆,无法阅读全文内容

您需要 登录 才可以查看,没有帐号? 立即注册

标签:
点赞   收藏

相关文章

发表评论

请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。

用户名: 验证码:

最新评论