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

📄 ds18b20.lst

📁 小型便携式温度计的源代码第二版
💻 LST
字号:
C51 COMPILER V8.08   DS18B20                                                               02/14/2009 14:56:13 PAGE 1   


C51 COMPILER V8.08, COMPILATION OF MODULE DS18B20
OBJECT MODULE PLACED IN DS18B20.OBJ
COMPILER INVOKED BY: E:\Program Files\Keil\C51\BIN\C51.EXE DS18B20.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /***********************************************************************
   2          ;便携式温度计
   3          ;数码管引脚连接:a=P1.2 b=P1.1 c=P1.0 d=P1.3 e=P1.4 f=P1.6 g=P1.5 h=P1.7共阳;
   4          ;编写人:芦庆
   5          ;时间:2008年7月27日
   6          ;主控芯片:AT89C2051-24PU
   7          ;温度传感器:DS18B20
   8          ;占用资源:定时器0,P1口,P3.3,P3.4,P3.5
   9          ;晶振速度:6MHz
  10          ;版本:1.0
  11          ;
  12          ;ROM指令                                代码
  13          ;Read ROM(读ROM)                 [33H]
  14          ;Match ROM(匹配ROM)           [55H]
  15          ;Skip ROM(跳过ROM]             [CCH]
  16          ;Search ROM(搜索ROM)           [F0H]
  17          ;Alarm search(告警搜索)          [ECH]
  18          ;
  19          ;存储器操作指令                                         代码
  20          ;Write Scratchpad(写暂存存储器)         [4EH]
  21          ;Read Scratchpad(读暂存存储器)          [BEH]
  22          ;Copy Scratchpad(复制暂存存储器)        [48H]
  23          ;Convert Temperature(温度变换)                  [44H]
  24          ;Recall EPROM(重新调出)                         [B8H]
  25          ;Read Power supply(读电源)                      [B4H]
  26          ;
  27          ************************************************************************/
  28          #include "CONFIG.H"
  29          uint8 Temperature;
  30          extern uint8 flag;
  31          extern uint8 Temp[2];//原始温度数据
  32          extern uint8 DispLED[4];//数码管显示缓冲区
  33          sbit dq=P3^7;//定义DS18B20数据引脚 
  34          /**************************微秒级延时*********************/
  35          void TempDelay (uint8 us)
  36          {
  37   1              while(us--);
  38   1      } 
  39          
  40          /*****************18B20初始化函数***********************/
  41          void Init18b20 ()
  42          {
  43   1              dq=1;
  44   1              _nop_();
  45   1              dq=0;
  46   1              TempDelay(86/2);   //delay 530 uS//80
  47   1              _nop_();
  48   1              dq=1;
  49   1              TempDelay(14/2);   //delay 100 uS//14
  50   1              _nop_();
  51   1              _nop_();
  52   1              _nop_();
  53   1              
  54   1              if(dq==0)
  55   1                      flag = 1;   //detect 1820 success!
C51 COMPILER V8.08   DS18B20                                                               02/14/2009 14:56:13 PAGE 2   

  56   1              else
  57   1                      flag = 0;    //detect 1820 fail!
  58   1              TempDelay(20/2);       //20
  59   1              _nop_();
  60   1              _nop_();
  61   1              dq = 1;
  62   1      }
  63          
  64          /**************************向18B20写入一个字节******************/
  65          void WriteByte (int8 wr)  //单字节写入
  66          {
  67   1              uint8 i;
  68   1              for (i=0;i<8;i++)
  69   1              {
  70   2                      dq = 0;
  71   2                      _nop_();
  72   2                      dq=wr&0x01;
  73   2                      TempDelay(5/2);   //delay 45 uS //5
  74   2                      _nop_();
  75   2                      _nop_();
  76   2                      dq=1;
  77   2                      wr >>= 1;
  78   2              }
  79   1      }
  80          
  81          /*************************读18B20的一个字节***********************/
  82          uint8 ReadByte()     //读取单字节
  83          {
  84   1              uint8 i;
  85   1              uint8 u=0;
  86   1              for(i=0;i<8;i++)
  87   1              {
  88   2                      dq = 0;
  89   2                      u >>= 1;
  90   2                      dq = 1;
  91   2                      if(dq==1)
  92   2                      u |= 0x80;
  93   2                      TempDelay (4/2);
  94   2                      _nop_();
  95   2              }
  96   1              return(u);
  97   1      }
  98          
  99          /**********************延时函数****************************/
 100          void mDelay(uint16 num)
 101          {
 102   1              uint16 i;
 103   1              for(;num>0;num--)
 104   1              {       for(i=0;i<124;i++)
 105   2                              {;}
 106   2              }
 107   1      }
 108          /*****************消除初始显示的“85”********************/
 109          void TT0(void)
 110          {
 111   1              uint8 pmet;
 112   1              Init18b20 ();//初始化18B20
 113   1              WriteByte(0xcc);   //跳过ROM
 114   1              WriteByte(0x44);   //启动温度转换
 115   1              mDelay(100);//关键延时
 116   1              Init18b20 ();
 117   1              WriteByte(0xcc);   //跳过ROM
C51 COMPILER V8.08   DS18B20                                                               02/14/2009 14:56:13 PAGE 3   

 118   1              WriteByte(0xbe);   //读取温度
 119   1              pmet=ReadByte();//温度低8位
 120   1              pmet=ReadByte();//温度高8位
 121   1      }
 122          
 123          /********************温度转换全处理********************/
 124          void Temperature_all(void)
 125          {
 126   1              static uint8 TT=0;//温度转换分段进行
 127   1              if(TT==0)
 128   1              {
 129   2                      Init18b20 ();//初始化18B20
 130   2                      WriteByte(0xcc);   //跳过ROM
 131   2                      WriteByte(0x44);   //启动温度转换
 132   2                      TT=1;
 133   2              }
 134   1              else if(TT==1)
 135   1              {
 136   2                      Init18b20 ();
 137   2                      WriteByte(0xcc);   //跳过ROM
 138   2                      WriteByte(0xbe);   //读取温度
 139   2                      Temp[0]=ReadByte();//温度低8位
 140   2                      Temp[1]=ReadByte();//温度高8位
 141   2                      if(Temp[1]<0xF0)//温度大于0度
 142   2                      {
 143   3                              DispLED[3]=(Temp[0]&0x0F)*625/1000%10;//小数
 144   3                              Temperature=(Temp[0]>>4)+(Temp[1]<<4);
 145   3                              DispLED[2]=Temperature%10;//个位
 146   3                              DispLED[1]=Temperature/10;//十位
 147   3                              DispLED[0]=Temperature/100;//
 148   3                      }
 149   2                      else//温度小于0度
 150   2                      {
 151   3                              Temp[0]=~Temp[0]+1;
 152   3                              Temp[1]=~Temp[1];
 153   3                              DispLED[3]=(Temp[0]&0x0F)*625/1000%10;//小数
 154   3                              Temperature=(Temp[0]>>4)+(Temp[1]<<4);
 155   3                              DispLED[2]=Temperature%10;//个位
 156   3                              DispLED[1]=Temperature/10;//十位
 157   3                              DispLED[0]=Temperature/100+10;//百位+负号
 158   3                      }
 159   2                      TT=0;
 160   2              }
 161   1      }
 162          void init_1820(void)
 163          {
 164   1              Init18b20 ();//初始化18B20
 165   1              if(flag==0)//效验错误
 166   1              {
 167   2                      DispLED[0]=12;//字母F
 168   2                      DispLED[1]=13;//字母A
 169   2                      DispLED[2]=14;//字母L
 170   2                      DispLED[3]=14;//字母L
 171   2              }
 172   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    391    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
C51 COMPILER V8.08   DS18B20                                                               02/14/2009 14:56:13 PAGE 4   

   DATA SIZE        =      2    ----
   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 + -