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

📄 digthermo.lst

📁 单片机C应用程序实例精讲.rar
💻 LST
字号:
C51 COMPILER V7.02b   DIGTHERMO                                                            09/03/2005 09:44:34 PAGE 1   


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

stmt level    source

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

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

 118          {
 119   1              TxReset();                      // 产生复位脉冲,初始化DS18B20 
 120   1              RxWait();                       // 等待DS18B20给出应答脉冲
 121   1              delay(1);                       // 延时
 122   1              WrByte(0xcc);           // skip rom 命令
 123   1              WrByte(0xbe);           // read scratchpad 命令
 124   1              tplsb = RdByte();       // 温度值低位字节(其中低4位为二进制的“小数”部分)
 125   1              tpmsb = RdByte();       // 高位值高位字节(其中高5位为符号位)          
 126   1      }
 127          
 128          /* 主程序,读取的温度值最终存放在tplsb和tpmsb变量中。
 129             tplsb其中低4位为二进制的“小数”部分;tpmsb其中高
 130             5位为符号位。真正通过数码管输出时,需要进行到十进
 131             制有符号实数(包括小数部分)的转换。              */
 132          void main(void)
 133          {
 134   1              do
 135   1              {       
 136   2                      delay(1);               // 延时1ms
 137   2                      convert();              // 启动温度转换,需要750ms
 138   2                      delay(1000);    // 延时1s
 139   2                      RdTemp();               // 读取温度                     
 140   2              }
 141   1              while(1);
 142   1      }
 143          


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