DS18B20ROM编码的搜索算法_第1页
DS18B20ROM编码的搜索算法_第2页
DS18B20ROM编码的搜索算法_第3页
DS18B20ROM编码的搜索算法_第4页
DS18B20ROM编码的搜索算法_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

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

文档简介

1、DS18B20 ROM编码的搜索算法当温度传感器均挂与单线总线上时,对单线总线上的DS18B20正确寻址是其 正常地测量温度先决条件,而识别 ROM编码是对单线总线上的DS18B20正确寻 址唯一方法。所以对单线总线上的DS18B20 ROM编码搜索与识别是必须的。1)单线总线”通信协议单线总线”是一种在一条总线(这条总线只有一条口线)具有单主机多从机 的总线系统,在单线总线”可挂多个从机系统。为了不引起逻辑上的冲突,所有 从机系统 单线总线”接口都是漏极开路的,多个从机系统输出信号在总线上实现 线与。因此在使用时必须对总线外加上拉电阻。为保证数据的完整性,所有的单线总线器件都要遵循严格的通信

2、协议。单线总线”通信协议定义了复位脉冲、应答脉冲、写时序和读时序等几种信号类型(具体的时序参考3.1节,这里不再做具体介绍)。所有的单总线命令序列 (如初 始化,ROM命令,RAM命令)都是由这些基本的信号类型组成的。 在这些信号中, 除了应答脉冲外,其它均由主机发出,并且发送的所有命令和数据都是字节的低 位在刖。2)DS18B20 ROM搜索命令当单线总线上挂有多个 DS18B20时,系统对总线上器件的数量和每个器件 的ROM的识别与搜索是通过DS18B20 ROM搜索命令与算法配合来实现的。 下 面具体介绍ROM搜索命令的工作过程。对64位ROM编码识别从最低位开始, ROM编码的每一位搜

3、索过程可总结为 两读一写”读一位,读该位补码,写一 位。总线主机在ROM编码每一位上完成这三步就可以获得一个器件的ROM编码。 两读”总线主机发布ROM搜索命令后执行一次读,总线上所有器件就把它们各自ROM编码的第一位放到总线来做做出响应。这次读获得的数据是所有器件放在 总线上数据的 与”再执行一次读,因为ROM搜索命令正在执行所以总线上所 有器件把各自ROM编码的第一位的补码放在总线上,第二次读获得的数据也是 所有器件放在总线上数据的 与”对第一位的 两读”就此完成。之后主机再次进 行的两读”则是针对ROM编码的第二位,以此类推。从 两读”获得的数据有以 下解释,见表3-1表3-1两读”获得

4、的数据解释两读”数据两读”数据解释00有器件在总线上,总线上所有器件在此数据位上发生冲突01有器件在总线上,总线上所有器件在此数据位均为010有器件在总线上,总线上所有器件在此数据位均为111没有有器件在总线上一写”对ROM编码的某一位两读”之后对该位进行一写”操作。一写”操作写的 数据则要根据 两读”获得的数据来确定,如果 两读”数据为00则表示总线上器 件在该位上数据发生冲突, 一写”写的数据此种情况下具有 排除”的作用,如果 器件ROM编码在该位上的数据与一写”写的数据相同则继续保持与总线的联 系。如果不相同则此器件从总线上 排除”不再响应主机发布的命令,直到主机 进行下一次复位。如果

