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

📄 ds18b20.lst

📁 能较好的实现无线通信 用点阵来实现 距离有100米 程序已通过调试
💻 LST
字号:
C51 COMPILER V8.05a   DS18B20                                                              06/08/2008 20:18:03 PAGE 1   


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

line level    source

   1          #include"DS18B20.h"
   2          
   3          
   4          unsigned char tempL=0; //设全局变量
   5          unsigned char tempH=0; 
   6          unsigned char sdata = 0;//测量到的温度的整数部分
   7          unsigned char xiaoshu1 = 0;//小数第一位
   8          unsigned char xiaoshu2 = 0;//小数第二位
   9          unsigned char xiaoshu = 0;//两位小数
  10          bit  fg=1;        //温度正负标志
  11          
  12          
  13          /******************************************************************************/
  14          void Delay_us(unsigned char i)//延时函数                 num = 1  18.44 us 4   48us  8 65us       10  77.04us   100   663us
  15          {
  16   1              while(i--);
  17   1      }       
  18          /******************************************************************************/
  19          void Init_DS18B20(void)//初始化ds1820
  20          {
  21   1              unsigned char x=0;
  22   1              DQ = 1;    //DQ复位
  23   1              Delay_us(8);  //稍做延时
  24   1              DQ = 0;    //单片机将DQ拉低
  25   1              Delay_us(80); //精确延时 大于 480us
  26   1              DQ = 1;    //拉高总线
  27   1              Delay_us(8);      //65us
  28   1              x=DQ;      //稍做延时后 如果x=0则初始化成功 x=1则初始化失败
  29   1              Delay_us(20);
  30   1      }
  31          /******************************************************************************/
  32          unsigned char ReadOneChar_18B20(void)//读一个字节
  33          {
  34   1              unsigned char i=0;
  35   1              unsigned char dat = 0;
  36   1              for (i=8;i>0;i--)
  37   1              {
  38   2                      DQ = 0; // 给脉冲信号
  39   2                      dat>>=1;
  40   2                      DQ = 1; // 给脉冲信号
  41   2                      if(DQ)
  42   2                      dat|=0x80;
  43   2                      Delay_us(4);
  44   2              }
  45   1              return(dat);
  46   1      }
  47          /******************************************************************************/
  48          void WriteOneChar_18B20(unsigned char dat)//写一个字节
  49          {                                                                               //数据线从高电平拉至低电平,产生写起始信号。15us之内将所需写的位送到数据线上
  50   1              unsigned char i=0;
  51   1              for (i=8; i>0; i--)
  52   1              {
  53   2                      DQ = 0;
  54   2                      DQ = dat&0x01;
  55   2                      Delay_us(5);
C51 COMPILER V8.05a   DS18B20                                                              06/08/2008 20:18:03 PAGE 2   

  56   2                      DQ = 1;
  57   2                      dat>>=1;
  58   2              }
  59   1      }
  60          /******************************************************************************/
  61          void Adjust_res_18B20(char res) ///res 分别等于 0x1f, 0x3f, 0x5f 温度读数分辨率分别对应
  62                                     //              0.5, 0.25, 0.125   
  63          {
  64   1        Init_DS18B20();        //复位
  65   1        WriteOneChar_18B20(0xcc);  //跳过Rom
  66   1       WriteOneChar_18B20(0x4e);  //写暂存器
  67   1       WriteOneChar_18B20(0x02);  //写TH 
  68   1       WriteOneChar_18B20(0x01);  //写TL
  69   1        //WriteOneChar_18B20(0x5f);  //写结构寄存器
  70   1        WriteOneChar_18B20(res);
  71   1        Init_DS18B20();       //复位
  72   1        WriteOneChar_18B20(0xcc); //跳过Rom 
  73   1        WriteOneChar_18B20(0x48); //把暂存器内容写到EPRam中
  74   1      }
  75          
  76          /********************************************************************************/
  77          void ReadTemperature(void)//读取温度
  78          {
  79   1              //unsigned char a=0;
  80   1              //unsigned char b=0;
  81   1              //unsigned int t=0;
  82   1              //float tt=0;
  83   1              Init_DS18B20();
  84   1              WriteOneChar_18B20(0xCC); // 跳过读序号列号的操作
  85   1              WriteOneChar_18B20(0x44); // 启动温度转换
  86   1              Init_DS18B20();
  87   1              WriteOneChar_18B20(0xCC); //跳过读序号列号的操作
  88   1              WriteOneChar_18B20(0xBE); //读取温度寄存器
  89   1      
  90   1              tempL=ReadOneChar_18B20(); //读出温度的低位LSB
  91   1              tempH=ReadOneChar_18B20(); //读出温度的高位MSB 
  92   1        
  93   1              if(tempH>0x7f)      //最高位为1时温度是负
  94   1              {
  95   2                      tempL=~tempL;         //补码转换,取反加一
  96   2                      tempH=~tempH+1;       
  97   2                      fg=0;      //读取温度为负时fg=0
  98   2          }
  99   1              sdata = tempL/16+tempH*16;      //整数部分
 100   1              xiaoshu1 = (tempL&0x0f)*10/16; //小数第一位
 101   1              xiaoshu2 = (tempL&0x0f)*100/16%10;//小数第二位
 102   1              xiaoshu=xiaoshu1*10+xiaoshu2; //小数两位
 103   1              /*
 104   1              a=ReadOneChar_18B20();  //读低8位
 105   1              b=ReadOneChar_18B20(); //读高8位
 106   1              t=b;
 107   1              t<<=8;
 108   1              t=t|a;
 109   1              tt=t*0.0625;
 110   1              t= tt*10+0.5; //放大10倍输出并四舍五入
 111   1              return(t);
 112   1              */
 113   1      
 114   1      
 115   1      }
 116          /******************************************************************************/

C51 COMPILER V8.05a   DS18B20                                                              06/08/2008 20:18:03 PAGE 3   


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