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

📄 ds18b20.lst

📁 这是一个用keil-51编写的C51程序
💻 LST
字号:
C51 COMPILER V8.01   DS18B20                                                               04/19/2008 17:30:19 PAGE 1   


C51 COMPILER V8.01, COMPILATION OF MODULE DS18B20
OBJECT MODULE PLACED IN DS18B20.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE DS18B20.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include<reg52.h>
   2          #include<stdio.h>
   3          sbit TMDAT=P3^2;                                                                //DS18B20 的数据输入/输出脚DQ,根据情况设定
   4          bit fg=1;                                                                               //温度正负标志unsigned char Data[4]={0};
   5          void dmsec(unsigned int count);
   6          void tmreset (void);    
   7          unsigned char tmrbyte (void);
   8          void tmwbyte(unsigned char dat);
   9          void tmstart (void);
  10          void tmrtemp (void);
  11          void DS18B20PRO(void);
  12          
  13          extern unsigned char Data[4]={0};
  14          /***********************************************************************************************/
  15          
  16          void dmsec(unsigned int count)                                  //延时部分
  17          {
  18   1              unsigned char i;
  19   1              while(count--)
  20   1              {
  21   2                      for(i=0;i<115;i++);
  22   2              }
  23   1      }
  24          
  25          /*************************************************************************************************/
  26          void tmreset (void)                                                     //发送复位
  27          {
  28   1              unsigned char i;
  29   1              TMDAT=0; 
  30   1              for(i=0;i<103;i++);
  31   1              TMDAT=1; 
  32   1              for(i=0;i<4;i++);
  33   1      }
  34          bit tmrbit(void)                                                                //读一位//
  35          {
  36   1              unsigned int i;
  37   1              bit dat;
  38   1              TMDAT=0;
  39   1              i++;
  40   1              TMDAT=1;
  41   1              i++;i++;                                                                        //微量延时//
  42   1              dat=TMDAT;
  43   1              for(i=0;i<8;i++);
  44   1              return(dat);
  45   1      }
  46          
  47          /************************************************************************************************/
  48          unsigned char tmrbyte (void)                                    //读一个字节
  49          {
  50   1              unsigned char i,j,dat;
  51   1              dat=0;
  52   1              for(i=1;i<=8;i++)
  53   1              {
  54   2                      j=tmrbit();
  55   2                      dat=(j<<7)|(dat>>1);
C51 COMPILER V8.01   DS18B20                                                               04/19/2008 17:30:19 PAGE 2   

  56   2              }
  57   1              return(dat);
  58   1      }
  59          
  60          
  61          void tmwbyte(unsigned char dat)                                 //写一个字节
  62          {
  63   1              unsigned char j,i;
  64   1              bit testb;
  65   1              for(j=1;j<=8;j++)
  66   1              { 
  67   2                      testb=dat&0x01;
  68   2                      dat=dat>>1;
  69   2                      if(testb)
  70   2                      { 
  71   3                              TMDAT=0;                                                        //写0
  72   3                              i++;i++;
  73   3                              TMDAT=1;
  74   3                              for(i=0;i<8;i++); 
  75   3                      }
  76   2                      else
  77   2                      { 
  78   3                              TMDAT=0;                                                        //写0
  79   3                              for(i=0;i<8;i++);
  80   3                              TMDAT = 1;
  81   3                              i++;i++;
  82   3                      }
  83   2              }
  84   1      }
  85          
  86          /**********************************************************************************************/
  87          void tmstart (void)                                                     //发送ds1820 开始转换
  88          { 
  89   1              tmreset();                                                                      //复位
  90   1              dmsec(1);                                                                       //延时
  91   1              tmwbyte(0xcc);                                                          //跳过序列号命令
  92   1              tmwbyte(0x44);                                                          //发转换命令44H,
  93   1      }
  94          
  95          /************************************************************************************************/
  96          void tmrtemp (void)                                                     //读取温度
  97          {
  98   1        
  99   1              unsigned char a,b;
 100   1              //unsigned char x,y,z;
 101   1              tmreset ();                                                             //复位
 102   1              dmsec (1);                                                                      //延时
 103   1              tmwbyte(0xcc);                                                          //跳过序列号命令
 104   1              tmwbyte(0xbe);                                                          //发送读取命令
 105   1              a=tmrbyte ();                                                           //读取低位温度
 106   1              b=tmrbyte ();                                                           //读取高位温度
 107   1              if(b>0x7f)                                                                      //最高位为1 时温度是负
 108   1              {
 109   2                      a=~a;b=~b+1;                                                    //补码转换,取反加一
 110   2                      fg=0;                                                                   //读取温度为负时fg=0
 111   2              }
 112   1              Data[0]=(a/16+b*16)/10;                                         //整数十位
 113   1              Data[1]=(a/16+b*16)%10;                                         //整数个位
 114   1              Data[2]=(a&0x0f)*10/16;                                         //小数第一位
 115   1              Data[3]=(a&0x0f)*100/16%10;                                     //小数第二位
 116   1              /*x=a>>4;
 117   1              y=b<<4;
C51 COMPILER V8.01   DS18B20                                                               04/19/2008 17:30:19 PAGE 3   

 118   1              z=x|y;
 119   1              Data[0]=(z/0x0a+0x30)/10;
 120   1              Data[1]=(z%0x0a+0x30)%10;
 121   1              Data[2]=(a&0x0f)*10/16;   */
 122   1      
 123   1      }
 124          
 125          
 126          /***********************************************************************************************/
 127          void DS18B20PRO(void)
 128          { 
 129   1              tmstart();
 130   1              dmsec(5);                                                                       //如果是不断地读取的话可以不延时//
 131   1              tmrtemp();                                                                      //读取温度,执行完毕温度将存于TMP 中//
 132   1      }
 133          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    265    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      4    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      1       2
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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