下载
加入VIP
  • 专属下载特权
  • 现金文档折扣购买
  • VIP免费专区
  • 千万文档免费下载

上传资料

关闭

关闭

关闭

封号提示

内容

首页 1-wire总线的基本通信协议(protues)

1-wire总线的基本通信协议(protues).doc

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

沈飞蛟
2017-09-20 0人阅读 举报 0 0 暂无简介

简介:本文档为《1-wire总线的基本通信协议(protues)doc》,可适用于IT/计算机领域

wire总线的基本通信协议(protues)Wire总线的基本通信协议作为一种单主机多从机的总线系统在一条Wire总线上可挂接的从器件数量几乎不受限制。为了不引起逻辑上的冲突所有从器件的Wire总线接口都是漏极开路的因此在使用时必须对总线外加上拉电阻(一般取k>左右)。主机对Wire总线的基本操作分为复位、读和写三种其中所有的读写操作均为低位在前高位在后。复位、读和写是Wire总线通信的基础下面通过具体程序详细介绍这种操作的时序要求。(程序中DQ代表Wire总线定义为Puchar定义为unsignedchar)Wire总线的复位复位是Wire,总线通信中最为重要的一种操作在每次总线通信之前主机必须首先发送复位信号。如程序所示产生复位信号时主机首先将总线拉低μs然后释放由于上拉电阻的存在此时总线变为高电平。Wire总线器件在接收到有效跳变的μs内会将总线拉低>μs在此期间主机可以通过对DQ采样来判断是否有从器件挂接在当前总线上。函数Reset()的返回值为表示有器件挂接在总线上返回值为表示没有器件挂接在总线上。程序总线复位在DS中共有三种存储器分别是ROM、RAM、EEPROM每种存储器都有其特定的功能可查阅相关资料。Wire总线ROM功能命令在DS内部光刻了一个长度为bit的ROM编码这个编码是器件的身份识别标志。当总线上挂接着多个DS时可以通过ROM编码对特定器件进行操作。ROM功能命令是针对器件的ROM编码进行操作的命令共有个长度均为bit(Byte)。读ROM(H)当挂接在总线上的Wire总线器件接收到此命令时会在主机读操作的配合下将自身的ROM编码按由低位到高位的顺序依次发送给主机。总线上挂接有多个DS时此命令会使所有器件同时向主机传送自身的ROM编码这将导致数据的冲突。匹配ROM(H)主机在发送完此命令后必须紧接着发送一个bit的ROM编码与此ROM编码匹配的从器件会响应主机的后续命令而其他从器件则处于等待状态。该命令主要用于选择总线上的特定器件进行访问。跳过ROM(CCH)发送此命令后主机不必提供ROM编码即可对从器件进行访问。与读ROM命令类似该命令同样只适用于单节点的Wire,总线系统当总线上有多个器件挂接时会引起数据的冲突。查找ROM(FOH)当主机不知道总线上器件的ROM编码时可以使用此命令并配合特定的算法查找出总线上从器件的数量和各个从器件的ROM编码。报警查找(ECH)此命令用于查找总线上满足报警条件的DS通过报警查找命令并配合特定的查找算法可以查找出总线上满足报警条件的器件数目和各个器件的ROM编码。DS器件功能命令与Wire总线相关的命令分为ROM功能命令和器件功能命令两种ROM功能命令具有通用性不仅适用于DS也适用于其他具有Wire总线接口的器件主要用于器件的识别与寻址器件功能命令具有专用性它们与器件的具体功能紧密相关。下面是DSl的器件功能命令。启动温度转换(H)该命令发送完成后主机可以通过调用Readbit()函数判断温度转换是否完成若Readbit()的返回值为则表示转换正在进行若Readbit()的返回值为则表示转换完成。读RAM(BEH)该命令发送完成后主机可以通过调用Readbit()函数将DSl中RAM的内容从低位到高位依次读出。写RAM(EH)该命令发出后主机随后写入Wire总线的字节将依次被存储到DS的报警上限、报警下限和配置寄存器中。复制RAM(H)该命令会将DSl的报警上限、报警下限和配置寄存器中的内容复制到EEPROM中。该命令发出后主机可以通过调用Readbit()函数判断复制操作是否完成若Readbit()的返回值为则表示复制操作完成。回读EEPROM(BH)该命令会将存储在EEPROM中的报警上限、报警下限和配置寄器的内容回读到RAM中主机可以通过调用Readbit()函数判断回读操作是否完成若Readbit()的返回值为则表示回读操作完成。DS在上电时会自动进行一次回读操作。主机与DS的通信流程如图所示主机通过Wire总线接口对DS的每次访问都以复位信号和ROM功能命令开始访问的结束位置是不确定的这与具体的功能命令相关。图中圆角矩形中的操作与主机发送的功能命令相对应随着功能命令的不同圆角矩形中的操作有时可以被省略。对总线上的DS来说复位信号意味着又一次通信的开始器件对此的响应是拉低总线以告知主机自身的存在然后准备接收ROM功能命令。多点测温系统仿真实例DS是一种比较廉价的温度传感器其封封装形式如图所示。在Proteus中包含有DS的仿真模型这使得相关程序的调试变得简单方便。下面以一个实例介绍用Proteus仿真多点测温系统的步骤。绘制仿真原理图如图所示在本实例中以单片机ATC和个DS构成了一个多点测温系统。为了有足够的空间存储各个DS的ROM编码和温度值在实例中用一片KB的sRAM芯片对单片机的RAM进行了扩展。设置DS仿真模型的属性首先右击选中protues编辑区中的DS仿真模型然后再左击此时弹出如图所示的属性设置对话框。其中FamilyCode是器件的家族码对于DS来说是H。ROMSerialNumber对应于器件的bit序列号格式为十六进制在填写过程中要保证同一条lwire总线上所有仿真模型的ROMSerialNumber都不相同。AutomaticSerialization设置为No时仿真模型将使用ROMSerialNumber中的序列号设置为Yes时模型的序列号将由仿真环境自动生成在此设置为Yes这样可以免去手动修改ROMSerialNumber的麻烦。CurrentValue中是仿真模型当前的温度值。Cranularity中是单击仿真模型的温度值增减按钮时温度值的改变量在此设置为。其他选项保持默认即可。单击OK按钮设置完成。编制源程序主机是通过Reset()、Readbit()、Writebit()三种基本操作与Wire总线进行通信的只要这三个函数的时序准确那么对于有一定C语言编程基础的用户来说程序其他部分的编写将不是难事按照前面介绍的流程向总线发送功能命令并进行相应读写操作即可。多点测温系统编程的难点在于器件的查找系统上电时主机首先要查找总线上挂接着多少个Wire器件并将各个器件的ROM编码读入单片机的RAM中这需要一套复杂的算法限于篇幅关于此算法在此不再详述。本仿真实例大体工作过程如图右下角注释部分所示“查找总线上所有器件的ROM编码并存储”这一步可以由ucharBReadROM(ucharBROM函数完成该函数的返回值是查找到的器件数目各个器件的ROM编码将存储在二维数组BROM中。“统一开始温度转换”的通信流程为:发送复位信号发送跳过ROM(CCH)命令发送启动温度转换(H)命令。“逐器件读取温度值”的通信流程为:发送复位信号发送匹配ROM(H)命令发送第i(i=>)个器件的ROM编码发送读RAM(BEH)命令读取字节其中低字节在前高字节在后读取到的值符合温度值数据格式。在Proteus中添加监视变量为了检验程序运行的正确与否通常的做法是将运行结果通过单片机的UART接口输出到虚拟终端上这种方法的缺点是会占用一定的单片机资源在此介绍另外一种程序调试技巧一一监视变量。在Proteus的运行状态下点击DebugWatchWindow会弹出监视窗口(watchwindow)然后按下AltA键会弹出如图所示的添加存储器条目对话框(AddMemoryItem)。所谓监视变量也就是监视相应存储单元中的内容图中Memory用于选择待监视变量所在的存储器Name用于填写变量名称为了含义清晰该名称最好与源程序中定义的变量名称一致Address用于填写待监视变量的地址DataType和DisplayFomat用于设置数据格式和显示格式。设置完成后单击Add按钮即可添加一个监视变量。在本实例中将测量到的温度值转化成ACSLL码字符串的格式存储在二维数组TempBuffer中因此DataType选择为ASCLLZStringWatchWindow的最终结果如图所示。Value一栏中显示的即为个DS测量到的温度值单击仿真模型的温度增减按钮温度值的改变会自动映射在watchWindow中。图中TempBufferi(i=>)的地址在Keil中可以按以下步骤得到:>单击Keil工具栏中的按钮进入调试状态。>通过ViewOutputWindow菜单调出Keil的OutputWindow并选中Command标签。>在OutputWindow的命令输入区输入TempBufferi然后回车即可得到TempBufferi的地址在本实例中i=>。对于非数组类型的变量在输入时需要在变量名前加取地址符号如图所示。“统一开始温度转换”的通信流程为:发送复位信号发送跳过ROM(CCH)命令发送启动温度转换(H)命令。“逐器件读取温度值”的通信流程为:发送复位信号发送匹配ROM(H)命令发送第i(i=>)个器件的ROM编码发送读RAM(BEH)命令读取字节其中低字节在前高字节在后读取到的值符合温度值数据格式。在Proteus中添加监视变量为了检验程序运行的正确与否通常的做法是将运行结果通过单片机的UART接口输出到虚拟终端上这种方法的缺点是会占用一定的单片机资源在此介绍另外一种程序调试技巧一一监视变量。在Proteus的运行状态下点击DebugWatchWindow会弹出监视窗口(watchwindow)然后按下AltA键会弹出如图所示的添加存储器条目对话框(AddMemoryItem)。所谓监视变量也就是监视相应存储单元中的内容图中Memory用于选择待监视变量所在的存储器Name用于填写变量名称为了含义清晰该名称最好与源程序中定义的变量名称一致Address用于填写待监视变量的地址DataType和DisplayFomat用于设置数据格式和显示格式。设置完成后单击Add按钮即可添加一个监视变量。在本实例中将测量到的温度值转化成ACSLL码字符串的格式存储在二维数组TempBuffer中因此DataType选择为ASCLLZStringWatchWindow的最终结果如图所示。Value一栏中显示的即为个DS测量到的温度值单击仿真模型的温度增减按钮温度值的改变会自动映射在watchWindow中。图中TempBufferi(i=>)的地址在Keil中可以按以下步骤得到:>单击Keil工具栏中的按钮进入调试状态。>通过ViewOutputWindow菜单调出Keil的OutputWindow并选中Command标签。>在OutputWindow的命令输入区输入TempBufferi然后回车即可得到TempBufferi的地址在本实例中i=>。对于非数组类型的变量在输入时需要在变量名前加取地址符号如图所示。

用户评价(0)

关闭

新课改视野下建构高中语文教学实验成果报告(32KB)

抱歉,积分不足下载失败,请稍后再试!

提示

试读已结束,如需要继续阅读或者下载,敬请购买!

文档小程序码

使用微信“扫一扫”扫码寻找文档

1

打开微信

2

扫描小程序码

3

发布寻找信息

4

等待寻找结果

我知道了
评分:

/11

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

VIP

在线
客服

免费
邮箱

爱问共享资料服务号

扫描关注领取更多福利