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

📄 ds1820.lst

📁 DS18B20读取温度精确到小数点1位
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.50   DS1820                                                                10/30/2005 23:02:22 PAGE 1   


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

line level    source

   1          // 以下是四个DS1820温度读取程序
   2          //使用时先调用"rom()"子程序读出每个器件的序列号
   3          //再将各个序列号填入SN数组中才能读出各个温度
   4          /*************************************************************************
   5          光刻ROM中的64位序列号是出厂前被光刻好的,它可以看作是该DS18B20的地址序列码。
   6          64位光刻ROM的排列是:开始8位(28H)是产品类型标号,接着的48位是该DS18B20自
   7          身的序列号,最后8位是前面56位的循环冗余校验码(CRC=X8+X5+X4+1)。光刻ROM的
   8          作用是使每一个DS18B20都各不相同,这样就可以实现一根总线上挂接多个DS18B20的
   9          目的。********************************************************************/
  10          #include <reg51.h>
  11          #define uchar unsigned char 
  12          
  13          sbit TMDAT = P3^4;      //根据实实际情况设定
  14          uchar TMP[4];           //读取后的4个温度值,将其除以2即可得出实际温度;
  15          uchar SN[4][8]=
  16          {
  17          {0x28,0x28,0x17,0x5E,0x00,0x00,0x00,0xE9},   //1
  18          {40,162,36,94,0,0,0,6},
  19          {40,155,243,88,0,0,0,123},
  20          
  21          };              //4个器件的序列号,先读出单个序列号后填上才可以读取温度
  22          uchar f[4];             //结果是否为负温,“0”为正温,“1”为负温。            
  23          
  24          /***************延时部分*************/
  25          void dmsec (unsigned int count)                                         //
  26          {                                                                       //
  27   1              unsigned int i;                                                 //      
  28   1              while (count)                                                   //
  29   1              {                                                               //
  30   2                      i = 115;                                                //
  31   2                      while (i>0) i--;                                        //
  32   2                      count--;                                                //
  33   2          }                                                                   //
  34   1      }                                                                       //
  35          /***************发送复位*************/
  36          void tmreset (void)                                                     //
  37          {                                                                       //
  38   1              unsigned int i;                                                 //
  39   1              TMDAT = 0;                                                      //
  40   1              i = 103;                                                        //
  41   1              while (i>0) i--;                // 延时 900 uS(11.0592Mhz时)    //
  42   1              TMDAT = 1;                                                      //
  43   1              i = 4;                                                          //
  44   1              while (i>0) i--;                                                //
  45   1      }                                                                       //
  46          /***************判断DS1820是否存在的子程序。
  47          最好不要用,因为当器件不存在时将会进入死循环
  48          等待存在脉冲*******************************/
  49          void tmpre (void)                       //判断器件是否存在              //
  50          {                                                                       //
  51   1              unsigned int i;                                                 //
  52   1              while (TMDAT);                                                  //
  53   1              while (~TMDAT);                                                 //
  54   1              i = 4; while (i>0) i--;                                         //
  55   1      }                                                                       //
C51 COMPILER V7.50   DS1820                                                                10/30/2005 23:02:22 PAGE 2   

  56          /*************读一位*****************/
  57          bit tmrbit (void)                                                       //
  58          {                                                                       //  
  59   1              unsigned int i;                                                 //
  60   1              bit dat;                                                        //
  61   1              TMDAT = 0; i++;                                                 //
  62   1              TMDAT = 1; i++; i++;            //微量延时                      //
  63   1              dat = TMDAT;                                                    //
  64   1              i = 8; while (i>0) i--;         // 延时                         //
  65   1              return (dat);                                                   //
  66   1      }                                                                       //
  67          /************** 读一个字节****************/
  68          unsigned char tmrbyte (void)                                            //
  69          {                                                                       //
  70   1              unsigned char i,j,dat;                                          //
  71   1              dat = 0;                                                        //
  72   1              for (i=1;i<=8;i++)                                              //
  73   1              {                                                               //
  74   2                      j = tmrbit ();                                          //
  75   2                      dat = (j << 7) | (dat >> 1);                            //
  76   2              }                                                               //
  77   1              return (dat);                                                   //
  78   1      }                                                                       //
  79          /************写一个字节****************/
  80          void tmwbyte (unsigned char dat)                                        //
  81          {                                                                       //
  82   1              unsigned int i;                                                 //
  83   1              unsigned char j;                                                //
  84   1              bit testb;                                                      //
  85   1              for (j=1;j<=8;j++)                                              //
  86   1              {                                                               //
  87   2                      testb = dat & 0x01;                                     //
  88   2                      dat = dat >> 1;                                         //
  89   2                      if (testb)                                              //
  90   2                      {                                                       //
  91   3                              TMDAT = 0;                           // 写0     //
  92   3                              i++; i++;                                       //
  93   3                              TMDAT = 1;                                      //
  94   3                              i = 8; while (i>0) i--;                         //
  95   3                      }                                                       //
  96   2                      else                                                    //
  97   2                      {                                                       //

⌨️ 快捷键说明

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