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

📄 18b20.lst

📁 温度传感器18B20读写程序 ASM51
💻 LST
📖 第 1 页 / 共 2 页
字号:
 246   1               if(Type==SensorA)
 247   1               {
 248   2              DQ1=1;
 249   2              DQ1=0;
 250   2              _nop_();
 251   2                      _nop_();
 252   2                      _nop_();
 253   2                      _nop_();
 254   2                      _nop_();
 255   2                      _nop_();
 256   2                      _nop_();
 257   2                      _nop_();
 258   2                      _nop_();
 259   2                      _nop_();
 260   2                      _nop_();
 261   2                      _nop_();
 262   2              DQ1=1;
 263   2                      Delay(T80us);
 264   2               }
 265   1               else
 266   1               {
 267   2                      DQ2=1;
 268   2              DQ2=0;
 269   2              _nop_();  //0.5us
 270   2                      _nop_();
 271   2                      _nop_();
 272   2                      _nop_();
 273   2                      _nop_();
 274   2                      _nop_();
 275   2                      _nop_();
 276   2                      _nop_();
 277   2                      _nop_();
 278   2                      _nop_();
 279   2                      _nop_();
 280   2                      _nop_();
 281   2              DQ2=1;
 282   2                      Delay(T80us);
 283   2               }
 284   1      }
 285          //--------------------------------------------------------------------------------------------------------
             -----
 286          bit ReadTS(U8 Type)            //READ 1 BIT FROM 18B20
 287          {
 288   1              bit b;
 289   1      
C51 COMPILER V7.01  18B20                                                                  03/02/2007 19:03:03 PAGE 6   

 290   1              if(Type==SensorA)
 291   1              {
 292   2               DQ1=1;
 293   2               DQ1=0;
 294   2                       _nop_();
 295   2                       _nop_();
 296   2                       _nop_();
 297   2                       _nop_();
 298   2                       _nop_();
 299   2               DQ1=1;
 300   2                       _nop_();
 301   2                       _nop_();
 302   2                       _nop_();
 303   2                       _nop_();
 304   2               _nop_();
 305   2               b=DQ1;
 306   2               Delay(T40us);
 307   2               }
 308   1               else
 309   1               {
 310   2                       DQ2=1;
 311   2               DQ2=0;
 312   2                       _nop_();
 313   2                       _nop_();
 314   2                       _nop_();
 315   2                       _nop_();
 316   2                   _nop_();
 317   2               DQ2=1;
 318   2                       _nop_();
 319   2                       _nop_();
 320   2                       _nop_();
 321   2                       _nop_();
 322   2               _nop_();
 323   2               b=DQ2; 
 324   2               Delay(T40us);
 325   2               }
 326   1               return b;
 327   1      }
 328          //--------------------------------------------------------------------------------------------------------
             -----
 329          void WriteByteTS(U8 byte,U8 Type)       //Write one byte to 18B20
 330          {
 331   1              U8 i;
 332   1              for(i=0;i<8;i++)
 333   1              {
 334   2                      if(byte&0x01)
 335   2                              Write1TS(Type);
 336   2                      else
 337   2                      Write0TS(Type);
 338   2                      byte=byte>>1;
 339   2              }
 340   1      }
 341          //--------------------------------------------------------------------------------------------------------
             ----
 342          U8 ReadByteTS(U8 Type)                  //Read one byte from 18B20
 343          {
 344   1              U8 i,j;
 345   1              bit  b;
 346   1              j=0;
 347   1              for(i=0;i<8;i++)
 348   1                              {
 349   2                                      b=ReadTS(Type);
C51 COMPILER V7.01  18B20                                                                  03/02/2007 19:03:03 PAGE 7   

 350   2                                       if(b)
 351   2                              j+=1;
 352   2                                      j=_cror_(j,1);
 353   2                              }
 354   1       return j;
 355   1      }
 356          //--------------------------------------------------------------------------------------------------------
             ----
 357          U16 GetTempTS(U8 Type)                                  //READ 2 BYTES T
 358          {
 359   1           float Temperature;
 360   1               U8 TempL,TempH;
 361   1               U16 Temp;
 362   1      
 363   1           ResetTS(Type);               
 364   1               WriteByteTS(0xCC,Type);       
 365   1               WriteByteTS(0x44,Type);       
 366   1               Delay100ms();           
 367   1           ResetTS(Type);              
 368   1               WriteByteTS(0xCC,Type);      
 369   1               WriteByteTS(0xBE,Type);                                                                         
 370   1               TempL=ReadByteTS(Type);                                //LOW byte
 371   1               TempH=ReadByteTS(Type);                                //HIG BYTE
 372   1               Temp=((TempH & 0x0f)<<4)|((TempL & 0xf0)>>4);
 373   1               Temperature=Temp+(TempL & 0x0f)*0.0625;
 374   1               Temp=Temperature;
 375   1               Temp=Temperature*1000;
 376   1               return(Temp);
 377   1      }
 378          //=======================LCD SUBPROGRAM START=============================================================
             -====
 379          //write data
 380          void WriteDataLCM(U8 WDLCM)
 381          {
 382   1              ReadStatusLCM(); 
 383   1              LCM_Data = WDLCM;
 384   1              LCM_RS = 1;
 385   1              LCM_RW = 0;
 386   1              Delay(T60us);
 387   1              LCM_E = 1;
 388   1              Delay(T480us);
 389   1              LCM_E = 0;   
 390   1      }
 391          //---------------------------------------------------------------------------------------
 392          //write command
 393          void WriteCommandLCM(U8 WCLCM,BuysC) 
 394          {
 395   1              if (BuysC) 
 396   1                      ReadStatusLCM(); 
 397   1              LCM_Data = WCLCM;
 398   1              LCM_RS = 0;
 399   1              LCM_RW = 0; 
 400   1              Delay(T60us);
 401   1              LCM_E = 1; 
 402   1              Delay(T480us);
 403   1              LCM_E = 0;   
 404   1      }
 405          //-----------------------------------------------------------------------------------------
 406          //read status
 407          U8 ReadStatusLCM(void)
 408          {
 409   1              LCM_Data = 0xFF; 
C51 COMPILER V7.01  18B20                                                                  03/02/2007 19:03:03 PAGE 8   

 410   1              LCM_RS = 0;
 411   1              LCM_RW = 1;
 412   1              Delay(T60us);
 413   1              LCM_E = 1;
 414   1              while (LCM_Data & Busy); 
 415   1              LCM_E = 0;   
 416   1              return(LCM_Data);
 417   1      }
 418          //------------------------------------------------------------------------------------------
 419          //lcd initial
 420          void LCMInit(void) 
 421          {
 422   1              LCM_Data =0x00;
 423   1              LCM_RS = 0;
 424   1              LCM_RW = 0;
 425   1              LCM_E = 0;
 426   1              WriteCommandLCM(0x38,1); 
 427   1              WriteCommandLCM(0x38,1);
 428   1              WriteCommandLCM(0x38,1);
 429   1      
 430   1              WriteCommandLCM(0x38,1); 
 431   1              WriteCommandLCM(0x08,1); 
 432   1              WriteCommandLCM(0x01,1); 
 433   1              WriteCommandLCM(0x06,1); 
 434   1              WriteCommandLCM(0x0c,1); 
 435   1      }
 436          //----------------------------------------------------------------------------------------
 437          void DisplayOneChar(U8 X, U8 Y, U8 DData)
 438          {
 439   1              Y &= 0x1;
 440   1              X &= 0xF; 
 441   1              if (Y) 
 442   1                      X |= 0x40; 
 443   1              X |= 0x80; 
 444   1              WriteCommandLCM(X, 0); 
 445   1              WriteDataLCM(DData);
 446   1      }
 447          //-----------------------------------------------------------------------------------------
 448          void DisplayListChar(U8 X, U8 Y, U8 *DData)
 449          {
 450   1              U8 ListLength;
 451   1      
 452   1              ListLength = 0;
 453   1              Y &= 0x1;
 454   1              X &= 0xF; 
 455   1              while (ListLength<16) 
 456   1              {
 457   2                      if (X <= 0xF) 
 458   2                      {
 459   3                              DisplayOneChar(X, Y, DData[ListLength]); 
 460   3                              ListLength++;
 461   3                              X++;
 462   3                      }
 463   2              }
 464   1      }
 465          //-------------------------------------------------------------------------------------------
 466          void DisplayTemperature(U16 TempA,U16 TempB)
 467          {
 468   1              U16  cData;
 469   1      
 470   1              cData=TempA/1000;
 471   1              TempBuffer[0]=(cData/100)+0x30;
C51 COMPILER V7.01  18B20                                                                  03/02/2007 19:03:03 PAGE 9   

 472   1              TempBuffer[1]=(cData-(TempBuffer[0]-0x30)*100)/10+0x30;
 473   1              TempBuffer[2]=(cData-(TempBuffer[0]-0x30)*100-(TempBuffer[1]-0x30)*10)+0x30;
 474   1                      //0.xxxx
 475   1              TempA=TempA-cData*1000;
 476   1              TempBuffer[4]=(TempA/100)+0x30;
 477   1              TempBuffer[5]=(TempA-(TempBuffer[4]-0x30)*100)/10+0x30;
 478   1              TempBuffer[6]=TempA-(TempBuffer[4]-0x30)*100-(TempBuffer[5]-0x30)*10+0x30;
 479   1              
 480   1              cData=TempB/1000;
 481   1              TempBuffer[9]=(cData/100)+0x30;
 482   1              TempBuffer[10]=(cData-(TempBuffer[9]-0x30)*100)/10+0x30;
 483   1              TempBuffer[11]=(cData-(TempBuffer[9]-0x30)*100-(TempBuffer[10]-0x30)*10)+0x30;
 484   1                      //0.xxx
 485   1              TempB=TempB-cData*1000;
 486   1              TempBuffer[13]=(TempB/100)+0x30;
 487   1              TempBuffer[14]=(TempB-(TempBuffer[13]-0x30)*100)/10+0x30;
 488   1              TempBuffer[15]=TempB-(TempBuffer[13]-0x30)*100-(TempBuffer[14]-0x30)*10+0x30;;
 489   1      
 490   1              DisplayListChar(0, 1,TempBuffer);
 491   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1425    ----
   CONSTANT SIZE    =    119    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     17      28
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----       2
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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