⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ds18b20.lst

📁 这是广西大学生设计大赛的源码
💻 LST
📖 第 1 页 / 共 2 页
字号:
 244   2       }
 245   1       EA = 1;
 246   1      }
 247          
 248          
 249          BYTE owbReadByte(void)
 250          {
 251   1       BYTE i,byte;
 252   1       EA = 0;
 253   1       byte = 0;
 254   1       for (i=0;i<8;i++)
 255   1       {
 256   2        byte>>=1;
 257   2        if (owbReadBit()) byte|=0x80;
 258   2       }
 259   1       EA = 1;
 260   1       return byte;
 261   1      }
 262          
 263           
 264          
 265          //////////////////////////////////////////////////////////////////
 266          //               搜索操作
 267          
 268          
 269          #define OWBS_AND_0 0x00
 270          #define OWBS_AND_1 0x04
 271          #define OWBS_NAN_0 0x00
 272          #define OWBS_NAN_1 0x02
 273          #define OWBS_SER_0 0x00
 274          #define OWBS_SER_1 0x01
 275          
 276          
 277          BIT owbGetRomBit(OWBROM * pRom, BYTE nBit)
 278          {
 279   1       // 低位在先!
 280   1       nBit %= 64;
 281   1       return (((pRom->b[nBit / 8]) >> (nBit % 8)) & 0x01);
 282   1      }
 283          
 284          void owbSetRomBit(OWBROM * pRom, BYTE nBit)
 285          {
 286   1       // 低位在先!
 287   1       BYTE mask = 1;
 288   1       nBit %= 64;
 289   1       mask <<= (nBit % 8);
 290   1       (pRom->b[nBit / 8]) |= mask;
 291   1      }
 292          
 293          void owbClrRomBit(OWBROM * pRom, BYTE nBit)
 294          {
 295   1       // 低位在先!
 296   1       BYTE mask = 1;
 297   1       nBit %= 64;
 298   1       mask <<= (nBit % 8);
 299   1       (pRom->b[nBit / 8]) &= (~mask);
 300   1      }
 301          
 302          
 303          BIT owbIncRom(OWBROM * pRom, BYTE nBit)
C51 COMPILER V8.02   DS18B20                                                               04/26/2008 21:37:29 PAGE 6   

 304          // return 1 = 溢出 (将设 pRom = '111...111')
 305          // nBit += '1'(并且可向前进位), all after nBit setted '0'
 306          {
 307   1       char i;
 308   1       BIT c;
 309   1      
 310   1       c = 1;
 311   1       nBit %= 64;
 312   1      
 313   1       for (i=nBit; i>=0; i--)
 314   1       {
 315   2        if ( owbGetRomBit(pRom,i) )
 316   2        {
 317   3         if (c)
 318   3         {
 319   4      //    c = 1;
 320   4          owbClrRomBit(pRom,i);
 321   4         }
 322   3         else
 323   3         {
 324   4      //    c = 0;
 325   4      //    owbSetRomBit(pRom,i);
 326   4         }
 327   3        }
 328   2        else
 329   2        {
 330   3         if (c)
 331   3         {
 332   4          c = 0;
 333   4          owbSetRomBit(pRom,i);
 334   4         }
 335   3         else
 336   3         {
 337   4      //    c = 0;
 338   4      //    owbClrRomBit(pRom,i);
 339   4         }
 340   3        }
 341   2       }
 342   1      
 343   1       if (c)
 344   1       {
 345   2        // 溢出
 346   2        for (i=0; i<8; i++) pRom->b[i]=0xff;
 347   2        return 1;
 348   2       }
 349   1      
 350   1       for (i=nBit+1; i<64; i++)
 351   1       {
 352   2        owbClrRomBit(pRom,i);
 353   2       }
 354   1      
 355   1       return 0;
 356   1      }
 357          
 358          
 359          void owbSetSearchEnd(OWBROM * pRomWant)
 360          {
 361   1       BYTE dp;
 362   1       for (dp=0;dp<8;dp++) pRomWant->b[dp] = 0xff;
 363   1      }
 364          
 365          
