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

📄 ds18b20.lst

📁 小型便携式温度计的源代码第三版
💻 LST
字号:
C51 COMPILER V8.08   DS18B20                                                               02/14/2009 15:37:26 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 ROM(SMALL) 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          /*******************文件包含**********************/
  29          #include <MAIN.H>
  30          
  31          /*****************外部变量声明********************/
  32          extern uchar flag;
  33          extern uchar Temp[2];//原始温度数据
  34          extern uchar DispLED[4];//数码管显示缓冲区
  35          
  36          /*******************变量声明**********************/
  37          uchar Temperature;
  38          sbit dq=P3^7;//定义DS18B20数据引脚 
  39          
  40          /**************************微秒级延时*********************/
  41          void TempDelay (uchar us)
  42          {
  43   1              while(us--);
  44   1      } 
  45          
  46          /*****************18B20初始化函数***********************/
  47          void Init18b20 ()
  48          {
  49   1              dq=1;
  50   1              _nop_();
  51   1              dq=0;
  52   1              TempDelay(86/2);   //delay 530 uS//80
  53   1              _nop_();
  54   1              dq=1;
  55   1              TempDelay(14/2);   //delay 100 uS//14
C51 COMPILER V8.08   DS18B20                                                               02/14/2009 15:37:26 PAGE 2   

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

 118   1              Init18b20 ();//初始化18B20
 119   1              WriteByte(0xcc);   //跳过ROM
 120   1              WriteByte(0x44);   //启动温度转换
 121   1              mDelay(50);//重要延时
 122   1              Init18b20 ();
 123   1              WriteByte(0xcc);   //跳过ROM
 124   1              WriteByte(0xbe);   //读取温度
 125   1              Temp[0]=ReadByte();//温度低8位
 126   1              Temp[1]=ReadByte();//温度高8位
 127   1              if(Temp[1]<0xF0)//温度大于0度
 128   1              {
 129   2                      DispLED[3]=(Temp[0]&0x0F)*625/1000%10;//小数
 130   2                      Temperature=(Temp[0]>>4)+(Temp[1]<<4);
 131   2                      DispLED[2]=Temperature%10;//个位
 132   2                      DispLED[1]=Temperature/10;//十位
 133   2                      DispLED[0]=Temperature/100;//
 134   2              }
 135   1              else//温度小于0度
 136   1              {
 137   2                      Temp[0]=~Temp[0]+1;
 138   2                      Temp[1]=~Temp[1];
 139   2                      DispLED[3]=(Temp[0]&0x0F)*625/1000%10;//小数
 140   2                      Temperature=(Temp[0]>>4)+(Temp[1]<<4);
 141   2                      DispLED[2]=Temperature%10;//个位
 142   2                      DispLED[1]=Temperature/10;//十位
 143   2                      DispLED[0]=Temperature/100+10;//百位+负号
 144   2              }
 145   1      }
 146          void init_1820(void)
 147          {
 148   1              Init18b20 ();//初始化18B20
 149   1              if(flag==0)//效验错误
 150   1              {
 151   2                      DispLED[0]=12;//字母F
 152   2                      DispLED[1]=13;//字母A
 153   2                      DispLED[2]=14;//字母L
 154   2                      DispLED[3]=14;//字母L
 155   2              }
 156   1      }


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