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

📄 ds18b20.lst

📁 万年历系统
💻 LST
字号:
C51 COMPILER V7.06   DS18B20                                                               05/14/2009 00:04:42 PAGE 1   


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

stmt level    source

   1          #include <REG51.H>
   2          #include "ds18b20.h"
   3          #define uchar unsigned char
   4          #define uint  unsigned int
   5          sbit DQ=P3^0;
   6          uchar data tplsb,tpmsb;
   7          /*延时tms*/
   8          void delay(uint t)
   9          {  
  10   1          uint i;
  11   1       while(t--)
  12   1       {
  13   2         for (i=0;i<125;i++)
  14   2         {;}
  15   2         }
  16   1       }
  17          /* 产生复位脉冲初始化DS18B20 */
  18          void TxReset(void)
  19          {
  20   1        uint i;
  21   1        DQ=0;
  22   1       /* 拉低约900us */
  23   1       i=100;
  24   1       while (i>0) i--;
  25   1       DQ=1;
  26   1       i=4;
  27   1       while (i>0) i--;
  28   1       }
  29           /* 等待应答脉冲 */
  30           void RxWait (void)
  31           {
  32   1        uint i;
  33   1        while(DQ)
  34   1        while(~DQ)
  35   1        i=4;
  36   1        while (i>0) i--;
  37   1        }
  38          /* 读取数据的一位,满足读时隙要求 */ 
  39          bit RdBit(void)
  40          {
  41   1       uint i;
  42   1       bit b;
  43   1       DQ=0;
  44   1       i++;
  45   1       DQ=1;
  46   1       i++;
  47   1       i++;
  48   1       b=DQ;
  49   1       i=8;
  50   1       while(i>0) i--;
  51   1       return(b);
  52   1       }
  53           /* 读取数据的一个字节 */
  54          uchar RdByte(void)
  55          {
C51 COMPILER V7.06   DS18B20                                                               05/14/2009 00:04:42 PAGE 2   

  56   1         uchar i,j,b;
  57   1       b = 0;
  58   1       for (i=1;i<=8;i++)
  59   1       {
  60   2        j = RdBit();
  61   2        b = (j<<7)|(b>>1);
  62   2       }
  63   1       return(b);
  64   1       }
  65           /* 写数据的一个字节,满足写1和写0的时隙要求 */
  66          void WrByte(uchar b)
  67          {
  68   1       uint i;
  69   1       uchar j;
  70   1       bit btmp;
  71   1       for(j=1;j<=8;j++)
  72   1       {
  73   2        btmp = b&0x01;
  74   2        b = b>>1;
  75   2         if (btmp)
  76   2        {
  77   3         /* 写1 */
  78   3         DQ = 0;
  79   3         i++;i++; // 延时,使得15us以内拉高
  80   3         DQ = 1;
  81   3         i = 8;
  82   3         while(i>0) i--; // 整个写1时隙不低于60us 
  83   3           }
  84   2        else
  85   2        {
  86   3         /* 写0 */
  87   3         DQ = 0;   
  88   3         i = 8;
  89   3         while(i>0) i--; // 保持低在60us到120us之间
  90   3         DQ = 1;
  91   3         i++;
  92   3         i++;
  93   3        }
  94   2       }
  95   1      }
  96          
  97          /* 启动温度转换 */
  98          void convert(void)
  99          {
 100   1       TxReset();   // 产生复位脉冲,初始化DS18B20
 101   1       RxWait();   // 等待DS18B20给出应答脉冲
 102   1       delay(1);   // 延时
 103   1       WrByte(0xcc);  // skip rom 命令
 104   1       WrByte(0x44);  // convert T 命令
 105   1      }
 106          
 107          /* 读取温度值 */
 108          void RdTemp(void)
 109          {
 110   1       TxReset();   // 产生复位脉冲,初始化DS18B20 
 111   1       RxWait();   // 等待DS18B20给出应答脉冲
 112   1       delay(1);   // 延时
 113   1       WrByte(0xcc);  // skip rom 命令
 114   1       WrByte(0xbe);  // read scratchpad 命令
 115   1       tplsb = RdByte(); // 温度值低位字节(其中低4位为二进制的“小数”部分)
 116   1       tpmsb = RdByte(); // 高位值高位字节(其中高5位为符号位)
 117   1         
C51 COMPILER V7.06   DS18B20                                                               05/14/2009 00:04:42 PAGE 3   

 118   1      }
 119          void send (uchar *i)
 120          {  
 121   1         uchar temG,temD;
 122   1         temG=(tpmsb<<4)|(tplsb>>4);
 123   1         *(i)=temG/100;
 124   1         temG=temG%100;
 125   1         *(i+1)=temG/10;
 126   1         *(i+2)=temG%10;
 127   1         temD=((tplsb&0x0f)*0.0625)*10;  //1位小数部分
 128   1         *(i+3)=temD;
 129   1      }
 130          
 131            


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