C51 COMPILER V8.02   DS18B20                                                               04/26/2008 21:37:29 PAGE 7   

 366          BOOL owbIsSearchEnd(OWBROM * pRomWant)
 367          {
 368   1       //检测是否已搜索结束
 369   1       BYTE dp,status = 0xff;
 370   1       for (dp=0;dp<8;dp++) status &= pRomWant->b[dp];
 371   1      
 372   1       if (status == 0xff) return TRUE;
 373   1       return FALSE;
 374   1      }
 375          
 376          BOOL owbSearchPath(OWBROM * pRomWant, BYTE cmd)
 377          {
 378   1       BYTE dp,status;
 379   1      
 380   1       owbInit();
 381   1       owbWriteByte( (cmd==0xF0) ? 0xF0 : 0xEC );
 382   1      
 383   1       EA = 0;
 384   1       dp=0;
 385   1       while (dp < 64)
 386   1       {
 387   2        status = 0;
 388   2        if ( owbReadBit() ) status |= OWBS_AND_1;
 389   2        if ( owbReadBit() ) status |= OWBS_NAN_1;
 390   2        if ( owbGetRomBit(pRomWant,dp) ) status |= OWBS_SER_1;
 391   2      
 392   2        switch (status)
 393   2        {
 394   3        case (OWBS_AND_0 | OWBS_NAN_0 | OWBS_SER_0):
 395   3         owbWriteBit(0);
 396   3         break;
 397   3        case (OWBS_AND_0 | OWBS_NAN_0 | OWBS_SER_1):
 398   3         owbWriteBit(1);
 399   3         break;
 400   3        case (OWBS_AND_0 | OWBS_NAN_1 | OWBS_SER_0):
 401   3         owbWriteBit(0);
 402   3         break;
 403   3        case (OWBS_AND_0 | OWBS_NAN_1 | OWBS_SER_1): //进位重搜
 404   3         owbIncRom(pRomWant,dp);
 405   3         dp = 200;
 406   3         break;
 407   3        case (OWBS_AND_1 | OWBS_NAN_0 | OWBS_SER_0): //改为搜'1'
 408   3         owbIncRom(pRomWant,dp);
 409   3         owbWriteBit(1);
 410   3         break;
 411   3        case (OWBS_AND_1 | OWBS_NAN_0 | OWBS_SER_1):
 412   3         owbWriteBit(1);
 413   3         break;
 414   3        case (OWBS_AND_1 | OWBS_NAN_1 | OWBS_SER_0): //无器件
 415   3        case (OWBS_AND_1 | OWBS_NAN_1 | OWBS_SER_1): //无器件
 416   3        default:
 417   3         dp = 200;
 418   3         owbSetSearchEnd(pRomWant);
 419   3        }
 420   2      
 421   2        dp++;
 422   2       }//while end
 423   1       EA = 1;
 424   1      
 425   1       if (dp == 64) // find out a device
 426   1       {
 427   2        owb_SearchDeviceROM = *pRomWant;
C51 COMPILER V8.02   DS18B20                                                               04/26/2008 21:37:29 PAGE 8   

 428   2        owb_SearchDeviceIndex++;
 429   2        owbDeviceInit(TRUE);
 430   2        owbIncRom( pRomWant,63 );
 431   2        return TRUE;
 432   2       }
 433   1      
 434   1       return FALSE;
 435   1      }
 436          
 437          void owbPreSearchDevices(OWBROM * pRomWant)
 438          {
 439   1       BYTE i;
 440   1       for (i=0;i<8;i++) pRomWant->b[i] = 0;
 441   1       owb_SearchDeviceIndex = 0xff;
 442   1      }
 443          
 444          void owbUnpreSearchDevices(void)
 445          {
 446   1       owb_nCntDevice = owb_SearchDeviceIndex + 1;
 447   1      }
 448          
 449          
 450          BYTE owbCountDevices(void)
 451          {
 452   1       return owb_nCntDevice;
 453   1      }
 454          
 455          BYTE owbGetCacheIndex(void)
 456          {
 457   1       return owb_CacheDeviceIndex;
 458   1      }
 459          
 460          BYTE owbGetSearchIndex(void)
 461          {
 462   1       return owb_SearchDeviceIndex;
 463   1      }
 464          
 465          void owbCacheSearch(void)
 466          {
 467   1       owb_CacheDeviceIndex = owb_SearchDeviceIndex;
 468   1       owb_CacheDeviceROM = owb_SearchDeviceROM;
 469   1      }
 470          
 471          BYTE owbGetCacheROM(BYTE i)
 472          {
 473   1       return owb_CacheDeviceROM.b[i & 0x07];
 474   1      }
 475          
 476          BYTE owbGetSearchROM(BYTE i)
 477          {
 478   1       return owb_SearchDeviceROM.b[i & 0x07];
 479   1      }
 480          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1124    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----      36
   IDATA SIZE       =     19    ----
C51 COMPILER V8.02   DS18B20                                                               04/26/2008 21:37:29 PAGE 9   

   BIT SIZE         =   ----       9
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -