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

📄 ds18b20.lst

📁 Ds18b20+Fyd_12864的源程序
💻 LST
字号:
C51 COMPILER V8.02   DS18B20                                                               04/24/2007 17:29:57 PAGE 1   


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

line level    source

   1          #include "main.h"
   2          //#include "reg52.h"
   3          
   4          unsigned char Temperature_Lsm;
   5          unsigned char Temperature_Msm;
   6          sbit P1_0=P1^0;
   7          float  Temperature_Buffer;                              // 温度值的变量;
   8          unsigned char Flag=0;                                    // 结果为负和正的标志位。              
   9          
  10          
  11          
  12          void Delay (unsigned int count)
  13          {                                                       
  14   1          unsigned int i;     
  15   1          while (count)       
  16   1          {
  17   2              i =200;
  18   2              while (i>0)
  19   2                       i--;
  20   2              count--;
  21   2          }
  22   1      }
  23          
  24          
  25          
  26          float Data_Process(unsigned char H_Temperature,unsigned char L_Temperature)
  27          {
  28   1              unsigned char i;
  29   1              unsigned char Temper;
  30   1              float Buffer_Float=0.0;
  31   1      
  32   1              Flag=H_Temperature&0x08;                        //若最高位为1则为负温
  33   1          if(Flag)
  34   1          {
  35   2                 H_Temperature=~H_Temperature+1;        //如果为负温则取原码 /*采集的数据是用补码表示的*/
  36   2             L_Temperature=~L_Temperature+1;    //如果为负温则取原码  /*采集的数据是用补码表示的*/
  37   2               }                            
  38   1              else
  39   1              {
  40   2               H_Temperature=H_Temperature;     //如果为正温则保持
  41   2           L_Temperature=L_Temperature;         //如果为正温则保持
  42   2               }
  43   1         Temper=L_Temperature;
  44   1      
  45   1                for(i=0;i<4;i++)
  46   1              {
  47   2                 if(Temper&0x01)
  48   2                  {
  49   3                    Buffer_Float=Buffer_Float+(1.0/(1<<(4-i))); //计算小数值
  50   3                                Temper>>=1;
  51   3                   }
  52   2                 else
  53   2                    Temper>>=1;
  54   2          
  55   2               }
C51 COMPILER V8.02   DS18B20                                                               04/24/2007 17:29:57 PAGE 2   

  56   1               L_Temperature>>=4;                             //高四位的值移道小数位去
  57   1               H_Temperature=((H_Temperature<<4)&0x7f); //高字节的数据作移四位并把符号位清零
  58   1                                                                                                //以便与低字节的数据进行或操作
  59   1               Buffer_Float=(H_Temperature|L_Temperature)+Buffer_Float;   //最后的温度值
  60   1      
  61   1          return (Buffer_Float);
  62   1      
  63   1         }
  64          
  65          
  66          void Temperature_Reset(void)                              // 发送复位和初始化
  67          {
  68   1          unsigned int i;
  69   1          P1_0 = 0;   
  70   1          i = 103;
  71   1          while (i>0) 
  72   1              i--;                                            // 延时
  73   1          P1_0 = 1;   
  74   1          i = 4;      
  75   1          while (i>0)
  76   1               i--;   
  77   1      }
  78          
  79          bit Temperature_Readbit(void)                           // 读取数据的一位
  80          { 
  81   1          unsigned int i;
  82   1          bit dat;
  83   1          P1_0 = 0;
  84   1               i++;   
  85   1          P1_0 = 1; 
  86   1              i++; 
  87   1              i++;                                    //延时  
  88   1          dat = P1_0; 
  89   1          i = 8;
  90   1               while (i>0)
  91   1                i--;                                  // 延时
  92   1          return (dat);
  93   1      }   
  94          
  95          unsigned char Temperature_Readchar(void)                       //读一个字节
  96          {
  97   1          unsigned char i,j,dat;      
  98   1          dat = 0;    
  99   1          for (i=1;i<=8;i++)
 100   1          {
 101   2              j =Temperature_Readbit();       
 102   2              dat = (j << 7) | (dat >> 1);    
 103   2          }
 104   1          return (dat);
 105   1      }   
 106          
 107          void Temperature_Write(unsigned char dat)                   //写一个字节
 108          {   
 109   1          unsigned int i;
 110   1          unsigned char j;
 111   1          bit testb;  
 112   1          for (j=1;j<=8;j++)
 113   1          {   
 114   2              testb = dat & 0x01;
 115   2              dat = dat >> 1; 
 116   2              if (testb)
 117   2              {       
C51 COMPILER V8.02   DS18B20                                                               04/24/2007 17:29:57 PAGE 3   

 118   3                  P1_0 = 0;                                   // 写0 
 119   3                  i++; 
 120   3                              i++;  
 121   3                  P1_0 = 1;   
 122   3                  i = 8; 
 123   3                              while (i>0)
 124   3                              i--; 
 125   3              }
 126   2              else    
 127   2              {
 128   3                  P1_0 = 0;                                   // 写0 
 129   3                  i = 8;
 130   3                               while (i>0)
 131   3                                i--; 
 132   3                  P1_0 = 1;
 133   3                  i++;
 134   3                               i++;  
 135   3              }
 136   2          }
 137   1      }
 138          
 139          void Temperature_Change(void)                            // ds1820 开始转换
 140          {  
 141   1          Temperature_Reset();                                        // 复位
 142   1          //tmpre ();                                 // 等待存在脉冲 
 143   1          Delay (1);                                          // 延时
 144   1          Temperature_Write(0xcc);                            // 跳过序列号命令
 145   1          Temperature_Write(0x44);                        // 发转换命令 44H,  
 146   1      }
 147          
 148          void Read_Temperature(void)                                     // 读取温度
 149          { 
 150   1          Temperature_Reset();                                        // 复位
 151   1          Delay (1);                                                  // 延时
 152   1          Temperature_Write(0xcc);                        // 跳过序列号命令
 153   1          Temperature_Write(0xbe);                            // 发送读取命令
 154   1          Temperature_Lsm= Temperature_Readchar();        // 读取低位温度     
 155   1          Temperature_Msm= Temperature_Readchar();            //读取高位温度
 156   1              Temperature_Buffer=Data_Process(Temperature_Msm,Temperature_Lsm);  //进行整数和小数的处理       
 157   1      }
 158          
 159          


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