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

📄 readromcode.lst

📁 ds1820或ds18b20的读序列码子程序
💻 LST
字号:
C51 COMPILER V7.06   READROMCODE                                                           02/25/2005 10:55:03 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE READROMCODE
OBJECT MODULE PLACED IN readromcode.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE readromcode.c DEBUG OBJECTEXTEND

stmt level    source

   1          #include <reg51.h>
   2          #include <absacc.h>
   3          #include <intrins.h>
   4          
   5          #define nop    _nop_()
   6          void write_bits(unsigned char,unsigned char);
   7          void write_byte(unsigned char,unsigned char);
   8          unsigned char read_bit(unsigned char);
   9          unsigned char read_byte(void);
  10          unsigned char reset_18b20(void);
  11          unsigned char correct(unsigned char*,unsigned char,unsigned char);
  12          void dly(void);
  13          unsigned char SearchRom(unsigned char *);
  14          
  15          sbit sline=P3^4;
  16          unsigned char LastDiscrepancy;
  17          unsigned char LastDeviceFlag;
  18          void main(void)
  19          
  20          {
  21   1              unsigned char Romnum[8];
  22   1          unsigned char result;
  23   1          unsigned char i;
  24   1          bit first;
  25   1              for(i=0;i<8;i++)
  26   1              {
  27   2                      Romnum[i]=0;
  28   2              }
  29   1          
  30   1          first=1;
  31   1          do
  32   1          {
  33   2              if(first)
  34   2              {
  35   3                  LastDiscrepancy=0;
  36   3                  LastDeviceFlag=0;
  37   3              }
  38   2              result=SearchRom(Romnum);
  39   2              if(first)
  40   2                  first=0;
  41   2          }while(result);
  42   1      }
  43          unsigned char SearchRom(unsigned char *Romnum)
  44          {
  45   1              unsigned char mask,rom_byte_num,last_zero;
  46   1              unsigned char id_bit,cmp_id_bit,id_bit_number;
  47   1          unsigned char SearchDirection;
  48   1              mask=0x01;
  49   1              rom_byte_num=0;
  50   1          id_bit_number=1;
  51   1          last_zero=0;
  52   1          if(!LastDeviceFlag)
  53   1          {
  54   2                  if(reset_18b20())
  55   2              {
C51 COMPILER V7.06   READROMCODE                                                           02/25/2005 10:55:03 PAGE 2   

  56   3                  write_byte(0xfe,0xf0);
  57   3                  do
  58   3                  {
  59   4                      id_bit=read_bit(0xfe);
  60   4                      cmp_id_bit=read_bit(0xfe);
  61   4                      if(id_bit==1&&cmp_id_bit==1)
  62   4                          {
  63   5                                 return(0);
  64   5                          }
  65   4                      if(id_bit!=cmp_id_bit)
  66   4                      {
  67   5                          SearchDirection=id_bit;
  68   5                      }
  69   4                          else 
  70   4                          {
  71   5                          if(id_bit_number<LastDiscrepancy)
  72   5                          {
  73   6                              SearchDirection=((Romnum[rom_byte_num]&mask)>0);    
  74   6                          }
  75   5                          else
  76   5                          {
  77   6                              SearchDirection=(id_bit_number==LastDiscrepancy);
  78   6                          }
  79   5                          if(SearchDirection==0)
  80   5                          {
  81   6                              last_zero=id_bit_number;
  82   6                          }
  83   5                      }
  84   4                      if(SearchDirection==1)
  85   4                          Romnum[rom_byte_num]|=mask;
  86   4                      else
  87   4                          Romnum[rom_byte_num]&=~mask;
  88   4      
  89   4                      write_bits(0xfe,SearchDirection);
  90   4                      id_bit_number++;
  91   4                              mask<<=1;
  92   4                              if(mask==0)
  93   4                              {
  94   5                                      rom_byte_num++;
  95   5                                      mask=0x01;
  96   5                              }
  97   4          
  98   4                      }while(rom_byte_num<8);
  99   3                  if(id_bit_number==65)
 100   3                  {
 101   4                      LastDiscrepancy=last_zero;
 102   4                      if(LastDiscrepancy==0)
 103   4                          LastDeviceFlag=1;
 104   4                  }
 105   3                      if(!correct(Romnum,8,0))
 106   3                      {
 107   4                      return(1);
 108   4                  }
 109   3          
 110   3              }
 111   2          }
 112   1          return(0);
 113   1      }
 114          
 115          void write_bits(unsigned char bitsite,unsigned char bitval)
 116          {
 117   1              unsigned char i;
C51 COMPILER V7.06   READROMCODE                                                           02/25/2005 10:55:03 PAGE 3   

 118   1              _nop_();
 119   1              P1=bitsite;
 120   1              for(i=0;i<3;i++);
 121   1              if(bitval)
 122   1              P1=0xff;
 123   1              for(i=0;i<7;i++);
 124   1              P1=0xff;
 125   1              for(i=0;i<3;i++);
 126   1      }
 127          unsigned char read_bit(unsigned char bitsite)
 128          {
 129   1              unsigned char i,temp;
 130   1              _nop_();
 131   1              P1=bitsite;
 132   1              _nop_();
 133   1              _nop_();
 134   1              _nop_();
 135   1              _nop_();
 136   1              _nop_();
 137   1              P1=0xff;
 138   1              for(i=0;i<3;i++);
 139   1              temp=P1;
 140   1              for(i=0;i<7;i++);
 141   1              P1=0xff;
 142   1              for(i=0;i<5;i++);
 143   1              return(temp&(~bitsite));
 144   1      }
 145          
 146          
 147          void write_byte(unsigned char cablesite,unsigned char val)
 148          {
 149   1              unsigned char i,temp;
 150   1              for(i=0;i<8;i++)
 151   1              {
 152   2                      temp=val&0x01;
 153   2                      val>>=1;
 154   2                      write_bits(cablesite,temp);
 155   2                      dly();
 156   2              }
 157   1      }
 158          
 159          unsigned char reset_18b20(void)
 160          {
 161   1          unsigned char j;
 162   1          bit tmp;
 163   1              _nop_();
 164   1              sline=0;
 165   1              for(j=0;j<167;j++);
 166   1              sline=1;
 167   1              for(j=0;j<20;j++);
 168   1          _nop_();
 169   1          for(j=0;j<255;j++)
 170   1              {
 171   2               tmp=sline;
 172   2               if(!tmp)
 173   2               {
 174   3                       for(j=0;j<167;j++);
 175   3                       return(1);
 176   3               }       
 177   2          }
 178   1              return(0);
 179   1      }
C51 COMPILER V7.06   READROMCODE                                                           02/25/2005 10:55:03 PAGE 4   

 180          void dly(void)
 181          {
 182   1              _nop_();
 183   1              _nop_();
 184   1              _nop_();
 185   1              _nop_();
 186   1              _nop_();
 187   1              _nop_();
 188   1              _nop_();
 189   1      }
 190          unsigned char correct(unsigned char*p,unsigned char length,unsigned char creatcode)
 191          {
 192   1              unsigned char i=0;
 193   1              while(length--)
 194   1              {
 195   2                      for(i=0;i<8;i++)
 196   2                      {
 197   3                              if((creatcode^*p)&0x01)
 198   3                                      creatcode=(creatcode>>1)^0x8c;
 199   3      
 200   3                              else
 201   3                                      creatcode=creatcode>>1;
 202   3                              *p=_cror_(*p,1);
 203   3      
 204   3                      }
 205   2                      p++;
 206   2              }
 207   1              return(creatcode);
 208   1      }
 209          
 210          
 211          
 212          


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