5、两读”数据为01则表示总线上所有器件在该位上均位 0, 为保持器件与总线的联系一写”操作主机应写0。同理为两读”数据为10主机 则应写1。3) DS18B20 ROM编码的搜索算法在一条 单线总线”上的挂有多片DS18B20情况下,对ROM编码的搜索与 识别主要是通过 两读”数据为00时 一写”操作的 排除”作用来实现的。多次 排 除”作用后就可以使总线上只剩下唯一的一个器件仍与总线保持联系。如何排除”这需要算法的配合。下面具体介绍 DS18B20 ROM编码的搜索算法。先确立几个定义:对 两读”数据为00的ROM编码位,之后 一写”操作主 机要写的数据定义为“0(写位”所有00写位的集合定义

6、为“0写位组”那么搜 索算法所要解决的问题就是:确立一个 00写位组,确保搜索命令能够搜索到一 个唯一的ROM编码,并在完成一次搜索后对 00写位组做出更新以确保下次的 搜索命令能够搜索到一个唯一的 ROM编码并且不会搜索到已经搜索到的 ROM 编码,直到完成总线上所有的器件的 ROM编码搜索。在给出搜索算法规则前再确立几个定义:00写位组中最高ROM编码位对应 的00写位定义为 最高00写位”00写位组中邻近最高00写位的00写位定义 位 次高00写位”如果更新后的00写位组不足以搜索到一个唯一的 ROM编码, 则添加新的00写位,这个新的00写位定义位 新00写位”DS18B20 ROM编

7、码的搜索算法规则: 第一次搜索确立一个00写位组,其中所有00写位全部为0。 每次搜索后更新00写位组并从最高00写位开始更新。 00写位组更新规则:如果最高 00写位为0则改最高00写位为1,更新 完成。如果最高00写位为1,则弃去最高00写位并把次高00写位作为 新的最咼00写位。 如果出现新00写位,新00写位一律为0并作为新的最高00写位。 如果0写位组全为1则搜索所有器件的ROM编码,搜索结束。4) 单线总线上DS18B20 ROM编码的搜索与识别功能函数对一条 单线总线”上多片DS18B20 ROM编码搜索与识别具体由C51编写的 函数uchar SearchRomlD(uchar

8、 RomlDn8)来实现。函数的返回值是总线上查找 到的器件个数,总线上所有器件的 ROM 编码存入二维数组 RomIDn8 。其中 n为总线上允许挂器件的最大值。文中取16。先对程序中的几个重要变量做一写说明:_00wbit:维数组,用来存储00写位组全部内容。它的长度由总线上允许 挂器件的最大值决定。每写一个 00 写位都可以 “排除”至少一个总线上的器件, 当总线上器件数为n是,_00wbit数组的长度应为n-1。当然这是最坏情况下的 取值,很多情况下_00wbit数组的长度小于这个值,这时不用的_00wbit数组位用 2 来填充。Rom64:一维数组,临时存储 64位ROM编码。b:搜

9、索结束标志位。R1,R2:两读”数据位。程序代码如下:uchar SearchRomlD(uchar RomlD168)uchar xdata Rom64;uchar i,j,R1,R2,a,b,c,d;uchar _00wbit15=2; / 初始化 00写位组全部为填充位 2for(i=0 ,c=0;i<16;i+)Reset(); /复位所有从机writechar(0xf0); / 主机发布搜索命令for(j=0;j<64;j+)R1=readbit(); /读一位_nop_();R2=readbit(); /读该位补码_nop_();if(R1=0&&R2=

10、1)/未出现数据冲突,主机写 0Romj=0;writebit(0);else if(R1=1&&R2=0) /未出现数据冲突,主机写 1 Romj=1;writebit(1);elseif(_00wbitc=2) / 出现新 00 写位writebit(0);Romj=0;_00wbitc=0; / 新 00 写位赋值为 0c+=1;else if(_00wbitc=1)/00 写位组中 00 写位为 1,主机写 1writebit(1);Romj=1;c+=1;else if(_00wbitc=0) /00 写位组中 00 写位为 0,主机写 0writebit(0);Ro

11、mj=0;c+=1;for(j=0;j<64;j+=8) /将 64 位 ROM 编码整理成 8 字节存入 RomlDn8中for(d=0;d<8;d+)if(Romj+d&0x01)RomIDij/8>>=1; RomIDij/8|=0x80;else RomIDij/8>>=1;for(a=0,c=7;c>=0;c-) /更新 00 写位数组 if(_00wbitc=2) / 跳过 00 写位组中的填充位 continue;if(_00wbitc=0&&a=0)/ 更改最高 00 写位并跳出 _00wbitc=1; break;else if(_00wbitc=1)/ 最高 00 写位为 1if(c!=0) / 为 1 的 00 写位不为 00 写位组的最低位a+=1;记录不为00写位组的最低位且为1的连续00写位个数con ti nue;elseb=1; /00 写位组全部为 1 ,搜索结束置标志位break;else if(_00wbitc=0&&a!=0)/ 连续为 1 的 00写位后第一个为 0的 00写位 _00wbitc=1;赋次高00写位为1for(;a>0;a-)/连续弃去为 1 的最高 00写位c+=1; _00wbitc=2;b

温馨提示

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

评论

0/150

提交评论