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

📄 18b20.lst

📁 18B20 程序 简单实用 18B20 程序 简单实用
💻 LST
字号:
C51 COMPILER V7.07   18B20                                                                 01/28/2008 14:49:00 PAGE 1   


C51 COMPILER V7.07, COMPILATION OF MODULE 18B20
OBJECT MODULE PLACED IN 18B20.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 18B20.c ROM(SMALL) BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          #include <AT89x051.H>
   2          
   3          sfr  WDT_CONTR  = 0xe1;
   4          sbit DQ         = P1^0; //* 18B20 I/O Line
   5          sbit LED_WRK    = P1^7; //* Working Led
   6          sbit PLC_signal = P1^6; //*24V signal
   7          
   8          void Delay(unsigned int i)
   9          {
  10   1              i=i*12;
  11   1              while(i--);    
  12   1      }
  13          /***************************************************************************************
  14          ** 函数组标号  :5-2
  15          ** 
  16          ** 函数名称    :Init_DS18B20
  17          ** 描述        :18B20初始化
  18          **
  19          ** 创建人      :King.Chen
  20          ** 创建日期    :2006-11-26
  21          **--------------------------------------------------------------------------------------
  22          ** 修改人      : 
  23          ** 修改日期    :
  24          ** 描述        : 
  25          **--------------------------------------------------------------------------------------
  26          ***************************************************************************************/
  27          void Init_DS18B20(void)
  28          {
  29   1              unsigned char x;
  30   1      
  31   1              DQ = 1;    //* DQ复位
  32   1              Delay(8);  //* 稍做延时
  33   1      
  34   1              DQ = 0;    //* DQ拉低
  35   1              Delay(80); //* 精确延时,大于480us
  36   1      
  37   1              DQ = 1;    //* 拉高总线
  38   1      
  39   1              Delay(14);
  40   1              x=DQ;      //稍做延时后 如果x=0则初始化成功 x=1则初始化失败
  41   1      
  42   1              Delay(20);
  43   1      }
  44          /***************************************************************************************
  45          ** 函数组标号  :5-3
  46          ** 
  47          ** 函数名称    :ReadOneChar  
  48          ** 描述        :读一个字节  
  49          **
  50          ** 返回值      :unsigned char  
  51          **
  52          ** 创建人      :King.Chen
  53          ** 创建日期    :2006-11-26 
  54          **--------------------------------------------------------------------------------------
  55          ** 修改人      : 
C51 COMPILER V7.07   18B20                                                                 01/28/2008 14:49:00 PAGE 2   

  56          ** 修改日期    :
  57          ** 描述        : 
  58          **--------------------------------------------------------------------------------------
  59          ***************************************************************************************/
  60          unsigned char ReadOneChar(void)
  61          {
  62   1              unsigned char i=0;
  63   1              unsigned char dat = 0;
  64   1      
  65   1              for (i=8;i>0;i--)
  66   1              {
  67   2                      DQ = 0; // 给脉冲信号
  68   2                dat>>=1;
  69   2                DQ = 1; // 给脉冲信号
  70   2      
  71   2                if(DQ)
  72   2                              dat|=0x80;
  73   2                Delay(4);
  74   2              }
  75   1      
  76   1              return(dat);
  77   1      }
  78          /***************************************************************************************
  79          ** 函数组标号  :5-4  
  80          ** 
  81          ** 函数名称    :WriteOneChar  
  82          ** 描述        :写一个字节  
  83          **
  84          ** 参数        :unsigned char dat       
  85          **         
  86          ** 创建人      :King.Chen
  87          ** 创建日期    :2006-11-26 
  88          **--------------------------------------------------------------------------------------
  89          ** 修改人      : 
  90          ** 修改日期    :
  91          ** 描述        : 
  92          **--------------------------------------------------------------------------------------
  93          ***************************************************************************************/
  94          void WriteOneChar(unsigned char dat)
  95          {
  96   1              unsigned char i=0;
  97   1      
  98   1              for (i=8; i>0; i--)
  99   1              {
 100   2              DQ = 0;
 101   2              DQ = dat&0x01;
 102   2              Delay(5);
 103   2              DQ = 1;
 104   2              dat>>=1;
 105   2              }
 106   1      
 107   1              Delay(4);
 108   1      }
 109          /***************************************************************************************
 110          ** 函数组标号  :5-5
 111          ** 
 112          ** 函数名称    :ReadTemperature  
 113          ** 描述        :读取温度  
 114          **
 115          ** 返回值      :unsigned int  
 116          **
 117          ** 创建人      :King.Chen
C51 COMPILER V7.07   18B20                                                                 01/28/2008 14:49:00 PAGE 3   

 118          ** 创建日期    :2006-11-26 
 119          **--------------------------------------------------------------------------------------
 120          ** 修改人      : 
 121          ** 修改日期    :
 122          ** 描述        : 
 123          **--------------------------------------------------------------------------------------
 124          ***************************************************************************************/
 125          unsigned int ReadTemperature(void)
 126          {
 127   1              unsigned char a=0;
 128   1              unsigned char b=0;
 129   1              unsigned char t=0;
 130   1      
 131   1              Init_DS18B20();
 132   1      
 133   1              WriteOneChar(0xCC); //* 跳过读序号列号的操作
 134   1      
 135   1              WriteOneChar(0x44); //* 启动温度转换
 136   1      
 137   1              Init_DS18B20();
 138   1      
 139   1              WriteOneChar(0xCC); //* 跳过读序号列号的操作
 140   1      
 141   1              WriteOneChar(0xBE); //* 读取温度寄存器等(共可读9个寄存器) 前两个就是温度
 142   1      
 143   1              a=ReadOneChar();   //* 读取温度值低位
 144   1              b=ReadOneChar();   //* 读取温度值高位
 145   1      
 146   1              a=a>>4;            //* 低位右移4位,舍弃小数部分
 147   1              t=b<<4;            //* 高位左移4位,舍弃符号位
 148   1              t=t|a;    
 149   1      
 150   1              return(t);
 151   1      }
 152          void delay1s(void)//200ms延时子程序
 153          {
 154   1              unsigned char i,j,k;
 155   1              WDT_CONTR=0x3c;//喂狗
 156   1          for(i=5;i>0;i--)
 157   1          for(j=132;j>0;j--)
 158   1          for(k=150;k>0;k--);
 159   1      }
 160          main()
 161          {
 162   1              unsigned char Temperature;
 163   1              unsigned char k;
 164   1      //      unsigned int sum;
 165   1      /*      TMOD=0x01;//设T/C1为定时方1
 166   1              TH0=0x3C;//50MS
 167   1              TL0=0xb0;
 168   1              EA=1; //系统中断允许
 169   1              ET0=1;
 170   1              TR0=1;*/
 171   1              PLC_signal=1;
 172   1              LED_WRK=1;
 173   1              
 174   1              while(1)
 175   1              {
 176   2                      WDT_CONTR=0x3c;//喂狗                   
 177   2                      Temperature=0;  
 178   2                      Temperature=ReadTemperature();
 179   2                      if(Temperature>=45)
C51 COMPILER V7.07   18B20                                                                 01/28/2008 14:49:00 PAGE 4   

 180   2                      {
 181   3                              for(k=0;k<10;k++)delay1s();
 182   3                              WDT_CONTR=0x3c;//喂狗
 183   3                              Temperature=ReadTemperature();
 184   3                              if(Temperature>=45)
 185   3                              {
 186   4                                      PLC_signal=0;
 187   4                                      LED_WRK=0;                      
 188   4                              }
 189   3      
 190   3                      }                                                                                                                       
 191   2                      else
 192   2                      {
 193   3                              PLC_signal=1;
 194   3                              LED_WRK=1;
 195   3                      }       
 196   2                      for(k=0;k<10;k++)delay1s();
 197   2              }
 198   1      
 199   1      }
 200          /*timer0() interrupt 1 using 1  //中断定时处理程序
 201          {       
 202                  TR0=0;                  //关定时器
 203                  WDT_CONTR=0x3c;//喂狗   
 204                  TH0=0x3C;//50MS
 205                  TL0=0xb0;
 206                  TR0=1;                  //开定时器
 207          }*/
 208              
 209          /***************************************************************************************
 210          **                                   End of File
 211          ***************************************************************************************/


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