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

📄 18b20.lst

📁 18B20 + 51 + Keil 即Keil中18B20的51c语言程序
💻 LST
字号:
C51 COMPILER V7.01  18B20                                                                  11/17/2006 21:13:55 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          总线主机检测到DSl820的存在便可以发出ROM操作命令之一这些命令如:
   3                  指令                            代码
   4          Read ROM(读ROM)                 [33H]
   5          Match ROM(匹配ROM)              [55H]
   6          Skip ROM(跳过ROM]               [CCH]
   7          Search ROM(搜索ROM)             [F0H]
   8          Alarm search(告警搜索)          [ECH]
   9          
  10          存储器操作命令:
  11              指令                                                代码
  12          Write Scratchpad(写暂存存储器)  [4EH]
  13          Read Scratchpad(读暂存存储器)   [BEH]
  14          Copy Scratchpad(复制暂存存储器) [48H]
  15          Convert Temperature(温度变换)   [44H]
  16          Recall EPROM(重新调出)                  [B8H]
  17          Read Power supply(读电源)           [B4H]
  18          
  19          经过单总线访问18B20的协议如下:
  20          。初始化
  21          。ROM操作指令
  22          。存储器操作指令
  23          。处理/数据
  24          *******************************************************************/
  25          #include<reg51.h>
  26          #include<intrins.h>
  27          #define uchar unsigned char
  28          #define uint unsigned int
  29          const uchar LEDCode[10] = {0x40|0x80,0x79|0x80,0x24|0x80,0x30|0x80,0x19|0x80,0x12|0x80,0x02|0x80,0x78|0x80
             -,0x00|0x80,0x10|0x80};
  30          extern crlr();
  31          sbit DQ = P3^3;  //定义通信端口
  32          sbit P3_7 = P3^7;
  33          sbit P3_6 = P3^6;
  34          sbit P3_5 = P3^5;
  35          sbit P3_4 = P3^4;
  36          void Delay(uchar i)
  37          {
  38   1              while(i--);  //延迟6个机器周期
  39   1      }
  40          void Init_18B20()
  41          {
  42   1              uchar i = 0;
  43   1              DQ = 1;
  44   1              Delay(5);
  45   1              DQ = 0;
  46   1              Delay(90);
  47   1              DQ = 1;
  48   1              Delay(8);
  49   1              i = DQ;
  50   1              while(i);
  51   1              Delay(80);
  52   1              DQ = 1;
  53   1              _nop_();
  54   1      }
C51 COMPILER V7.01  18B20                                                                  11/17/2006 21:13:55 PAGE 2   

  55          
  56          void Write0()
  57          {
  58   1              DQ = 1;
  59   1              _nop_();
  60   1              DQ = 0;
  61   1              Delay(10);
  62   1              DQ = 1;
  63   1              _nop_(); 
  64   1      }
  65          
  66          void Write1()
  67          {
  68   1              DQ = 1;
  69   1              _nop_();
  70   1              DQ = 0;
  71   1              Delay(2);
  72   1              DQ = 1;
  73   1              _nop_();
  74   1              Delay(7);
  75   1              _nop_();
  76   1              _nop_();
  77   1              DQ = 1;
  78   1              _nop_();
  79   1      }
  80          
  81          bit ReadDQ()
  82          {
  83   1              bit i;
  84   1              DQ = 1;
  85   1              DQ = 0;
  86   1              _nop_();
  87   1              Delay(2);
  88   1              i = DQ;
  89   1              Delay(10);
  90   1              _nop_();
  91   1              DQ = 1;
  92   1              _nop_();
  93   1              return i;
  94   1      }
  95          
  96          
  97          void WriteAByte(uchar Byte)
  98          {
  99   1              uchar i;
 100   1              for(i=8;i>0;i--)
 101   1              {
 102   2                      if(Byte&0x01)
 103   2                      Write1();
 104   2                      else
 105   2                      Write0();
 106   2                      Byte = Byte>>1;
 107   2              }
 108   1      }
 109          
 110          uchar ReadAByte(void)
 111          {
 112   1      /*      uchar i = 8, j = 0;
 113   1              bit b;
 114   1              do{
 115   1                      b = ReadDQ();
 116   1                      if(b)
C51 COMPILER V7.01  18B20                                                                  11/17/2006 21:13:55 PAGE 3   

 117   1                      j += 1;
 118   1      //              #pragma asm
 119   1      //              mov a,r7
 120   1      //              rr a
 121   1      //              mov r7,a
 122   1      //              #pragma endasm
 123   1                      j = j>> 1;
 124   1                      i--;
 125   1                      if(i)
 126   1                      i = i>>1;
 127   1                      }while(i);
 128   1                      return j;*/     
 129   1                      unsigned char i=0;
 130   1      unsigned char dat = 0;
 131   1      for (i=8;i>0;i--)
 132   1       {
 133   2        DQ = 0; // 给脉冲信号
 134   2        dat>>=1;
 135   2        DQ = 1; // 给脉冲信号
 136   2        if(DQ)
 137   2         dat|=0x80;
 138   2        Delay(4);
 139   2       }
 140   1       return(dat);
 141   1      
 142   1      }
 143          
 144          void GetTemp(uchar Temp[2])
 145          {
 146   1              uchar TempH,TempL,LSL4,LSH4,MSL3,MSH5;
 147   1              bit byte = 0;
 148   1              Init_18B20();
 149   1              WriteAByte(0xcc);
 150   1              WriteAByte(0x44);
 151   1      /*      for(i=0;i<16;i++)
 152   1              {
 153   1                      for(j=0;j<125;j++)
 154   1                      {
 155   1                              for(k=0;k<50;k++)
 156   1                              {;}
 157   1                      }
 158   1              }*/
 159   1              Init_18B20();
 160   1              WriteAByte(0xcc);
 161   1              WriteAByte(0xbe);
 162   1              TempL = ReadAByte();
 163   1              TempH = ReadAByte();
 164   1              LSL4 = TempL&0x0f;
 165   1              LSH4 = TempL&0xf0;
 166   1              LSH4 >>= 4;
 167   1              MSL3 = TempH&0x07;
 168   1      //      MSL3 <<=3;
 169   1      //      MSH5 = TempH&0xf8;
 170   1              Temp[0] = (((LSL4&0x08)>>3)*0.5+((LSL4&0x04)>>2)*0.25+((LSL4&0x02)>>1)*0.125+(LSL4&0x01)*0.0625)*100;
 171   1      //      Temp[0] = LSL4;
 172   1              Temp[1] = LSH4 + MSL3*16;
 173   1              if(MSH5)
 174   1              {
 175   2                      Temp[0] = ~Temp[0] + 1;
 176   2                      Temp[1] = ~Temp[1] + 1;
 177   2              }
 178   1              
C51 COMPILER V7.01  18B20                                                                  11/17/2006 21:13:55 PAGE 4   

 179   1      
 180   1      }
 181          
 182          void main()
 183          {
 184   1              uchar Temp[2],iL,jL,jH,iH;
 185   1              P3 = 0x00;
 186   1              while(1)
 187   1              {
 188   2              GetTemp(Temp);
 189   2              iH = Temp[1]/10;
 190   2              iL = Temp[1]%10;
 191   2              jH = Temp[0]/10;
 192   2          jL = Temp[0]%10;
 193   2                      
 194   2                      P3 = (P3&0x0f)|0x10;
 195   2                      P2 = LEDCode[iH];
 196   2                      Delay(2000);
 197   2      
 198   2                      P3 = (P3&0x0f)|0x20;
 199   2                      P2 = LEDCode[iL]&0x7f; 
 200   2                      Delay(2000);
 201   2      
 202   2                      P3 = (P3&0x0f)|0x40;
 203   2                      P2 = LEDCode[jH];
 204   2                      Delay(2000);
 205   2      
 206   2                      P3 = (P3&0x0f)|0x80;
 207   2                      P2 = LEDCode[jL];
 208   2      
 209   2              }
 210   1              
 211   1      }


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