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

📄 ds18b20.lst

📁 DS18B20温度采集然后红外发射出去,接收板接收红外并LCD显示接收的数据信息,有完整的发射接收程序
💻 LST
字号:
C51 COMPILER V7.50   DS18B20                                                               04/06/2008 20:32:12 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE DS18B20
OBJECT MODULE PLACED IN .\obj\DS18B20.obj
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE src\DS18B20.c BROWSE DEBUG OBJECTEXTEND PRINT(.\lst\DS18B20.lst) OBJECT(.\o
                    -bj\DS18B20.obj)

line level    source

   1          
   2          #include <reg51.h>
   3          
   4          #include "DS18B20.h"
   5          
   6          /*******************************  延时函数 ********************************
   7          *  功能:在11.059MHz的晶振条件下调用本函数需要24μs ,然后每次计数需16μs 
   8                    (16*n+24)us
   9          **************************************************************************/
  10          void Singlewire_Delay( int n ) 
  11          {
  12   1       int i;
  13   1       for (i=0; i<n;i++);
  14   1      }
  15          
  16          /*******************************  复位函数 *******************************
  17          * 功能:完成单总线的复位操作。
  18          * 复位时间为480μs,因此延时时间为(480-24)/16 = 28.5,取29μs。
  19          * 经过70μs之后检测存在脉冲,因此延时时间为(70-24)/16 = 2.875,取3μs。
  20          **************************************************************************/
  21          bit Singlewire_Reset( void )
  22          {
  23   1       bit state;
  24   1       DQ = 0;                                    // 将 DQ 线拉低
  25   1       Singlewire_Delay(29);                  // 保持 480μs
  26   1       DQ = 1;                                    // DQ返回高电平
  27   1       Singlewire_Delay(3);                   // 等待存在脉冲
  28   1       state = DQ;                        // 获得存在信号
  29   1       Singlewire_Delay(25);                  // 等待时间隙结束
  30   1       return(~state);                    // 返回存在信号,1 = 器件存在, 0 = 无器件
  31   1      }
  32          /****************************** 位写入函数 *******************************
  33          * 功能:向单总线写入1位值:bitval
  34          *************************************************************************/
  35          void Write_Bit( char bitval ) 
  36          {
  37   1       DQ = 0;                                // 将DQ 拉低开始写时间隙
  38   1       if(bitval==1) DQ =1;   // 如果写1,DQ 返回高电平
  39   1       Singlewire_Delay(5);                           // 在时间隙内保持电平值,
  40   1       DQ = 1;        // Delay函数每次循环延时16μs,因此delay(5) = 104μs
  41   1      }       
  42          /**************************** 字节写入函数 *******************************
  43          * 功能:向单总线写入一个字节值:val
  44          *************************************************************************/
  45          void Write_Byte( char val ) 
  46          {
  47   1       uchar i;
  48   1       uchar temp;
  49   1       for (i=0; i<8; i++)    // 写入字节, 每次写入一位 
  50   1        {
  51   2        temp = val>>i;                
  52   2        temp &= 0x01;                 
  53   2        Write_Bit(temp); 
  54   2        }
C51 COMPILER V7.50   DS18B20                                                               04/06/2008 20:32:12 PAGE 2   

  55   1       Singlewire_Delay(5);
  56   1      }
  57          
  58          /**************************** 位读取函数 ********************************
  59          * 功能:从单总线上读取一位信号,所需延时时间为15μs,因此无法调用前面定义
  60          * 的delay()函数,而采用一个for()循环来实现延时。
  61          * ***********************************************************************/
  62          bit  Read_Bit( void ) 
  63          {
  64   1         uchar i;
  65   1         DQ = 0;               //将DQ 拉低开始读时间隙
  66   1         DQ = 1;                      // then return high
  67   1         for (i=0; i<3; i++);         // 延时15μs
  68   1         return(DQ);                  // 返回 DQ 线上的电平值
  69   1      }
  70          
  71          /**************************** 字节读取函数 *******************************
  72          * 功能:从单总线读取一个字节的值
  73          *************************************************************************/
  74          uchar Read_Byte( void) 
  75          {
  76   1        uchar i;
  77   1        uchar value = 0;
  78   1        for (i=0;i<8;i++) // 读取字节,每次读取一个字节
  79   1        {                             
  80   2        if(Read_Bit()) value|=0x01<<i;        // 然后将其左移
  81   2        Singlewire_Delay(6);                                  
  82   2        }
  83   1      return(value);
  84   1      }
  85          
  86          /******************************* 读取温度函数 *****************************
  87          * 功能:如果单总线节点上只有一个器件则可以直接掉用本函数。如果节点上有多个器
  88          *      件,为了避免数据冲突,应使用Match ROM函数来选中特定器件。
  89          * 注: 本函数是根据DS1820的温度数据格式编写的,若用于DS18B20,必须根据
  90          *      DS18B20的温度数据格式作适当修改。
  91          **************************************************************************/
  92          
  93          uchar Read_Temperature(void) 
  94          {
  95   1         
  96   1        char get[10];
  97   1        uint t;
  98   1      //  char temp_lsb,temp_msb;
  99   1        int k;  
 100   1        float temperature;  
 101   1        Singlewire_Reset();    //单总线复位//            
 102   1        Write_Byte(0xCC);     // 跳过 ROM
 103   1        Write_Byte(0x44);     // 启动温度转换 
 104   1        Singlewire_Delay(5);
 105   1        Singlewire_Reset();   //单总线复位// 
 106   1        Write_Byte(0xCC);     // 跳过 ROM//
 107   1        Write_Byte(0xBE);     //发送出读数据命令//// 读暂存器/////
 108   1        for (k=0;k<9;k++){get[k]=Read_Byte();}////连续读取9个寄存器中的数据////
 109   1        temp_msb = get[1];                    // Sign byte + lsbit
 110   1        temp_lsb = get[0];                    // Temp data plus lsb
 111   1        if (temp_msb >= 0x80)         
 112   1           {temperature=125+((~temp_msb)*256+(~temp_lsb)+1)*0.0625;}       
 113   1        else{temperature=(temp_msb*256+temp_lsb)*0.0625; }     
 114   1       t=(uint)temperature;  
 115   1       return(t);
 116   1       
C51 COMPILER V7.50   DS18B20                                                               04/06/2008 20:32:12 PAGE 3   

 117   1      }
 118          
 119          


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


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

⌨️ 快捷键说明

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