1-Wire总线协议应用_第1页
1-Wire总线协议应用_第2页
1-Wire总线协议应用_第3页
1-Wire总线协议应用_第4页
1-Wire总线协议应用_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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

2、e 总线的复位 复位是 1-Wire 总线通信中最为重要的一种操作, 在每次总线 通信之前主机必须首先发送复位信号。如程序 1.1 所示,产 生复位信号时主机首先将总线拉低480960s然后释放,由于上拉电阻的存在,此时总线变为高电平。 1-Wire 总线器件在接收到有效跳变的 1560s 内会将总线 拉低 60240s ,在此期间主机可以通过对 DQ 采样 来判断是否有从器件挂接在当前总线上。函数 Reset ()的 返回值为 0 表示有器件挂接在总线上, 返回值为 1 表示没有 器件挂接在总线上。程序 1.1 总线复位uchar Reset(void)uchar tdq;DQ=0; / 主

3、机拉低总线 delay480s(); / 等待 480sDQ=1; / 主机释放总线 delay60s(); / 等待 60s tdq=DQ; / 主机对总线采样 delay480s(); / 等待复位结束 return tdq; / 返回采样值 2 1-Wire 总线的写操作由于只有一条 I/O 线,主机 1-Wire 总线的写操作只能逐位进 行,连续写 8 次即可写入总线一个字节。如程序 1.2 所示, 当 MCS-51 单片机的时钟频率为 12MHz 时,程序中的语句 _nop_(); 可以产生 1s 的延时,调用此函数时需包含头 文件 intrins.h 。向 1-Wire 总线写 1

4、bit 至少 需要 60s ,同时还要保证两次连续的写操作有1s 以上的间隔。若待写位 wbit 为 0 则主机拉低总线 60s 然后释放,写 0 操作完成。若待写位 wbit 为 1 , 则主机拉低总线并在115& #956;s内释放,然后等待60s ,写 1 操作完成。程序1.2向总线写1bitvoid Writebit(uchar wbit)_nop_();/保证两次写操作间隔1s 以上DQ=0;_nop_();/保证主机拉低总线 1s 以上if(wbit)/向总线写 1DQ=1;delay60s();else/ 向总线写 0 delay60s();DQ=1;3 1-Wire 总线的读操

5、作与写操作类似, 主机对 1-Wire 总线的读操作也只能逐位进行, 连续读 8 次,即可读入主机一个字节。从 1-Wire 总线读取 1bit 同样至少需要 60s ,同时也要保证两次连续的读 操作间隔 1s 以上。如程序 1.3 所示,从总线读数据 时,主机首先拉低总线 1s 以上然后释放,在释放总 线后的115& #956;s内主机对总线的采样值即为读取到的 数据。程序1.3从总线读1bituchar Readbit()uchar tdq;_nop_();/保证两次连续写操作间隔1s 以上DQ=0;_nop_();/保证拉低总线的时间不少于1sDQ=1;_nop_();tdq=DQ;/主

6、机对总线采样delay60s();/等待读操作结束return tdq;/返回读取到的数据数字温度传感器 DS18B201 DS18B20 的基本特性 采用 1-Wire 总线接口,可以方便实现多点测温。 与主机连接方便,除 5k 的总线上拉电阻外无须其 他额外器件。电源电压范围为 3.05.5V,与3.3V和5V数字系统均可 很好地兼容。测量范围为-55+125C,分辨率为 912位可编程。 通过编程可设置温度报警上下限,设置值掉电不丢失。 内部集成了用于器件寻址的 64bit 光刻 ROM 编码。2 DS18B20 中的存储器在 DS18B20 中共有三种存储器,分别是 ROM 、RAM

7、、 EEPROM ,每种存储器都有其特定的功能, 可查阅相关资料。3 1-Wire 总线 ROM 功能命令在 DS18B20 内部光刻了一个长度为 64bit 的 ROM 编码,这 个编码是器件的身份识别标志。当总线上挂接着多个DS18B20 时可以通过 ROM 编码对特定器件进行操作。 ROM 功能命令是针对器件的 ROM 编码进行操作的命令,共有 5 个,长度均为 8bit ( 1Byte )。 读 ROM(33H)当挂接在总线上的 1-Wire 总线器件接收到此命令时,会在主 机读操作的配合下将自身的 ROM 编码按由低位到高位的顺 序依次发送给主机。总线上挂接有多个DS18B20 时,

