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

📄 ds18b20.lst

📁 51单片机驱动的LED点阵万年历显示
💻 LST
字号:
C51 COMPILER V8.16   DS18B20                                                               12/25/2008 19:46:19 PAGE 1   


C51 COMPILER V8.16, COMPILATION OF MODULE DS18B20
OBJECT MODULE PLACED IN .\bin\ds18b20.obj
COMPILER INVOKED BY: C:\Program Files\Keil\C51\BIN\C51.EXE src\ds18b20.c ROM(COMPACT) BROWSE DEBUG OBJECTEXTEND PRINT(.\
                    -bin\ds18b20.lst) OBJECT(.\bin\ds18b20.obj)

line level    source

   1          #include<reg52.h>
   2          #include<rtx51tny.h>
   3          #include"inc/define.h"
   4          #include"inc/utility.h"
   5          #include"inc/ds18b20.h"
   6          
   7          sbit DS18B20_DQ= P1^4;  //单总线引脚
   8          
   9          extern vu8 idata week_tempert[8];
  10          
  11          
  12          
  13          /*********************************************************
  14          *将获取的当前温度设置为待显示数据
  15          *函数名称:setTempertShowData()
  16          *说明:这是一个RTX51任务,os_create_task(3)之后开始运行
  17          *********************************************************/
  18          void setTempertShowData(void ) _task_ 8
  19          {
  20   1              t_tempert tempert;
  21   1              while(1)
  22   1              {
  23   2                      getTempert(&tempert);
  24   2      
  25   2                      if(tempert.flag>0)
  26   2                              week_tempert[3]=12;
  27   2                      else 
  28   2                              week_tempert[3]=11;
  29   2                      week_tempert[4]=(tempert.tempert>>4) & 0x0F;
  30   2                      week_tempert[5]=tempert.tempert & 0x0F;
  31   2      
  32   2                      os_wait(K_TMO,20,0);
  33   2              }
  34   1      }
  35          
  36          
  37          /**********************************************************
  38          *DS1820复位及存在检测(通过存在脉冲判断有无正常工作的DS1820)
  39          *函数名称:DS1820_reset()
  40          *说明:函数返回一个位标量(0或1)flag=0存在,反之flag=1不存在
  41          **********************************************************/
  42          bit DS18B20_reset()
  43          {
  44   1              bit flag;    
  45   1              DS18B20_DQ = 0;         //拉低总线
  46   1              delay20US(30);          //延时至少480us,产生复位脉冲
  47   1              DS18B20_DQ = 1;         //释放总线
  48   1              delay20US(4);           //延时60--240微秒后对总线采样
  49   1              flag=DS18B20_DQ;
  50   1              delay20US(15);          //延时至少240微秒等待总线恢复
  51   1      
  52   1              return flag;  
  53   1      }
  54          
C51 COMPILER V8.16   DS18B20                                                               12/25/2008 19:46:19 PAGE 2   

  55          
  56          /**********************************************************
  57          *写数据到DS1820
  58          *函数名称:DS1820_inputByte()
  59          *说明:
  60          **********************************************************/
  61          void DS18B20_inputByte(u8 ibyte)
  62          {
  63   1              u8 i,delay;
  64   1              for (i=8;i>0;i--)
  65   1              {
  66   2                      DS18B20_DQ = 0;         //拉低总线,产生写信号
  67   2                      for(delay=2;delay>0;delay--) ;  //延时4us
  68   2                      DS18B20_DQ = ibyte&0x01;                //发送1位
  69   2                      delay20US(4);           //写时序至少要60us--120us
  70   2                      DS18B20_DQ = 1;         //释放总线,等待总线恢复
  71   2                      ibyte>>=1;                      //准备下一位数据的传送
  72   2              }
  73   1      }
  74          
  75          
  76          /**********************************************************
  77          *从DS1820中读出数据
  78          *函数名称:DS1820_outputByte()
  79          *说明:
  80          **********************************************************/
  81          u8 DS18B20_outputByte()
  82          {
  83   1              u8 i,delay,obyte;
  84   1              for (i=8;i>0;i--)
  85   1              {
  86   2                      obyte>>=1;
  87   2                      DS18B20_DQ = 0;         //拉低总线,产生读信号
  88   2                      for(delay=2;delay>0;delay--);   //延时4us
  89   2                      DS18B20_DQ = 1;         //释放总线,准备读数据
  90   2                      for (delay=4;delay>0;delay--);  //延时8微秒读数据
  91   2                      if (DS18B20_DQ == 1)
  92   2                      obyte |= 0x80;
  93   2                      delay20US(4);           //延时80us
  94   2                      DS18B20_DQ = 1;         //拉高总线,准备下一位数据的读取.
  95   2              }
  96   1              return obyte;//返回读到的数据
  97   1      }
  98          
  99          
 100          /**********************************************************
 101          *获取当前温度
 102          *函数名称:getTempert()
 103          *说明:
 104          **********************************************************/
 105          void getTempert(t_tempert * t)
 106          {
 107   1              u8 i;
 108   1              u8 tempert[2];
 109   1              
 110   1              DS18B20_reset();                //复位
 111   1              DS18B20_inputByte(0xcc);        //跳过ROM命令
 112   1              DS18B20_inputByte(0x44);        //温度转换命令
 113   1              os_wait(K_TMO,100,0);           //完成温度转换至少需要750ms     
 114   1              DS18B20_reset();                //复位
 115   1              DS18B20_inputByte(0xcc);        //跳过ROM命令
 116   1              DS18B20_inputByte(0xbe);        //读DS1820温度暂存器命令
C51 COMPILER V8.16   DS18B20                                                               12/25/2008 19:46:19 PAGE 3   

 117   1              for (i=0;i<2;i++)
 118   1                      tempert[i]=DS18B20_outputByte();
 119   1              DS18B20_reset();                //复位,结束读数据
 120   1                      
 121   1              if(tempert[1] & 0xF8==0)
 122   1                      (*t).flag=1;
 123   1              else
 124   1                      (*t).flag=-1;
 125   1              (*t).tempert=((tempert[1] & 0x07)<<4) + ((tempert[0] & 0xF0)>>4);
 126   1       }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    269    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----      12
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----       1
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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