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

📄 ds18b20.lst

📁 用3310显示温度与数字钟
💻 LST
字号:
C51 COMPILER V7.06   DS18B20                                                               05/11/2008 18:49:26 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE DS18B20
OBJECT MODULE PLACED IN DS18B20.obj
COMPILER INVOKED BY: D:\Program Files\Keil\C51\BIN\C51.EXE DS18B20驱动\DS18B20.C BROWSE DEBUG OBJECTEXTEND PRINT(.\DS18B
                    -20.lst) OBJECT(DS18B20.obj)

stmt level    source

   1          //这是一个温度采集模块的驱动程序。
   2          /*
   3              |----|
   4              | DS |   DS18B20管脚排列
   5              +----+
   6              |  | |
   7              |  | |
   8              |  | |----------Vdd        
   9              |  |------------DQ-->P0.0
  10              |---------------GND
  11          */
  12          #include <config.h>
  13          
  14          //外部函数
  15          //--------------delay.c--------------------
  16          extern void delay(unsigned int delay_time);   //延时子程序
  17          //----------------------------------------
  18          
  19          //------------DS18B20控制命令-----------------------------
  20          #define T_CONVER 0x44  //开始温度转换
  21          #define T_CONFIG 0x5f  //11位转换
  22          #define T_READ 0xbe    //读暂存器
  23          #define T_WRITE 0x4e   //写暂存器
  24          #define T_ROM_JMP 0xcc  //忽略64ROM地址
  25          #define T_COPY_E2 0x48  //将温度上下限数值写到E2ROM
  26          #define T_RECALL_E2 0xb8  //将E2中存储的温度上下限数值复制到上下限寄存器中。
  27          #define T_cont  0.0625  //温度转换常数
  28          //------------------------------------------------------
  29          sbit DQ=P0^0;  //DS18B20数据输出端
  30          sbit LED=P1^5;  //LED
  31          bit REC_suc=0;  //DS18B20成功复位标志位
  32          bit T_sign;   //温度正负符号
  33          float temp=0;  //转换好的温度数值
  34          signed char temp_TH=25,temp_TL=10;  //温度上下限
  35          unsigned char t_bai,t_shi,t_ge,t_feng; //温度转换好的各个位
  36          void DS18B20_init();  //DS18B20初始化函数
  37          void DS18B20_send(unsigned char in_data); //DS18B20发送一个字节数据函数
  38          unsigned char DS18B20_read(); //从DS18B20读取一个字节函数
  39          void ReadTemperature(); //读取温度数值
  40          void temp_data_turn(float in_data); //温度转换
  41          //--------------------------------------------------------
  42          
  43          
  44          /****************************DS18B20初始化函数**************************/
  45          /*函数原型:void DS18B20_init()
  46          /*函数功能:DS18B20初始化
  47          /*输入参数:无
  48          /*输出参数:无
  49          /*调用模块:delay()
  50          /*建立时间:2005/11/14
  51          /*作者:丁霄
  52          /**********************************************************************/
  53          void DS18B20_init()
  54          {
C51 COMPILER V7.06   DS18B20                                                               05/11/2008 18:49:26 PAGE 2   

  55   1        unsigned char i=1;
  56   1        DQ=0;
  57   1        DQ=1;
  58   1        delay(20);  //延时227us
  59   1        while(REC_suc==0)
  60   1       { 
  61   2         DQ=0;
  62   2         delay(45);  //延时502us
  63   2         DQ=1;
  64   2         delay(3);  //等待DS18B20作出相应 延时40us
  65   2         while(1)
  66   2        { i=DQ;
  67   3           if(i==0)
  68   3          {
  69   4               REC_suc=1;
  70   4               delay(20);  //延时227us
  71   4               break;
  72   4              }
  73   3        }
  74   2       }
  75   1        REC_suc=0;
  76   1      }
  77          
  78          /****************************DS18B20发送函数**************************/
  79          /*函数原型:void DS18B20_send(unsigned char in_data)
  80          /*函数功能:DS18B20发送数据
  81          /*输入参数:要发送的数据
  82          /*输出参数:无
  83          /*调用模块:_cror_()
  84          /*建立时间:2005/11/14
  85          /*作者:丁霄
  86          /**********************************************************************/
  87          void DS18B20_send(unsigned char in_data)
  88          {  
  89   1         unsigned char i,out_data,k;
  90   1          out_data=in_data;
  91   1         for(i=1;i<9;i++)  //串行发送数据
  92   1         { 
  93   2          DQ=0;
  94   2              DQ=1;
  95   2              _nop_();
  96   2          _nop_();
  97   2          k=out_data&0x01;
  98   2              if(k==0x01)  //判断数据  写1
  99   2              {
 100   3               DQ=1;
 101   3          }
 102   2              else   //写0
 103   2          {
 104   3               DQ=0;
 105   3              }
 106   2               delay(5);  //延时62us
 107   2               DQ=1;
 108   2           out_data=_cror_(out_data,1);  //循环左移1位
 109   2        }
 110   1      }
 111          
 112           
 113          /**************************DS18B20读函数**************************/
 114          /*函数原型:void DS18B20_read()
 115          /*函数功能:DS18B20读数据
 116          /*输入参数:无
C51 COMPILER V7.06   DS18B20                                                               05/11/2008 18:49:26 PAGE 3   

 117          /*输出参数:读到的一字节内容
 118          /*调用模块:delay()
 119          /*建立时间:2005/11/14
 120          /*作者:丁霄
 121          /******************************************************************/
 122          unsigned char DS18B20_read()
 123          {
 124   1         unsigned char i,in_data,k;
 125   1         in_data=0;
 126   1          for(i=1;i<9;i++)  //串行发送数据
 127   1         { 
 128   2            DQ=0;
 129   2                DQ=1;
 130   2                _nop_();
 131   2                _nop_();
 132   2            k=DQ; //读DQ端
 133   2                if(k==1)  //读到的数据是1
 134   2               {
 135   3                 in_data=in_data|0x01;
 136   3               }
 137   2                else
 138   2               {
 139   3                 in_data=in_data|0x00;
 140   3               }
 141   2               delay(4);  //延时51us
 142   2               DQ=1;
 143   2               in_data=_cror_(in_data,1); //循环左移1位
 144   2         }
 145   1         return(in_data);
 146   1      }
 147             
 148          /**************************DS18B20读取温度函数**************************/
 149          /*函数原型:void ReadTemperature()
 150          /*函数功能:DS18B20读取温度转换好的数据
 151          /*输入参数:无
 152          /*输出参数:无
 153          /*调用模块:DS18B20_send(),DS18B20_send(),DS18B20_init(),DS18B20_send(),DS18B20_send(),
 154                     T_L=DS18B20_read(),T_H=DS18B20_read()
 155          /*建立时间:2005/11/15
 156          /*作者:丁霄
 157          /******************************************************************/
 158          void ReadTemperature()
 159          {
 160   1      unsigned char T_L=0;
 161   1      unsigned char T_H=0;
 162   1      unsigned char k;
 163   1      DS18B20_init();
 164   1      DS18B20_send(T_ROM_JMP); // 跳过读序号列号的操作
 165   1      DS18B20_send(T_CONVER); // 启动温度转换
 166   1      DS18B20_init();
 167   1      DS18B20_send(T_ROM_JMP); //跳过读序号列号的操作
 168   1      DS18B20_send(T_READ); //读取温度寄存器等(共可读9个寄存器) 前两个就是温度
 169   1      
 170   1      T_L=DS18B20_read();
 171   1      T_H=DS18B20_read();
 172   1      
 173   1      k=T_H&0xf8;  
 174   1      if(k==0xf8)
 175   1      T_sign=1;   //温度是负数
 176   1      else
 177   1      T_sign=0;  //温度是正数
 178   1      
C51 COMPILER V7.06   DS18B20                                                               05/11/2008 18:49:26 PAGE 4   

 179   1      T_H=T_H&0x07;
 180   1      temp=(T_H*256+T_L)*T_cont;
 181   1      }
 182          
 183          /**************************DS18B20温度转换函数**************************/
 184          /*函数原型:void temp_data_turn(float in_data)
 185          /*函数功能:DS18B20读取温度转换
 186          /*输入参数:无
 187          /*输出参数:无
 188          /*调用模块:无
 189          /*建立时间:2005/11/16
 190          /*作者:丁霄
 191          /******************************************************************/
 192          void temp_data_turn(float in_data)
 193          {
 194   1        unsigned int y; 
 195   1        in_data=in_data*10; //数值扩大10倍,精度到0.1
 196   1        t_bai=in_data/1000;
 197   1        y=(unsigned int)in_data%1000;
 198   1        t_shi=y/100;
 199   1        y=y%100;
 200   1        t_ge=y/10;
 201   1        t_feng=y%10;
 202   1      }
 203          
 204          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    380    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     10      10
   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 + -