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

📄 18b20.lst

📁 51单片机的经典应用
💻 LST
字号:
C51 COMPILER V8.02   18B20                                                                 01/11/2009 12:47:15 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE 18B20
OBJECT MODULE PLACED IN 18b20.OBJ
COMPILER INVOKED BY: D:\keil\C51\BIN\C51.EXE 18b20.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include <reg52.h>              // 引用标准库的头文件
   2          #include "18b20.h"
   3          #include "1602.h"
   4          
   5          /* 延时t毫秒 */
   6          void delay(uchar t)
   7          {
   8   1              uchar i;
   9   1              while(t--)
  10   1              {
  11   2                      for (i=0;i<125;i++);
  12   2              }
  13   1      } 
  14          
  15          /* 产生复位脉冲初始化DS18B20 */
  16          void TxReset(void)
  17          {
  18   1              uint i;
  19   1              DQ = 0;
  20   1      
  21   1              /* 拉低约900us */
  22   1              i = 100;
  23   1              while (i>0)     i--;    
  24   1              
  25   1              DQ = 1;                         // 产生上升沿
  26   1              i = 4;
  27   1              while (i>0)     i--;
  28   1      }
  29          
  30          /* 等待应答脉冲 */
  31          void RxWait(void)
  32          {
  33   1              uint i;
  34   1              while(DQ);
  35   1              while(~DQ);                     // 检测到应答脉冲 
  36   1              i = 4;
  37   1              while (i>0)     i--;
  38   1      }
  39          
  40          /* 读取数据的一位,满足读时隙要求 */ 
  41          bit RdBit(void)
  42          {
  43   1              uint i;
  44   1              bit b;
  45   1              DQ = 0;
  46   1              i++;
  47   1              DQ = 1;
  48   1              i++;i++;                        // 延时15us以上,读时隙下降沿后15us,DS18B20输出数据才有效
  49   1              b = DQ;
  50   1              i = 8;
  51   1              while(i>0) i--;
  52   1              return (b);
  53   1      }
  54          
  55          /* 读取数据的一个字节 */
C51 COMPILER V8.02   18B20                                                                 01/11/2009 12:47:15 PAGE 2   

  56          uchar RdByte(void)
  57          {
  58   1              uchar i,j,b;
  59   1              b = 0;
  60   1              for (i=1;i<=8;i++)
  61   1              {
  62   2                      j = RdBit();
  63   2                      b = (j<<7)|(b>>1);
  64   2              }
  65   1              return(b);
  66   1      }
  67          
  68          /* 写数据的一个字节,满足写1和写0的时隙要求 */
  69          void WrByte(uchar b)
  70          {
  71   1              uint i;
  72   1              uchar j;
  73   1              bit btmp;
  74   1              for(j=1;j<=8;j++)
  75   1              {
  76   2                      btmp = b&0x01;
  77   2                      b = b>>1;               // 取下一位(由低位向高位)
  78   2                      if (btmp)
  79   2                      {
  80   3                              /* 写1 */
  81   3                              DQ = 0;
  82   3                              i++;i++;        // 延时,使得15us以内拉高
  83   3                              DQ = 1;
  84   3                              i = 8;
  85   3                              while(i>0) i--; // 整个写1时隙不低于60us 
  86   3                      }
  87   2                      else
  88   2                      {
  89   3                              /* 写0 */
  90   3                              DQ = 0;                 
  91   3                              i = 8;
  92   3                              while(i>0) i--; // 保持低在60us到120us之间
  93   3                              DQ = 1;
  94   3                              i++;
  95   3                              i++;
  96   3                      }
  97   2              }
  98   1      }
  99          
 100          /* 启动温度转换 */
 101          void convert(void)
 102          {
 103   1              TxReset();                      // 产生复位脉冲,初始化DS18B20
 104   1              RxWait();                       // 等待DS18B20给出应答脉冲
 105   1              delay(1);                       // 延时
 106   1              WrByte(0xcc);           // skip rom 命令
 107   1              WrByte(0x44);           // convert T 命令
 108   1      }
 109          
 110          uint get_temp(void)
 111          {
 112   1              uint tmp = 0;
 113   1              
 114   1              delay(1);               // 延时1ms
 115   1              convert();              // 启动温度转换,需要750ms
 116   1              delay(250);
 117   1              delay(250);
C51 COMPILER V8.02   18B20                                                                 01/11/2009 12:47:15 PAGE 3   

 118   1              delay(250);        // 延时750ms
 119   1              //return RdTemp();              // 读取温度     
 120   1              
 121   1              TxReset();                      // 产生复位脉冲,初始化DS18B20 
 122   1              RxWait();                       // 等待DS18B20给出应答脉冲
 123   1              delay(1);                       // 延时
 124   1              WrByte(0xcc);           // skip rom 命令
 125   1              WrByte(0xbe);           // read scratchpad 命令
 126   1              tmp  = RdByte();                // 温度值低位字节(其中低4位为二进制的“小数”部分)
 127   1              tmp += RdByte()<<8;     // 高位值高位字节(其中高5位为符号位
 128   1              return tmp;             
 129   1      }
 130          
 131          void main(void)
 132          {
 133   1              LcdInit();
 134   1              
 135   1              while(1)
 136   1              {
 137   2                      uint tmp = 0;
 138   2                      uchar t = 0;
 139   2                      delay(250);
 140   2                      delay(250);
 141   2                      delay(250);
 142   2                      delay(250);
 143   2                      tmp = get_temp();
 144   2                      t = tmp>>4;
 145   2                      DisChar();              
*** WARNING C209 IN LINE 145 OF 18B20.C: '_DisChar': too few actual parameters
 146   2              }
 147   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    329    ----
   CONSTANT SIZE    =     10    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----       3
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----       2
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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