8、此命令会使所有器件同时向主机传送自身的ROM 编码,这将导致数据的冲突 匹配 ROM(55H)主机在发送完此命令后, 必须紧接着发送一个 64bit 的 ROM 编码,与此 ROM 编码匹配的从器件会响应主机的后续命令, 而其他从器件则处于等待状态。该命令主要用于选择总线上 的特定器件进行访问。 跳过 ROM(CCH)发送此命令后,主机不必提供 ROM 编码即可对从器件进行 访问。与读 ROM 命令类似,该命令同样只适用于单节点的 1-Wire 总线系统, 当总线上有多个器件挂接时会引起数据的 冲突。 查找 ROM(F0H)当主机不知道总线上器件的 ROM 编码时,可以使用此命令 并配合特定的

9、算法查找出总线上从器件的数量和各个从器 件的 ROM 编码。 报警查找 (ECH)此命令用于查找总线上满足报警条件的 DS18B20 ,通过报 警查找命令并配合特定的查找算法,可以查找出总线上满足 报警条件的器件数目和各个器件的 ROM 编码。4 DS18B20 器件功能命令与 1-Wire 总线相关的命令分为 ROM 功能命令和器件功能命 令两种, ROM 功能命令具有通用性,不仅适用于 DS18B20 也适用于其他具有 1-Wire 总线接口的器件, 主要用于器件的 识别与寻址;器件功能命令具有专用性,它们与器件的具体 功能紧密相关。下面是 DS18B20 的器件功能命令。 启动温度转换

10、(44H)该命令发送完成后, 主机可以通过调用 Readbit() 函数判断温 度转换是否完成, 若 Readbit() 的返回值为 0 则表示转换正在 进行,若 Readbit() 的返回值为 1 则表示转换完成。 读 RAM(BEH) 该命令发送完成后,主机可以通过调用 Readbit() 函数将 DS18B20 中 RAM 的内容从低位到高位依次读出。 写 RAM(4EH)该命令发出后,主机随后写入 1-Wire 总线的 3 字节将依次 被存储到 DS18B20 的报警上限、 报警下限和配置寄存器中。 复制 RAM(48H)该命令会将 DS18B20 的报警上限、报警下限和配置寄存器 中

11、的内容复制到 EEPROM 中。该命令发出后,主机可以通 过调用 Readbit() 函数判断复制操作是否完成,若 Readbit() 的返回值为 1 ,则表示复制操作完成。 回读 EEPROM(B8H)该命令会将存储在 EEPROM 中的报警上限、报警下限和配 置寄器的内容回读到 RAM 中,主机可以通过调用 Readbit() 函数判断回读操作是否完成, 若 Readbit() 的返回值为 1 则表 示回读操作完成。 DS18B20 在上电时会自动进行一次回读 操作。图 1 主机与 DS18B20 的通信流程图5 主机与 DS18B20 的通信流程如图 1 所示,主机通过 1-Wire 总

12、线接口对 DS18B20 的每次 访问都以复位信号和 ROM 功能命令开始,访问的结束位置 是不确定的,这与具体的功能命令相关。图中圆角矩形中的 操作与主机发送的功能命令相对应,随着功能命令的不同圆 角矩形中的操作有时可以被省略。对总线上的 DS18B20 来 说,复位信号意味着又一次通信的开始,器件对此的响应是 拉低总线以告知主机自身的存在,然后准备接收 ROM 功能 命令。多点测温系统仿真实例DS18B20 是一种比较廉价的温度传感器,其封封装形式如 图 2 所示。在 Proteus 中包含有 DS18B20 的仿真模型,这 使得相关程序的调试变得简单方便。下面以一个实例介绍用 Prote

