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

📄 wiegand.lst

📁 c8051f310xmodembootloader.rar
💻 LST
字号:
C51 COMPILER V8.16   WIEGAND                                                               12/10/2009 11:17:10 PAGE 1   


C51 COMPILER V8.16, COMPILATION OF MODULE WIEGAND
OBJECT MODULE PLACED IN wiegand.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE wiegand.c LARGE BROWSE INTVECTOR(0X1000) DEBUG OBJECTEXTEND

line level    source

   1          #include "global.h"
   2          
   3          
   4          
   5          /***************************************************************************************
   6          **函数功能:延时ms
   7          **入参:        uint x
   8          **返回值:      无
   9          **作者:        jerkoh
  10          **日期:        2009-03-16
  11          **说明:        无
  12          ***************************************************************************************/ 
  13          void delayms (unsigned int x)
  14          {
  15   1       unsigned int  j;
  16   1       while(x--)
  17   1           {  
  18   2             for(j=0;j<1500;j++){;}
  19   2           }
  20   1      }
  21          /***************************************************************************************
  22          **函数功能:延时us
  23          **入参:        uint t
  24          **返回值:      无
  25          **作者:        jerkoh
  26          **日期:        2009-03-16
  27          **说明:        无
  28          ***************************************************************************************/ 
  29          void delayus (unsigned int t)
  30          {
  31   1      
  32   1       while(t--)
  33   1           {
  34   2            _nop_();
  35   2           }
  36   1      }
  37          
  38          /***************************************************************************************
  39          **函数功能:wiegand发送
  40          **入参:    wie
  41          **返回值:      无
  42          **作者:        jerkoh
  43          **日期:        2009-03-16
  44          **说明:        判断wiegand格式
  45          ***************************************************************************************/
  46          
  47          void wiegandout(unsigned char wie,unsigned char chanl1)
  48          {
  49   1       unsigned char k,m;                      
  50   1       unsigned char xdata wiebak[6];        //备份wie
  51   1        switch(wie)
  52   1        {
  53   2         case 32:
  54   2          {
  55   3          
C51 COMPILER V8.16   WIEGAND                                                               12/10/2009 11:17:10 PAGE 2   

  56   3           for(k=2;k<6;k++)
  57   3            {
  58   4                  wiedataout(k,chanl1);
  59   4            }
  60   3              }
  61   2               break;
  62   2      
  63   2      
  64   2          case 40:
  65   2                {
  66   3                 for(k=1;k<6;k++)
  67   3             {
  68   4                   wiedataout(k,chanl1);
  69   4             }
  70   3                }
  71   2                 break;
  72   2      
  73   2              case 26:
  74   2              case 34:
  75   2                {
  76   3                      if(wie==26)
  77   3                        {m=3;}
  78   3                      else
  79   3                        {m=2;}
  80   3      
  81   3                 memcpy(wiebak,wiebuf,6);
  82   3      
  83   3      
  84   3                 if(even_parity(wie))    //str
  85   3                   
  86   3                 {
  87   4                         if(chanl1==CHANL_DIN)
  88   4                         {
  89   5                          D1IN=1;
  90   5                          delayus(90);               //50us脉冲宽度
  91   5                          D1IN=0;
  92   5                         }
  93   4                         else
  94   4                         {
  95   5                          D1OUT=1;
  96   5                              delayus(90);           //50us脉冲宽度
  97   5                              D1OUT=0;
  98   5                         }
  99   4      
 100   4      
 101   4                  }
 102   3                      else
 103   3                      {
 104   4                         if(chanl1==CHANL_DIN)
 105   4                         {
 106   5                          D0IN=1;
 107   5                          delayus(90);
 108   5                          D0IN=0;
 109   5                         }
 110   4                         else
 111   4                         {
 112   5                          D0OUT=1;
 113   5                          delayus(90);
 114   5                          D0OUT=0;
 115   5                         }      
 116   4                      }
 117   3                       delayms(2);
C51 COMPILER V8.16   WIEGAND                                                               12/10/2009 11:17:10 PAGE 3   

 118   3                       memcpy(wiebuf,wiebak,6);
 119   3                       
 120   3                   for(k=m;k<6;k++)
 121   3               {
 122   4                     wiedataout(k,chanl1);
 123   4               }       
 124   3                        
 125   3                 memcpy(wiebuf,wiebak,6);
 126   3                 if(odd_parity(wie))     //end
 127   3                   
 128   3                        {
 129   4                          if(chanl1==CHANL_DIN)
 130   4                          {
 131   5                           D1IN=1;
 132   5                           delayus(90);              //50us脉冲宽度
 133   5                           D1IN=0;
 134   5                              }
 135   4                              else
 136   4                              {
 137   5                               D1OUT=1;
 138   5                           delayus(90);              //50us脉冲宽度
 139   5                           D1OUT=0;
 140   5                              }
 141   4                        }
 142   3                      else
 143   3                        {
 144   4                          if(chanl1==CHANL_DIN)
 145   4                              {
 146   5                           D0IN=1;
 147   5                           delayus(90);
 148   5                           D0IN=0;
 149   5                              }
 150   4                              else
 151   4                              {
 152   5                               D0OUT=1;
 153   5                           delayus(90);
 154   5                           D0OUT=0;
 155   5                              }         
 156   4                        }
 157   3               }
 158   2               break;
 159   2      
 160   2         default:
 161   2            break;
 162   2                        
 163   2        }
 164   1        MSG_LIVE;                         //LED+BELL 100ms
 165   1      }
 166          /***************************************************************************************
 167          **函数功能:wiegand data out
 168          **入参:    wie
 169          **返回值:      无
 170          **作者:        jerkoh
 171          **日期:        2009-06-16
 172          **说明:        无
 173          ***************************************************************************************/
 174          void wiedataout(unsigned char k,unsigned char chanl2)
 175          {
 176   1        unsigned char i;
 177   1      
 178   1        for(i=0;i<8;i++)
 179   1                 {
C51 COMPILER V8.16   WIEGAND                                                               12/10/2009 11:17:10 PAGE 4   

 180   2                      if(wiebuf[k]&0x80)
 181   2                        {
 182   3                         if(chanl2==CHANL_DIN)
 183   3                         {
 184   4                          D1IN=1;
 185   4                          delayus(90);             //50us脉冲宽度
 186   4                          D1IN=0;
 187   4                         }
 188   3                         else
 189   3                         {
 190   4                          D1OUT=1;
 191   4                          delayus(90);             //50us脉冲宽度
 192   4                          D1OUT=0;
 193   4                         }
 194   3                         delayms(2);               //2ms脉冲间隔
 195   3                         wiebuf[k]<<=1;
 196   3                        }
 197   2                      else
 198   2                        {
 199   3                         if(chanl2==CHANL_DIN)
 200   3                         {
 201   4                          D0IN=1;
 202   4                          delayus(90);
 203   4                          D0IN=0;
 204   4                         }
 205   3                         else
 206   3                         {
 207   4                          D0OUT=1;
 208   4                          delayus(90);
 209   4                          D0OUT=0;
 210   4                         }
 211   3                         delayms(2);
 212   3                         wiebuf[k]<<=1;
 213   3                        }
 214   2                 }  
 215   1      }
 216          /***************************************************************************************
 217          **函数功能:Even_Parity    偶检验  前12bits or 前16bits
 218          **入参:    wiebuf, wieformat
 219          **返回值:      bit
 220          **作者:        jerkoh
 221          **日期:        2009-06-16
 222          **说明:        无
 223          ***************************************************************************************/
 224          bit even_parity(unsigned char wieformat)
 225          {
 226   1        unsigned char i,j;
 227   1        bit opt;
 228   1      
 229   1        if(wieformat==26)
 230   1         {
 231   2              for(i=0,j=0;i<8;i++)
 232   2                {   
 233   3              if(wiebuf[3]&0x80)
 234   3                        {
 235   4                         j++;
 236   4                        }
 237   3                       wiebuf[3]<<=1;
 238   3                }
 239   2          for(i=0;i<4;i++)
 240   2                {
 241   3                  if(wiebuf[4]&0x80)
C51 COMPILER V8.16   WIEGAND                                                               12/10/2009 11:17:10 PAGE 5   

 242   3                        {
 243   4                         j++;
 244   4                        }
 245   3                        wiebuf[4]<<=1;
 246   3                } 
 247   2         }
 248   1         else           //34
 249   1              {
 250   2                for(i=0,j=0;i<8;i++)
 251   2                {   
 252   3              if(wiebuf[2]&0x80)
 253   3                        {
 254   4                         j++;
 255   4                        }
 256   3                         wiebuf[2]<<=1;
 257   3                }
 258   2          for(i=0;i<8;i++)
 259   2                {
 260   3                  if(wiebuf[3]&0x80)
 261   3                        {
 262   4                         j++;
 263   4                        }
 264   3                        wiebuf[3]<<=1;
 265   3                } 
 266   2      
 267   2      
 268   2              }
 269   1      
 270   1      
 271   1      
 272   1         if((j&0x01)==0x01) opt=1;   
 273   1         else opt=0;   
 274   1         return(opt);   
 275   1      
 276   1         
 277   1      }
 278          
 279          
 280          /***************************************************************************************
 281          **函数功能:Odd_Parity     奇检验  后12bits or 后16bits
 282          **入参:    wiebuf,     wieformat
 283          **返回值:      bit
 284          **作者:        jerkoh
 285          **日期:        2009-06-16
 286          **说明:        无
 287          ***************************************************************************************/
 288          bit odd_parity(unsigned char wieformat)
 289          {
 290   1        unsigned char i,j;
 291   1        bit opt;
 292   1      
 293   1        if(wieformat==26)
 294   1         {
 295   2              wiebuf[4]<<=4; //先左移4位
 296   2      
 297   2              for(i=0,j=0;i<4;i++)
 298   2                {   
 299   3              if(wiebuf[4]&0x80)
 300   3                        {
 301   4                         j++;
 302   4                        }
 303   3                        wiebuf[4]<<=1;
C51 COMPILER V8.16   WIEGAND                                                               12/10/2009 11:17:10 PAGE 6   

 304   3                }
 305   2          for(i=0;i<8;i++)
 306   2                {
 307   3                  if(wiebuf[5]&0x80)
 308   3                        {
 309   4                         j++;
 310   4                        }
 311   3                         wiebuf[5]<<=1;
 312   3                } 
 313   2         }
 314   1         else                //34
 315   1              {
 316   2                for(i=0,j=0;i<8;i++)
 317   2                {   
 318   3              if(wiebuf[4]&0x80)
 319   3                        {
 320   4                         j++; 
 321   4                        }
 322   3                        wiebuf[4]<<=1;
 323   3                }
 324   2          for(i=0;i<8;i++)
 325   2                {
 326   3                  if(wiebuf[5]&0x80)
 327   3                        {
 328   4                         j++;
 329   4                        }
 330   3                        wiebuf[5]<<=1;
 331   3                } 
 332   2      
 333   2      
 334   2              }
 335   1      
 336   1      
 337   1      
 338   1         if((j&0x01)==0x01) opt=0;   
 339   1         else opt=1;   
 340   1         return(opt);   
 341   1      
 342   1      
 343   1      
 344   1      }


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