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

📄 gsm-

📁 GSM室温监控系统
💻
字号:
C51 COMPILER V7.06   DS18B20                                                               06/13/2010 15:40:38 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE DS18B20
OBJECT MODULE PLACED IN ds18b20.OBJ
COMPILER INVOKED BY: E:\WorkSpace\Keil\C51\BIN\C51.EXE ds18b20.c BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          /*DS18B20命令:
   2          READ ROM                33H      读rom
   3          MATCH ROM                                       55H      匹配rom
   4          SKIP ROM                CCH      跳过rom
   5          SEARCH ROM              F0H      搜索rom
   6          ALARM ROM               ECH      警告rom
   7          WRITE SCRATCHPAD        4EH      写暂存器
   8          READ SCRATCHPAD         BEH      读暂存器
   9          COPY SCRATCHPAD                                 48H      复制暂存器
  10          COVERT T                44H      温度转换开始
  11          RECALL E2               B8H      重调用E2存储器
  12          READ POWER SUPPLY       B4H      读供电方式
  13          */
  14          
  15          #ifndef DS18B20_H
  16          #define DS18B20_H
  17          #include "common.h"
  18          
  19          sbit DS18B20=P2^0;      //自已定义IO口
  20          
  21          unsigned char L_18B20,H_18B20; //分别存放低八位 高八位的数据;
  22          unsigned char fg=0,zhengshu,xiaoshu1,xiaoshu2;  //fg为负数标志位,zhengshu是温度的整数部分,xiaoshu1是十分位,
             -xiaoshu2是百分位
  23          
  24          
  25          void Reset_18B20(void);                         //ds18b20复位程序
  26          void Wait_18B20();                                      //等待程序,等待ds18b20应答
  27          bit Readbit_18B20(void);                        //读取一个bit的数据
  28          unsigned char Readbyte_18B20(void);     //读取一个字节的数据
  29          void Writebyte_18B20(unsigned char b);  //写一个字节(控制字)
  30          void Convert(void);                                             //开始转换
  31          void Read_18B20(void);                                  //读取ds18b20
  32          
  33          
  34          void Reset_18B20(void)//ds18b20复位程序
  35          {
  36   1              unsigned char i;
  37   1              DS18B20=0;
  38   1              i=110;
  39   1              while(i>0)i--;
  40   1              DS18B20=1;
  41   1              i=6;
  42   1              while(i>0)i--;
  43   1      }
  44          
  45          void Wait_18B20()//等待程序,等待ds18b20应答
  46          {
  47   1              unsigned char i=255;
  48   1              while(DS18B20)
  49   1              {
  50   2                      i--;
  51   2                      if(i==0)        return; //超时
  52   2              }
  53   1              while(~DS18B20)
  54   1              {
C51 COMPILER V7.06   DS18B20                                                               06/13/2010 15:40:38 PAGE 2   

  55   2                      i--;
  56   2                      if(i==0)        return;//超时
  57   2      
  58   2              }
  59   1              i=6;
  60   1              while(i>0)i--;
  61   1      }
  62          
  63          bit Readbit_18B20(void) //读取一个bit的数据
  64          {
  65   1              unsigned char i;
  66   1              bit b;
  67   1              DS18B20=0;
  68   1              i++;i++;   
  69   1              DS18B20=1;
  70   1              i++;i++;i++;i++;i++; 
  71   1              b=DS18B20;
  72   1              i=13;
  73   1              while(i>0)i--;
  74   1              return b;
  75   1      }
  76          
  77          unsigned char Readbyte_18B20(void) //读取一个字节的数据
  78          {
  79   1              unsigned char i,j,b;
  80   1              b=0;
  81   1              for(i=1;i<=8;i++)
  82   1              {
  83   2                      j=Readbit_18B20();
  84   2                      b=(j<<7)|(b>>1);        //又玩野
  85   2              }
  86   1              return b;
  87   1      }
  88          
  89          void Writebyte_18B20(unsigned char b)//写一个字节(控制字)
  90          {
  91   1         unsigned char j,i;
  92   1              bit temp;
  93   1              for(j=1;j<=8;j++)
  94   1              {
  95   2                      temp=b&0x01;
  96   2                      b=b>>1;
  97   2                      if(temp) // 写“1”
  98   2                      {
  99   3                              DS18B20=0;
 100   3                              i++;i++;i++;i++;i++;  
 101   3                              DS18B20=1;
 102   3                              i=13;
 103   3                              while(i>0)i--;
 104   3                      }
 105   2                      else     //写“0”
 106   2                      {
 107   3                              DS18B20=0;
 108   3                              i=13;
 109   3                              while(i>0)i--;
 110   3                              DS18B20=1;
 111   3                              i++;i++;i++;i++;i++;  
 112   3                      }       
 113   2              }
 114   1      }
 115          
 116          void Convert(void)                              //开始转换
C51 COMPILER V7.06   DS18B20                                                               06/13/2010 15:40:38 PAGE 3   

 117          {
 118   1              Reset_18B20();
 119   1              Wait_18B20();                                           //等待应答脉冲
 120   1              Writebyte_18B20(0xcc);  //跳过序列号脉冲
 121   1              Writebyte_18B20(0x44);  //转换命令
 122   1      }
 123          
 124          
 125          void Read_18B20(void) //读取ds18b20
 126          {       
 127   1              Convert();
 128   1              Reset_18B20();
 129   1              Wait_18B20();
 130   1              Writebyte_18B20(0xcc);          //跳过ROM
 131   1              Writebyte_18B20(0xbe);          //发送读取命令
 132   1              L_18B20=Readbyte_18B20();       //读取低八位数据
 133   1              H_18B20=Readbyte_18B20();       //读取高八位数据
 134   1              if(H_18B20>0x7f)      //最高位为1时温度是负
 135   1              {
 136   2                       L_18B20=~L_18B20;         //补码转换,取反加一
 137   2                       H_18B20=~H_18B20+1;       
 138   2                       fg=1;      //读取温度为负时fg=1
 139   2         }
 140   1              zhengshu=L_18B20/16+H_18B20*16; //整数部分
 141   1              xiaoshu1=(L_18B20&0x0f)*10/16; //小数第一位
 142   1              xiaoshu2=(L_18B20&0x0f)*100/16%10;//小数第二位
 143   1      
 144   1      }
 145          
 146          #endif
 147          
 148          
 149          
 150          
 151          
 152          
 153          
 154          
 155          
 156          
 157          
 158          
 159          
 160          
 161          
 162          
 163          
 164          


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