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

📄 verify4442.lst

📁 非接触式IC卡读和取程序与pcb设计原理图
💻 LST
字号:
C51 COMPILER V6.23a  VERIFY4442                                                            08/25/2003 19:43:12 PAGE 1   


C51 COMPILER V6.23a, COMPILATION OF MODULE VERIFY4442
OBJECT MODULE PLACED IN Verify4442.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE Verify4442.c BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          
   2          #include <stdio.h>
   3          #include <intrins.h>
   4          #include <reg51.h>
   5          #include <Verify4442.h>
   6          main()
   7          {
   8   1              init();
   9   1              if(IC_In == 1)
  10   1              {
  11   2                      IC_VCCC = 1;
  12   2                      IC_VCC_LED = ON;
  13   2                      Delay10us();            
  14   2                      ResetCard();                            //
  15   2                      IC_Verify_Flag = Verify(PassWord[0],PassWord[1],PassWord[2]);
  16   2                      BreakOperate();
  17   2                      Delay10us();
  18   2                      //if( IC_Verify_Flag == True)
  19   2                      //{
  20   2                              WriteMainMem(0xff,0xff);
  21   2                              Delay10us();
  22   2                              WriteMainMem(0xe0,0xe0);
  23   2                      //}
  24   2                      Delay10us();
  25   2                      ResetCard();
  26   2                      Verify_Send();
  27   2                      Delay10us();
  28   2                      IC_VCCC = 0;
  29   2              }
  30   1      }
  31          
  32          bit Verify(uchar pt1,pt2,pt3)
  33          {
  34   1           uchar idata temp[4];                //暂存4字节的保密区内容
  35   1           uchar i;
  36   1           SendComm(RSM_COMM,0xff,0xff);        //读密码存储区的命令字,第2,3个参数在此命令中被忽略
  37   1           ReadMode(temp, 4);                   //读出
  38   1               IC_PassWord[4] = temp[4];       
  39   1           if((temp[0] & 0x07) != 0)            //第一字节是错误计数器,如果错误计数器为0,直接退出
  40   1           {
  41   2               if((temp[0] & 0x07)==0x07)     // 00000111
  42   2                      i = 0x06;
  43   2               else if((temp[0] & 0x07)==0x06)// 00000110 
  44   2                      i = 0x04;
  45   2               else if((temp[0] & 0x07)==0x04)// 00000100
  46   2                         i = 0x00;               //将其中一位为1的改为0
  47   2              SendComm(WSM_COMM,0,i);            //修改错误计数器
  48   2              ProcessMode();                  //处理
  49   2              //for (i = 1; i < 4; i++, pt++)   //校对3字节的密码
  50   2              //{
  51   2                   SendComm(VER_COMM,1,pt1);  //发出校对命令,
  52   2                   ProcessMode();             //处理
  53   2                   SendComm(VER_COMM,2,pt2);  //发出校对命令,
  54   2                   ProcessMode();             //处理
  55   2                   SendComm(VER_COMM,3,pt3);  //发出校对命令,
C51 COMPILER V6.23a  VERIFY4442                                                            08/25/2003 19:43:12 PAGE 2   

  56   2                   ProcessMode();             //处理
  57   2              //}
  58   2              SendComm(WSM_COMM,0,0xff);      //擦除计数器恢复错误计数器
  59   2              ProcessMode();                  //处理
  60   2              SendComm(RSM_COMM,0xff,0xff);   //读密码存储区的命令字,第2,3个参数在此命令中被忽略
  61   2              ReadMode(temp, 4);              //读错误计数器的内容
  62   2              if((temp[0] & 0x07)==0x07)      //如果没有被成功擦除,表明校对失败
  63   2                   return 1 ;
  64   2           }
  65   1           return 0;
  66   1      }
  67          
  68          
  69          void SendComm(uchar a,uchar b,uchar c)
  70          {
  71   1          StartComm();          //开始发送命令
  72   1          WriteByte(a);          //a: 发命令字
  73   1          WriteByte(b);          //b: 发地址
  74   1          WriteByte(c);          //c: 发数据
  75   1          StopComm();           //结束发送命令
  76   1      }
  77          
  78          void StartComm(void)
  79          {
  80   1          IC_CLK = 0;
  81   1          IC_IO  = 1;
  82   1          Delay5us();
  83   1          IC_CLK = 1;
  84   1          Delay5us();
  85   1          IC_IO  = 0;
  86   1          Delay5us();
  87   1      }
  88          
  89          void WriteByte(uchar ch)
  90          {
  91   1          uchar i;
  92   1          for(i = 8; i > 0; i--)
  93   1          {
  94   2              IC_CLK = 0;
  95   2              IC_IO = (bit)(ch & 0x01);     
  96   2              Delay5us();
  97   2              IC_CLK = 1;
  98   2              Delay10us();
  99   2              ch = ch >> 1;                 //右移一位
 100   2          }
 101   1      }
 102          
 103          uchar ReadByte(void)
 104          {
 105   1          uchar i,ch;
 106   1          ch = 0;
 107   1          for (i = 8; i > 0; i--)
 108   1          {
 109   2              IC_CLK = 0;
 110   2              ch = ch >> 1;           //从低位读起 
 111   2              if((uchar)IC_IO)
 112   2                  ch |= 0x80;
 113   2              Delay5us();
 114   2              IC_CLK = 1;
 115   2              Delay5us();
 116   2          }
 117   1          return ch;
C51 COMPILER V6.23a  VERIFY4442                                                            08/25/2003 19:43:12 PAGE 3   

 118   1      }
 119          
 120          
 121          void StopComm(void)
 122          {
 123   1          IC_CLK = 0;
 124   1          IC_IO  = 0;
 125   1          Delay5us();
 126   1          IC_CLK = 1;        //CLK: H
 127   1          Delay5us();
 128   1          IC_IO  = 1;        //IO : H
 129   1          Delay10us();
 130   1      }
 131          
 132          void ReadMode(uchar idata *pt,uchar count)
 133          {
 134   1          IC_CLK=0;
 135   1          Delay5us();
 136   1          do
 137   1          {
 138   2              *pt = ReadByte();    //读入一个字节
 139   2              pt++;                //指针加一
 140   2          }while(--count);             //计数器减一,判断
 141   1      }
 142          
 143          void BreakOperate(void)
 144          {
 145   1           IC_CLK = 0;
 146   1           IC_RST = 0;
 147   1           IC_IO  = 0;
 148   1           Delay5us();
 149   1           IC_RST = 1;
 150   1           IC_IO  = 1;
 151   1           Delay5us();
 152   1           IC_RST = 0;
 153   1           Delay5us();
 154   1               IC_VCCC = 0;
 155   1      }
 156          
 157          void ResetCard(void)
 158          {
 159   1          uchar temp;
 160   1          Delay5us();    
 161   1          IC_RST = 0;        
 162   1          IC_CLK = 0;     
 163   1          IC_IO  = 1;    
 164   1          Delay5us();      
 165   1          IC_RST = 1;
 166   1          Delay5us();
 167   1          IC_CLK = 1;
 168   1          Delay10us();
 169   1          Delay10us();
 170   1          Delay10us();
 171   1          Delay10us();
 172   1          IC_CLK = 0;
 173   1          Delay5us();
 174   1          IC_RST = 0;
 175   1          Delay10us();       
 176   1          temp = ReadByte();
 177   1          temp = ReadByte();
 178   1          temp = ReadByte();
 179   1          temp = ReadByte();  
C51 COMPILER V6.23a  VERIFY4442                                                            08/25/2003 19:43:12 PAGE 4   

 180   1          IC_CLK = 0;         
 181   1          Delay5us();        
 182   1          IC_IO  = 1;         
 183   1          _nop_();           
 184   1          IC_CLK = 0;         
 185   1          Delay5us();
 186   1          
 187   1      }
 188          
 189          void Delay10us(void)
 190          {
 191   1          _nop_();
 192   1          _nop_();
 193   1          _nop_();
 194   1          _nop_();
 195   1          _nop_();
 196   1          _nop_();
 197   1      }
 198          
 199          void Delay5us(void)
 200          {
 201   1          _nop_();
 202   1          _nop_();
 203   1          _nop_();
 204   1      }
 205          
 206          
 207          void init()
 208          {
 209   1              //uchar i;
 210   1              TMOD=0x20;
 211   1              TL1=0xFd;
 212   1              TH1=0xFd;
 213   1              SCON=0x50;
 214   1              PCON=0x00;
 215   1              EA = 1;
 216   1              ES = 1;
 217   1              TR1=1;  
 218   1              IC_VCCC = 0;
 219   1              IC_In = 1;
 220   1              IC_Verify_LED = OFF;
 221   1              IC_Read_LED = OFF;
 222   1              IC_In_LED = OFF; 
 223   1              IC_VCC_LED = OFF;
 224   1              IC_Read_Flag = True;
 225   1              IC_Verify_Flag = False; 
 226   1      //      IC_Write_add = 0xE0;
 227   1      //      IC_Write_data = 0xE0;
 228   1      }
 229          
 230          void Verify_Send()
 231          {
 232   1              if(IC_Verify_Flag == True)
 233   1              {
 234   2                      SBUF = 0xff;
 235   2                      do{}
 236   2                      while(TI == 0);
 237   2                      TI = 0;
 238   2              }
 239   1              else
 240   1              {
 241   2                      SBUF = 0x00;
C51 COMPILER V6.23a  VERIFY4442                                                            08/25/2003 19:43:12 PAGE 5   

 242   2                      do{}
 243   2                      while(TI == 0);
 244   2                      TI = 0;
 245   2              }
 246   1      }
 247          
 248          void ProcessMode(void)
 249          {
 250   1          uint i;
 251   1          IC_CLK = 0;
 252   1          Delay5us();    
 253   1          IC_IO  = 0;
 254   1          for (i = 255; i > 0; i--)
 255   1          {
 256   2              IC_CLK = 1;
 257   2              Delay5us();
 258   2              IC_CLK = 0;
 259   2              Delay5us();
 260   2          }
 261   1          IC_IO  = 1;
 262   1      }
 263          
 264          void WriteMainMem(uchar addr,uchar Data)
 265          {
 266   1          ResetCard();
 267   1          SendComm(WMM_COMM, addr, Data);     //写主存的命令字,地址,数据
 268   1          ProcessMode();
 269   1          BreakOperate();    
 270   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    592    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     23      17
   IDATA SIZE       =   ----       4
   BIT SIZE         =      3    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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