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

📄 18b20.lst

📁 温度传感器18B20读写程序 ASM51
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.01  18B20                                                                  03/02/2007 19:03:03 PAGE 1   


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

stmt level    source

   1          /*========================================================================================================
             -==
   2          MODEL:                           Firmware Version :   010          
   3          ==========================================================================================================
             -==
   4          H/W  TB41 USE ONLY  REV:0.2  24MHz
   5          Editor by :antony 2007.2.26  
   6          Modify by :
   7          ==========================================================================================================
             -=*/
   8          #include <REG52.H>
   9          #include <absacc.h>
  10          #include <intrins.h>
  11          #include <math.h>
  12          #include <setjmp.h>
  13          //--------------------------------------------------------------------------------------------------------
             ---
  14          #define  U8 unsigned char 
  15          #define  U16 unsigned int
  16          //--------------------------------------------------------------------------------------------------------
             ---
  17          #define  T20us    1000
  18          #define  T40us    2000
  19          #define  T60us    3000
  20          #define  T80us    4000
  21          #define  T90us    4500
  22          #define  T480us   24000
  23          //--------------------------------------------------------------------------------------------------------
  24          //default value
  25          #define Bit0            0x01       
  26          #define Bit1            0x02     
  27          #define Bit2            0x04     
  28          #define Bit3            0x08     
  29          #define Bit4            0x10     
  30          #define Bit5            0x20     
  31          #define Bit6            0x40    
  32          #define Bit7            0x80     
  33          #define XBit7           0x7f    
  34          #define XBit6           0xbf    
  35          #define XBit5           0xdf     
  36          #define XBit4           0xef    
  37          #define XBit3           0xf7    
  38          #define XBit2           0xfb     
  39          #define XBit1           0xfd     
  40          #define XBit0           0xfe    
  41          //--------------------------------------------------------------------------------------------------------
  42          #define LCM_Data P1
  43          #define Busy     0x80 
  44          sbit LCM_RS =  P3^0;
  45          sbit LCM_RW =  P3^1;
  46          sbit LCM_E =  P3^3;
  47          sbit OKLED =  P3^5;
  48          //-------------------------------------------------------------------------------------------------------
  49          #define  SetRelay XBYTE[0x4000] 
  50          U8 RelayBuffer=0xff;
