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

📄 ds18b20.lst

📁 DS18B20,单片机,C语言开发,proteus仿真
💻 LST
字号:
C51 COMPILER V7.08   DS18B20                                                               04/28/2007 19:06:47 PAGE 1   


C51 COMPILER V7.08, COMPILATION OF MODULE DS18B20
OBJECT MODULE PLACED IN DS18B20.OBJ
COMPILER INVOKED BY: D:\工具安装目录二\Keil C51\C51\BIN\C51.EXE DS18B20.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include <absacc.h>
   2          #include <ctype.h>
   3          #include <math.h>
   4          #include <stdio.h>
   5          #include <string.h>
   6          #include <reg52.h>
   7          /******************************************
   8          #XtalFreq (11.0592M)
   9          /******************************************/
  10          #define FALSE 0
  11          #define TRUE 1
  12          sbit DQ = P3^4;                                 //定义DQ引脚为P3.4
  13          
  14          /***********************延时函数***************************
  15          *功能:在11.0592M晶振条件下调用本函数用时33us,然后每次计数用时10us
  16          ***********************************************************/
  17          void delay(int seconds)
  18          {
  19   1       while(seconds--);
  20   1      }
  21          
  22          /*********************复位函数******************************
  23          *功能:完成单总线的复位操作
  24          *复位时间为480us,因此调用延时函数次数为(480-33)/10=45,时间只能超过,不能小于
  25          *经过70us之后检测存在脉冲,因此调用延时函数次数为(70-33)/10=4
  26          *******************************************************************/
  27          unsigned char ow_reset(void)
  28          {
  29   1              unsigned char presence;
  30   1              DQ=0;                                   /*将DQ线拉低*/
  31   1              delay(45);                              /*保持480us*/
  32   1              DQ=1;                                   /*DQ返回高电平*/
  33   1              delay(4);                               /*等待存在脉冲*/
  34   1              presence=DQ;                    //获得存在信号
  35   1              delay(40);                              //等待时间隙结束
  36   1              return(presence);               //返回存在信号,0表示器件存在,1表示无器件
  37   1      }
  38          
  39          /*********************位写入函数******************************
  40          *功能:向单总线写入1位数据
  41          *************************************************************/
  42          void write_bit(char bitval)
  43          {
  44   1              DQ=0;                                   //将DQ接低,开始写时间隙
  45   1              if(bitval==1)                   //如果写1,
  46   1              DQ=1;                                   //DQ返回高电平
  47   1              delay(8);                               //在时间隙内保持电平值不变,用时104us
  48   1              DQ=1;                                   
  49   1      }
  50          
  51          /*******************字节写入函数****************************
  52          *功能:向单总线写入一个字节
  53          ***********************************************************/
  54          void write_byte(char val)
  55          {
C51 COMPILER V7.08   DS18B20                                                               04/28/2007 19:06:47 PAGE 2   

  56   1              unsigned char i;
  57   1              unsigned char temp;
  58   1              for(i=0;i<8;i++)        //每次写入一位
  59   1              {
  60   2                      temp=val>>=i;
  61   2                      temp&=0x01;
  62   2                      write_bit(temp);
  63   2              }
  64   1              delay(8);                       //延时104us
  65   1      }
  66          
  67          /*******************位读取函数****************************
  68          *功能:从单总线上读取一位,延时15us,无法调用delay()延时程序
  69          *         这里采用一个for()循环来实现延时
  70          *********************************************************/
  71          unsigned char read_bit(void)
  72          {
  73   1              unsigned char i;
  74   1              DQ=0;                           //将DQ拉抵,开始读时间隙
  75   1              DQ=1;                           //再将其拉高
  76   1              for(i=0;i<4;i++);       //延时15us
  77   1              return(DQ);                     //返回DQ线上的电平值
  78   1      }
  79          
  80          /*****************字节读取函数*************************
  81          *功能:从单总线读取一个字节的数据
  82          ******************************************************/
  83          unsigned char read_byte(void)
  84          {
  85   1              unsigned char i;
  86   1              unsigned char value=0;
  87   1              for(i=0;i<8;i++)
  88   1              {                                       //每次读取一位
  89   2                      if(read_bit())  //如果读入位为1
  90   2                      value=(value|0x01);
  91   2                      value=value<<i;//左移i位,存入value;为0则不用存,
  92   2                      
  93   2                                                      //value中相应位原本就是0
  94   2                      delay(9);               //延时120us,准备读取下一位
  95   2              }
  96   1              return(value);
  97   1      }
  98          
  99          /*****************读取温度转换值函数*********************
 100          *功能:如果单总线上只用一个器件则可以直接调用本函数,
 101                    如果节点上有多个器件,为了避免冲突,应使用Match ROM函数
 102                    来选中特定的器件
 103          *注明:本函数是根据DS18B20温度数据格式编写的,此器件是分辩率可调的
 104                    在9-12位可选,出厂设置时是12位,DS1820是9位的,不可调
 105          ********************************************************/
 106          
 107          unsigned char TempBuffer[7];////显示缓冲区,用于存放处理好的各位数值                                                                             
 108          void Read_Temperature(void)
 109          {
 110   1      extern char t[];        //全局变量,用于存放两个字节的温度值
 111   1      ow_reset();                     //复位初始化,并检测存在信号
 112   1      write_byte(0xcc);       //写入"跳过ROM"命令
 113   1      write_byte(0x44);       //启动温度转换
 114   1      delay(8);                       //延时104us
 115   1      ow_reset();                     //复位初始化,并检测存在信号
 116   1      write_byte(0xcc);       //写入"跳过ROM"命令
 117   1      write_byte(0xbe);       //写入"读暂存器"命令
C51 COMPILER V7.08   DS18B20                                                               04/28/2007 19:06:47 PAGE 3   

 118   1      t[0]=read_byte();       //读入温度值的低字节
 119   1      t[1]=read_byte();       //读放温度值的高字节
 120   1      }
 121          
 122          
 123          
 124          
 125                          


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