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

📄 ds18b20_driver.lst

📁 该程序是基于c8051f020的平台
💻 LST
字号:
C51 COMPILER V8.02   DS18B20_DRIVER                                                        09/13/2007 16:35:02 PAGE 1   


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

line level    source

   1          #define  DS18B20_Driver
   2          #include <DS18B20_Driver.h>
   3          
   4          void DS18B20_Init(void)
   5          {
   6   1              unsigned char Init_Data[3]={20,10,0x3f};        //分辨率为10位
   7   1              unsigned char i=0;
   8   1              Reset();                                                //复位
   9   1              Write_Byte(SKIP_ROM);                   //跳过ROM命令
  10   1              Write_Byte(WRITE_SCRATCHPAD);   //写存储器命令
  11   1              for(i=0;i<3;i++)
  12   1              {
  13   2                      Write_Byte(Init_Data[i]);
  14   2              }
  15   1              Reset();                                                //复位
  16   1              Write_Byte(SKIP_ROM);                   //跳过ROM命令
  17   1              Write_Byte(COPY_SCRATCHPAD);    //拷贝存储器命令
  18   1      }
  19          //************************************************************
  20          //************************************************************
  21          
  22          uint Get_Temp(void)
  23          {
  24   1              unsigned char i=0;
  25   1              unsigned char TempH=0,TempL=0;
  26   1            unsigned int Temp = 0;
  27   1         //   float temprature=0;
  28   1      
  29   1              Reset();                                                //复位
  30   1              Write_Byte(SKIP_ROM);                   //跳过ROM命令
  31   1              Write_Byte(CONVERT_T);                  //启动转换命令
  32   1      //      Wire_Delay(50000);
  33   1              Reset();                                                //复位
  34   1              Write_Byte(SKIP_ROM);                   //跳过ROM命令
  35   1              Write_Byte(READ_SCRATCHPAD);    //读存储器命令
  36   1              TempL=Read_Byte();                              //读取温度值低8位
  37   1              TempH=Read_Byte();                              //读取温度值高8位
  38   1      
  39   1            //TempH<<=4;
  40   1            //temprature=TempH+TempL*0.0625;
  41   1            //return(temprature);
  42   1            Temp = TempH ;
  43   1            Temp<<=8;
  44   1            Temp = Temp|TempL;
  45   1            return(Temp);
  46   1      }
  47          
  48          void Wire_Delay(unsigned int num)
  49          {
  50   1              unsigned int i=0;
  51   1              i=num;
  52   1              while(--i);
  53   1      }
  54          
  55          unsigned char Reset(void)
C51 COMPILER V8.02   DS18B20_DRIVER                                                        09/13/2007 16:35:02 PAGE 2   

  56          {
  57   1              unsigned char Presence_Flag=0;  //主机接收到1,说明从机不在线,0为在线
  58   1              DQ=0;                           //拉低DQ线
  59   1              Wire_Delay(480);        //延时至少480微秒
  60   1              DQ=1;                           //释放DQ线
  61   1              Wire_Delay(70);         //等待18B20响应
  62   1              Wire_Delay(120);        //在采样周期的中间采样(采样周期为60~240微秒)
  63   1              Presence_Flag=DQ;       //采样
  64   1              Wire_Delay(120);        //等待剩余的采样周期
  65   1              Wire_Delay(240);        //等待时序结束
  66   1              return(Presence_Flag);
  67   1      }
  68          
  69          unsigned char Read_Bit(void)
  70          {
  71   1              unsigned char readbit=0;
  72   1              DQ=0;                   //拉低DQ
  73   1              Wire_Delay(1);  //延时至少1微秒
  74   1              P1MDOUT &=0xef;
  75   1              DQ=1;                   //释放DQ
  76   1              Wire_Delay(10); //最多延时14微秒采样,此处为10微秒
  77   1              readbit=DQ;
  78   1              Wire_Delay(110);        //读取周期为(60~120)微秒
  79   1              P1MDOUT|=0x10;
  80   1              return(readbit);
  81   1      }
  82          
  83          
  84          void Write_Bit(unsigned char num)
  85          {
  86   1              DQ=0;
  87   1              Wire_Delay(10);
  88   1              if(num & 0x01)
  89   1              {DQ=1;}
  90   1              else
  91   1              {DQ=0;}
  92   1              Wire_Delay(50);
  93   1              DQ=1;
  94   1              Wire_Delay(60);
  95   1      }
  96          void Write_Byte(unsigned char val)
  97          {
  98   1              unsigned char i=0;
  99   1              for(i=0;i<8;i++)
 100   1              {
 101   2                      Write_Bit(val);
 102   2                      val>>=1;
 103   2              }
 104   1      }
 105          
 106          unsigned char Read_Byte(void)
 107          {
 108   1              unsigned char i=0,receive_data=0;
 109   1              for(i=0;i<8;i++)
 110   1              {
 111   2                      receive_data>>=1;
 112   2                      if(Read_Bit())
 113   2                      {
 114   3                              receive_data |=0x80;
 115   3                      }
 116   2                      else
 117   2                      {
C51 COMPILER V8.02   DS18B20_DRIVER                                                        09/13/2007 16:35:02 PAGE 3   

 118   3                              receive_data &=0x7f;
 119   3                      }
 120   2              }
 121   1              return(receive_data);
 122   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    293    ----
   CONSTANT SIZE    =      3    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----       6
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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