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

📄 ds18b20.lst

📁 51edn开发板程序
💻 LST
字号:
C51 COMPILER V7.50   DS18B20                                                               06/02/2008 20:59:13 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE DS18B20
OBJECT MODULE PLACED IN DS18B20.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE DS18B20.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /******************************************************************
   2            DS18B20.c file
   3          
   4            作者:Computer-lov
   5            建立日期:2008-05-18
   6            修改日期:2008-05-18
   7            版本:V1.0
   8            版权所有,盗版必究。
   9            Copyright(C) Computer-lov 2008-2018
  10            All rights reserved
  11          ********************************************************************/
  12          
  13          #include "at89x52.h"
  14          #include "uart.h"
  15          
  16          #define DS_DQ P1_6
  17          
  18          uint8 DS18B20Rom[8];
  19          int16 Temperature;
  20          
  21          /********************************************************************
  22          函数功能:延迟2*Xms函数。
  23          入口参数:X。
  24          返    回:无。
  25          备    注:在11.0592MHz晶体下,延时约2倍Xms。
  26          ********************************************************************/
  27          void DelayX2us(uint8 x)
  28          {
  29   1       while(--x);
  30   1      }
  31          ////////////////////////End of function//////////////////////////////
  32          
  33          /********************************************************************
  34          函数功能:DS18B20函数。
  35          入口参数:无。
  36          返    回:0:复位失败;1:复位成功。
  37          备    注:复位失败可能是因为没有设备。
  38          ********************************************************************/
  39          uint8 DS18B20Reset(void)
  40          {
  41   1       DS_DQ=0;
  42   1       DelayX2us(250);
  43   1       DS_DQ=1;
  44   1       DelayX2us(26);
  45   1       if(DS_DQ)
  46   1       {
  47   2        return 0; //没有应答
  48   2       }
  49   1       else //有应答
  50   1       {
  51   2        while(!DS_DQ);  //等待应答信号完毕
  52   2       }
  53   1       return 1;
  54   1      }
  55          ////////////////////////End of function//////////////////////////////
C51 COMPILER V7.50   DS18B20                                                               06/02/2008 20:59:13 PAGE 2   

  56          
  57          /********************************************************************
  58          函数功能:往DS18B20写一字节函数。
  59          入口参数:需要写入的数据。
  60          返    回:无。
  61          备    注:无。
  62          ********************************************************************/
  63          void DS18B20WriteByte(uint8 d)
  64          {
  65   1       uint8 i;
  66   1       for(i=0;i<8;i++)
  67   1       {
  68   2        DS_DQ=0;
  69   2        DelayX2us(2);
  70   2        if(d&0x01)
  71   2        {
  72   3         DS_DQ=1;
  73   3        }
  74   2        else
  75   2        {
  76   3         DS_DQ=0;
  77   3        }
  78   2        DelayX2us(30);
  79   2        DS_DQ=1;
  80   2        d>>=1;
  81   2        DelayX2us(1);
  82   2       }
  83   1      }
  84          ////////////////////////End of function//////////////////////////////
  85          
  86          /********************************************************************
  87          函数功能:DS18B20读一字节函数。
  88          入口参数:无。
  89          返    回:读回的一字节数据。
  90          备    注:无。
  91          ********************************************************************/
  92          uint8 DS18B20ReadByte(void)
  93          {
  94   1       uint8 i;
  95   1       uint8 d;
  96   1       for(i=0;i<8;i++)
  97   1       {
  98   2        d>>=1;
  99   2        DS_DQ=0;
 100   2        DelayX2us(4);
 101   2        DS_DQ=1;
 102   2        DelayX2us(4);
 103   2        if(DS_DQ)
 104   2        {
 105   3         d+=0x80;
 106   3        }
 107   2        DelayX2us(20);
 108   2       }
 109   1       return d;
 110   1      }
 111          ////////////////////////End of function//////////////////////////////
 112          
 113          /********************************************************************
 114          函数功能:读取DS18B20的64bit ROM函数。
 115          入口参数:无。
 116          返    回:无。
 117          备    注:结果保存在全局变量DS18B20Rom数组中。
C51 COMPILER V7.50   DS18B20                                                               06/02/2008 20:59:13 PAGE 3   

 118          ********************************************************************/
 119          void DS18B20ReadRom(void)
 120          {
 121   1       uint8 i;
 122   1       
 123   1       EA=0;
 124   1      
 125   1       if(!DS18B20Reset()) //复位失败
 126   1       {
 127   2        EA=1;
 128   2        Prints("\r\nDS18B20 Reset failed. Maybe there no DS18B20 device.\r\n");
 129   2        return;
 130   2       }
 131   1       
 132   1       DS18B20WriteByte(0x33);
 133   1       for(i=0;i<8;i++)
 134   1       {
 135   2        DS18B20Rom[7-i]=DS18B20ReadByte();
 136   2       }
 137   1       EA=1;
 138   1      }
 139          ////////////////////////End of function//////////////////////////////
 140          
 141          /********************************************************************
 142          函数功能:写DS18B20Scratchpad函数。
 143          入口参数:无。
 144          返    回:无。
 145          备    注:设置为12位分辨率。
 146          ********************************************************************/
 147          void DS18B20WriteScratchpad(void)
 148          {
 149   1       EA=0;
 150   1      
 151   1       if(!DS18B20Reset()) //复位失败
 152   1       {
 153   2        EA=1;
 154   2        return;
 155   2       }
 156   1       DS18B20WriteByte(0xCC); //Skip ROM
 157   1       DS18B20WriteByte(0x4E); //Write Scratchpad command
 158   1       DS18B20WriteByte(0x00); //TH
 159   1       DS18B20WriteByte(0x00); //TL
 160   1       DS18B20WriteByte(0x7F); //12位分辨率
 161   1       
 162   1       EA=1;
 163   1      }
 164          ////////////////////////End of function//////////////////////////////
 165          
 166          /********************************************************************
 167          函数功能:读DS18B20 Scratchpad函数。
 168          入口参数:无。
 169          返    回:无。
 170          备    注:读出温度值保存在全局变量Temperature中。
 171          ********************************************************************/
 172          void DS18B20ReadScratchpad(void)
 173          {
 174   1       EA=0;
 175   1      
 176   1       if(!DS18B20Reset()) //复位失败
 177   1       {
 178   2        EA=1;
 179   2        return;
C51 COMPILER V7.50   DS18B20                                                               06/02/2008 20:59:13 PAGE 4   

 180   2       }
 181   1       DS18B20WriteByte(0xCC); //Skip ROM
 182   1       DS18B20WriteByte(0xBE); //Read Scratchpad command
 183   1       Temperature=DS18B20ReadByte(); //TEMPERATURE LSB
 184   1       Temperature|=((uint16)(DS18B20ReadByte()))<<8; //TEMPERATURE MSB
 185   1       
 186   1       EA=1;
 187   1      }
 188          ////////////////////////End of function//////////////////////////////
 189          
 190          /********************************************************************
 191          函数功能:启动DS18B20转换函数。
 192          入口参数:无。
 193          返    回:无。
 194          备    注:无。
 195          ********************************************************************/
 196          void DS18B20ConvertT(void)
 197          {
 198   1       EA=0;
 199   1       if(!DS18B20Reset()) //复位失败
 200   1       {
 201   2        EA=1;
 202   2        return;
 203   2       }
 204   1              DS18B20WriteByte(0xCC); //Skip ROM
 205   1       DS18B20WriteByte(0x44); //ConvertT command
 206   1       EA=1; 
 207   1      }
 208          ////////////////////////End of function//////////////////////////////
 209          
 210          /********************************************************************
 211          函数功能:DS18B20初始化函数。
 212          入口参数:无。
 213          返    回:无。
 214          备    注:读取ROM,设置12位分辨率。
 215          ********************************************************************/
 216          void DS18B20Init(void)
 217          {
 218   1       DS18B20ReadRom(); //读ID号
 219   1       DS18B20WriteScratchpad(); //
 220   1       DS18B20ConvertT();
 221   1      }
 222          ////////////////////////End of function//////////////////////////////


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    266    ----
   CONSTANT SIZE    =     57    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     10    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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