13、us 仿真多点测温系统的步骤。图 2 DS18B20 封装形式 绘制仿真原理图如图 3 所示,在本实例中以单片机 AT89C52 和 8 个 DS18B20 构成了一个多点测温系统。为了有足够的空间存 储各个 DS18B20 的 ROM 编码和温度值,在实例中用一片 8KB 的 SRAM 芯片 6116 对单片机的 RAM 进行了扩展。 设置 DS18B20 仿真模型的属性首先右击选中 protues 编辑区中的 DS18B20 仿真模型然后 再左击,此时弹出如图 4 所示的属性设置对话框。其中, Family Code 是器件的家族码,对于 DS18B20 来说是 28H ROM Seria

14、l Number 对应于器件的 48bit 序列号,格式为十 六进制,在填写过程中要保证同一条 1-Wire 总线上所有仿真 模型的 ROM Serial Number 都不相同。 Automatic Serialization 设置为 No 时仿真模型将使用 ROM Serial Number 中的序列号,设置为 Yes 时模型的序列号将由仿真 环境自动生成,在此设置为 Yes ,这样可以免去手动修改 ROM Serial Number 的麻烦。 Current Value 中是仿真模型 当前的温度值。 Cranularity 中是单击仿真模型的温度值增减 按钮时温度值的改变量,在此设置为

15、1.1 。其他选项保持默 认即可。单击 OK 按钮,设置完成。图 3 多点测温系统仿真原理图 编制源程序主机是通过 Reset() 、 Readbit() 、 Writebit() 三种基本操作与 1-Wire 总线进行通信的, 只要这三个函数的时序准确,那么 对于有一定 C 语言编程基础的用户来说程序其他部分的编 写将不是难事,按照前面介绍的流程向总线发送功能命令并 进行相应读写操作即可。多点测温系统编程的难点在于器件 的查找,系统上电时主机首先要查找总线上挂接着多少个 1-Wire 器件并将各个器件的 ROM 编码读入单片机的 RAM 中,这需要一套复杂的算法,限于篇幅关于此算法在此不再

16、详述。本仿真实例大体工作过程如图 3 右下角注释部分所示, 查找总线上所有器件的 ROM 编码并存储 这一步可以由 uchar B20ReadROM(uchar B20ROM 函数 完成,该函数的返回值是查找到的器件数目,各个器件的 ROM 编码将存储在二维数组 B20ROM 中。图 4 DS18B20 仿真模型属性设置 统一开始温度转换 的通信流程为: 发送复位 信号;发送跳过 ROM(CCH) 命令;发送启动温度转换 (44H) 命令。 逐器件读取温度值 的通信流程为: 发送复位 信号;发送匹配 ROM(55H)命令;发送第i(i=O7)个器件的 ROM 编码;发送读 RAM(BEH) 命

17、令;读取 2 字节,其中低 字节在前,高字节在后,读取到的值符合温度值数据格式。 在 Proteus 中添加监视变量为了检验程序运行的正确与否,通常的做法是将运行结果通 过单片机的 UART 接口输出到虚拟终端上, 这种方法的缺点 是会占用一定的单片机资源,在此介绍另外一种程序调试技 巧监视变量。在 Proteus 的运行状态下点击 DebugWatch Window 会弹出监视窗口 (Watch Window) ,然后按下 Alt+A 键会弹出如图 5 所示的添加存储 器条目对话框 (Add Memory Item) 。所谓监视变量也就是监 视相应存储单元中的内容,图 5 中图 5 添加存储

18、器条目对话框Memory 用于选择待监视变量所在的存储器; Name 用于填 写变量名称,为了含义清晰该名称最好与源程序中定义的变 量名称一致; Address 用于填写待监视变量的地址; Data Type 和 Display Fomat 用于设置数据格式和显示格式。 设置 完成后单击 Add 按钮即可添加一个监视变量。 在本实例中将 测量到的温度值转化成 ACSLL 码字符串的格式存储在二维 数组 TempBuffer 中,因此 Data Type 选择为 ASCLLZ String , Watch Window 的最终结果如图 6 所示。 Value 一栏中显示 的即为 8 个 DS18B20 测量到的温度值,单击仿真模型的温 度增减按钮温度值的改变

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论