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

📄 digthermo.lst

📁 基于C语言的DS18B20温度测量仪
💻 LST
字号:
C51 COMPILER V7.50   DIGTHERMO                                                             10/06/2007 20:44:46 PAGE 1   


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

line level    source

   1          #include "lcd2.h"
   2          #include "DigThermo.h"
   3           uchar tplsb,tpmsb;             // 温度值低位、高位字节
   4           float n;
   5          /* 延时t毫秒 */
   6          void delay2(uint t)
   7          {
   8   1              uint i;
   9   1              while(t--)
  10   1              {
  11   2                      /* 对于11.0592M时钟,约延时1ms */
  12   2                      for (i=0;i<125;i++)
  13   2                      {}
  14   2              }
  15   1      } 
  16          
  17          /* 产生复位脉冲初始化DS18B20 */
  18          void TxReset(void)
  19          {
  20   1              uint i;
  21   1              DQ = 0;
  22   1      
  23   1              /* 拉低约900us */
  24   1              i = 100;
  25   1              while (i>0)     i--;    
  26   1              
  27   1              DQ = 1;                         // 产生上升沿
  28   1              i = 4;
  29   1              while (i>0)     i--;
  30   1      }
  31          
  32          /* 等待应答脉冲 */
  33          void RxWait(void)
  34          {
  35   1              uint i;
  36   1              while(DQ);
  37   1              while(~DQ);                     // 检测到应答脉冲 
  38   1              i = 4;
  39   1              while (i>0)     i--;
  40   1      }
  41          
  42          /* 读取数据的一位,满足读时隙要求 */ 
  43          bit RdBit(void)
  44          {
  45   1              uint i;
  46   1              bit b;
  47   1              DQ = 0;
  48   1              i++;
  49   1              DQ = 1;
  50   1              i++;i++;                        // 延时15us以上,读时隙下降沿后15us,DS18B20输出数据才有效
  51   1              b = DQ;
  52   1              i = 8;
  53   1              while(i>0) i--;
  54   1              return (b);
  55   1      }
C51 COMPILER V7.50   DIGTHERMO                                                             10/06/2007 20:44:46 PAGE 2   

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

 118   1              WrByte(0xcc);           // skip rom 命令
 119   1              WrByte(0xbe);           // read scratchpad 命令
 120   1              tplsb = RdByte();       // 温度值低位字节(其中低4位为二进制的“小数”部分)
 121   1              tpmsb = RdByte();       // 高位值高位字节(其中高5位为符号位)
 122   1              n=((tpmsb*256)+tplsb)*0.0605;
 123   1              return(n);      
 124   1      }
 125          
 126          /* 主程序,读取的温度值最终存放在tplsb和tpmsb变量中。
 127             tplsb其中低4位为二进制的“小数”部分;tpmsb其中高
 128             5位为符号位。真正通过数码管输出时,需要进行到十进
 129             制有符号实数(包括小数部分)的转换。              */
 130          /*void main(void)
 131          {  float i ;
 132             lcd_init();
 133             lcd_wchar(0,1,'T');
 134             lcd_wchar(1,1,'E');
 135             lcd_wchar(2,1,'M');
 136             lcd_wchar(3,1,'P');
 137             lcd_wchar(4,1,0x3a);
 138             lcd_wchar(7,1,'C');
 139             do
 140                  {       
 141                          delay2(1);              // 延时1ms
 142                          convert();              // 启动温度转换,需要750ms
 143                          delay2(1000);   // 延时1s
 144                          i=RdTemp();             // 读取温度     
 145                          lcd_wdata(5,1,i);
 146                  
 147                                  
 148                  }
 149                  while(1);
 150          }*/
 151          


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