·上一文章:dsPIC3F3013的CAN息线数据采集系统
·下一文章:复杂路线下机器人的三点三轮寻迹系统
3 算法的C51实现
对一条“单线总线”上多片DS18820的ROM编码搜索与识别,具体由C51编写的函数uchar SearchRomID(uchar RomID[n][8])来实现。函数的返回值是总线上查找到的器件个数,总线上所有器件的ROM编码存入二维数组RomID[n][8]。其中n为总线上允许挂器件的最大值,这里取16。
首先对程序中的几个重要变量做一些说明:
_00wbit:一维数组,用来存储00写位组全部内容。它的长度由总线上允许挂接器件的最大值决定。每写一个00写位都可以“排除”至少一个总线上的器件,当总线上器件数为n时,_00wbit数组的长度应为n-1。当然这是最坏情况下的取值,很多情况下_00wbit数组的长度小于这个值,这时不用的 _00wbit数组位用2来填充。
Rom:一维数组,临时存储64位ROM编码。
b:搜索结束标志位。
R1、R2:“两读”数据位。
编者注:程序略。
结 语
本文提出了一种对挂接在同一条“单线总线”上的多片DS18B20 ROM编码的搜索算法,并给出了具体的C51实现方法,经验证完全可行。由于该算法可自动识别总线上的器件个数,因此实际运用中,在总线上添加和删除器件都十分灵活,这为多点测温带来了很大的方便。该算法也适用于其他“单线总线”器件。