C51 COMPILER V7.01  18B20                                                                  03/02/2007 19:03:03 PAGE 2   

  51          #define  SensorA   1
  52          #define  SensorB   2
  53          sbit DQ1 = P3^4;
  54          sbit DQ2 = P3^2;
  55          //--------------------------------------------------------------------------------------------------------
  56          void Delay100ms(void);
  57          void Delay15(void);
  58          void Delay60(void);
  59          void InitTS(U8 Type);
  60          void ResetTS(U8 Type);
  61          void Write0TS(U8 Type);
  62          void Write1TS(U8 Type);
  63          bit ReadTS(U8 Type);
  64          void WriteByteTS(U8 byte,U8 Type);
  65          U8 ReadByteTS(U8 Type);
  66          U16 GetTempTS(U8 Type);
  67          void Delay(U16 cDly);
  68          //--------------------------------------------------------------------------------------------------------
             --
  69          void WriteDataLCM(U8 WDLCM);
  70          void WriteCommandLCM(U8 WCLCM,BuysC);
  71          U8 ReadDataLCM(void);
  72          U8 ReadStatusLCM(void);
  73          void LCMInit(void);
  74          void DisplayOneChar(U8 X, U8 Y, U8 DData);
  75          void DisplayListChar(U8 X, U8 Y, U8 *DData);
  76          void DisplayTemperature(U16 TempA,U16 TempB);
  77          
  78          U8 code Line1[] = {"  Q1       Q2   "};
  79          U8 code Line2[] = {"000.000  000.000"};
  80          U8 TempBuffer[16] = {"000.000  000.000"};
  81          
  82          U8 code Notice1[] = {"    Dragorn     "};
  83          U8 code Notice2[] = {"Oscillate Heater"};
  84          U8 code NG[] = {" SENSOR Error!! "};
  85          U8 code Q1_18B20NG[] = {" Q1_18B20  NG!! "};
  86          U8 code Q2_18B20NG[] = {" Q2_18B20  NG!! "};
  87          //--------------------------------------------------------------------------------------------------------
             --
  88          void main(void)
  89          {
  90   1              U16 BufferA,BufferB;
  91   1              U8  j;
  92   1      
  93   1              SetRelay=RelayBuffer & XBit0 & XBit1;   
  94   1              OKLED=1;
  95   1          Delay100ms(); 
  96   1              LCMInit(); 
  97   1              DisplayListChar(0, 0, Notice1);
  98   1              DisplayListChar(0, 1, Notice2);
  99   1              for(j=0;j<30;j++)
 100   1                      Delay100ms(); 
 101   1              DisplayListChar(0, 0, Line1);
 102   1              DisplayListChar(0, 1, Line2);
 103   1              InitTS(SensorA);
 104   1              InitTS(SensorB);
 105   1              SetRelay=RelayBuffer | Bit0 | Bit1;
 106   1              while(1)
 107   1              {  
 108   2                      BufferA=GetTempTS(SensorA);
 109   2                      BufferA=BufferA-3500;
 110   2                      if(BufferA >= 57500)
C51 COMPILER V7.01  18B20                                                                  03/02/2007 19:03:03 PAGE 3   

 111   2                          RelayBuffer=RelayBuffer & XBit0;
 112   2                  else
 113   2                              RelayBuffer=RelayBuffer | Bit0;
 114   2                      SetRelay=RelayBuffer;
 115   2                      //-------------------------------------------------
 116   2                      BufferB=GetTempTS(SensorB);
 117   2                      BufferB=BufferB-3500;
 118   2                      if(BufferB >= 57500)
 119   2                              RelayBuffer=RelayBuffer & XBit1;
 120   2                  else
 121   2                              RelayBuffer=RelayBuffer | Bit1;
 122   2                      SetRelay=RelayBuffer;
 123   2                  //--------------------------------------------------
 124   2                      if((BufferA>56000)&&(BufferB>56000))
 125   2                              OKLED=0;
 126   2                      else
 127   2                              OKLED=1;
 128   2                      DisplayTemperature(BufferA,BufferB);
 129   2              }
 130   1      }
 131          //--------------------------------------------------------------------------------------------------------
             ---
 132          void Delay(U16 cDly)
 133          {
 134   1              cDly=cDly/1000;
 135   1          do
 136   1              {                 //20us
 137   2                      _nop_();
 138   2                      _nop_();
 139   2                      _nop_();
 140   2                      _nop_();
 141   2                      _nop_();
 142   2                      _nop_();
 143   2                      _nop_();
 144   2                      _nop_();
 145   2              }while(cDly--);
 146   1      }
 147          //--------------------------------------------------------------------------------------------------------
             ---
 148          void Delay100ms(void)                                   
 149          {                        
 150   1       U8 i,j,k;
 151   1      
 152   1       for(i=0;i<8*2;i++)
 153   1         for(j=0;j<25;j++)
 154   1           for(k=0;k<151;k++);
 155   1      }
 156          //--------------------------------------------------------------------------------------------------------
             -----
 157          void InitTS(U8 Type)                                            //init 18B20
 158          {
 159   1           ResetTS(Type);               
 160   1               WriteByteTS(0xCC,Type);       
 161   1               WriteByteTS(0x4E,Type);       
 162   1               WriteByteTS(0x1f,Type);       
 163   1      }
 164          //--------------------------------------------------------------------------------------------------------
             -----
 165          void ResetTS(U8 Type)                          //reset 18B20            
 166          {
 167   1              U8 j;
 168   1      
C51 COMPILER V7.01  18B20                                                                  03/02/2007 19:03:03 PAGE 4   

 169   1              j=255;
 170   1              if(Type==SensorA)
 171   1              {
 172   2                      DQ1=1;
 173   2                      DQ1=0;
 174   2                      Delay(T480us);
 175   2                      Delay(T40us);
 176   2                      DQ1=1; 
 177   2                      //--------------------------------------------------------
 178   2              while(j--)   //if 18b20 presence   DQ1=0  in 60~240us times
 179   2                      {
 180   3                              if(DQ1==0)
 181   3                                      break;                   
 182   3                      }
 183   2              if(j<2)   
 184   2                      {
 185   3                              SetRelay=RelayBuffer & XBit0 & XBit1;
 186   3                              DisplayListChar(0, 0, NG);
 187   3                              DisplayListChar(0, 1, Q1_18B20NG);
 188   3                              while(1);
 189   3                      }
 190   2              //      while(DQ1);  
 191   2             //----------------------------------------------------------   
 192   2                      Delay(T480us);
 193   2                      Delay(T40us);
 194   2              }
 195   1              else
 196   1              {
 197   2                      DQ2=1;
 198   2                      DQ2=0;
 199   2                      Delay(T480us);
 200   2                      Delay(T40us);
 201   2                      DQ2=1; 
 202   2                      //--------------------------------------------------------
 203   2              while(j--)  //if 18b20 presence   DQ1=0  in 60~240us times
 204   2                      {
 205   3                              if(DQ2==0)
 206   3                                      break;                   
 207   3                      }
 208   2              if(j<2)
 209   2                      {
 210   3                              SetRelay=RelayBuffer & XBit0 & XBit1;
 211   3                              DisplayListChar(0, 0, NG);
 212   3                              DisplayListChar(0, 1, Q2_18B20NG);
 213   3                              while(1);
 214   3                      }     
 215   2                      //while(DQ2);  
 216   2              //----------------------------------------------------------
 217   2                      Delay(T480us);
 218   2                      Delay(T40us);
 219   2              }
 220   1      }
 221          //--------------------------------------------------------------------------------------------------------
             -----
 222          void Write0TS(U8 Type)                                  //WRITE '0' TO 18B20 
 223          {
 224   1               if(Type==SensorA)
 225   1               {
 226   2              DQ1=1;
 227   2              DQ1=0;
 228   2                      Delay(T90us);
 229   2              DQ1=1;
C51 COMPILER V7.01  18B20                                                                  03/02/2007 19:03:03 PAGE 5   

 230   2                      _nop_();
 231   2                  _nop_();
 232   2               }
 233   1               else
 234   1               {
 235   2                      DQ2=1;
 236   2              DQ2=0;
 237   2                      Delay(T90us);
 238   2              DQ2=1;
 239   2                      _nop_();
 240   2                      _nop_();
 241   2               }
 242   1      }
 243          //--------------------------------------------------------------------------------------------------------
             -----
 244          void Write1TS(U8 Type)                                  //WRITE '1' TO 18B20
 245          {

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -