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

📄 read2401a.lst

📁 非接触式IC卡读和取程序与pcb设计原理图
💻 LST
📖 第 1 页 / 共 2 页
字号:
 235   1              uchar BitCnt;
 236   1              retc = 0;
 237   1              SDA = 1;
 238   1              for(BitCnt=0;BitCnt<8;BitCnt++)
 239   1              {
 240   2                      _nop_();
 241   2                      SCL = 0;        //置时钟线为低,准备接收
C51 COMPILER V6.23a  READ2401A                                                             08/22/2003 17:48:00 PAGE 5   

 242   2                      _nop_();
 243   2                      _nop_();
 244   2                      _nop_();
 245   2                      _nop_();
 246   2                      _nop_();
 247   2                      SCL = 1;        //置时钟线为高使得数据有效
 248   2                      _nop_();
 249   2                      _nop_();
 250   2                      retc = retc << 1;       //左移补零
 251   2                      if (SDA == 1)
 252   2                      retc = retc + 1;        //当数据为真加一
 253   2                      _nop_();
 254   2                      _nop_();
 255   2              }
 256   1              SCL = 0;
 257   1              _nop_();
 258   1              _nop_();
 259   1              return(retc);
 260   1      }
 261          
 262          void init()
 263          {
 264   1              TMOD=0x20;
 265   1              TL1=0xFd;
 266   1              TH1=0xFd;
 267   1              SCON=0x50;
 268   1              PCON=0x00;
 269   1              EA = 1;
 270   1              ES = 1;
 271   1              TR1=1;  
 272   1              Card_Read_LED = OFF;
 273   1              Card_Write_LED = OFF;
 274   1              Card_Insert_LED = OFF;
 275   1              Card_Power_LED = OFF;
 276   1              RST = OFF;
 277   1              Card_In = 1;
 278   1              Card_Insert_Flag = False;
 279   1              Card_Power_Control = False;
 280   1              Card_Write_Flag = False;
 281   1              Card_Power_Flag = False;
 282   1              R_Counter = 0;
 283   1      }
 284          
 285          void R_Serial() interrupt 4 using 1
 286          {
 287   1              if( RI == 1)
 288   1              { 
 289   2                      uchar R_Temp;
 290   2                      RI = 0;
 291   2                      R_Temp = SBUF;                  
 292   2                      if(R_Counter==0)
 293   2                      {
 294   3                              if( R_Temp== 0xFF)
 295   3                              {
 296   4                                      R_Counter=0;    
 297   4                              }
 298   3                              else return;
 299   3                      }
 300   2                      else
 301   2                      {
 302   3                              R_Buffer[R_Counter -1] = R_Temp;
 303   3                  if( R_Counter == 4)
C51 COMPILER V6.23a  READ2401A                                                             08/22/2003 17:48:00 PAGE 6   

 304   3                          {
 305   4                          R_Counter=0;
 306   4                                      Deal_R_Buffer();        
 307   4                          return;
 308   4                      }
 309   3                      }
 310   2                      R_Counter++;
 311   2              }
 312   1      }
 313          
 314          void Write_Send()
 315          {
 316   1              SBUF =0xFF;             
 317   1              do{}
 318   1              while(TI == 0); 
 319   1              TI = 0;
 320   1              SBUF = 0x00;            
 321   1              do{}
 322   1              while(TI == 0); 
 323   1              TI = 0;
 324   1              SBUF = Write_Add;               
 325   1              do{}
 326   1              while(TI == 0); 
 327   1              TI = 0;
 328   1              SBUF = Write_Data;
 329   1              do{}
 330   1              while(TI == 0);
 331   1              TI = 0;
 332   1      }
 333          
 334          void Read_Send()
 335          {
 336   1              SBUF =0xFF;             
 337   1              do{}
 338   1              while(TI == 0); 
 339   1              TI = 0;
 340   1              SBUF = 0xFF;            
 341   1              do{}
 342   1              while(TI == 0); 
 343   1              TI = 0;
 344   1              SBUF = Read_Add;                
 345   1              do{}
 346   1              while(TI == 0); 
 347   1              TI = 0;
 348   1              SBUF = Read_Data;
 349   1              do{}
 350   1              while(TI == 0);
 351   1              TI = 0;
 352   1      }
 353          void Error_Send()
 354          {
 355   1              SBUF =0xFF;             
 356   1              do{}
 357   1              while(TI == 0); 
 358   1              TI = 0;
 359   1              SBUF = 0xFF;            
 360   1              do{}
 361   1              while(TI == 0); 
 362   1              TI = 0;
 363   1              SBUF = 0xFF;            
 364   1              do{}
 365   1              while(TI == 0); 
C51 COMPILER V6.23a  READ2401A                                                             08/22/2003 17:48:00 PAGE 7   

 366   1              TI = 0;
 367   1              SBUF = 0xFF;
 368   1              do{}
 369   1              while(TI == 0);
 370   1              TI = 0; 
 371   1      }
 372          
 373          void Deal_R_Buffer()
 374          {
 375   1              switch(R_Buffer[0])
 376   1              {       
 377   2                      case 0x55:
 378   2                      {
 379   3                              switch(R_Buffer[1])
 380   3                              {
 381   4                                      case 0xff:      
 382   4                                      {
 383   5                                              Card_Read_Flag = True;
 384   5                                              Read_Add = R_Buffer[2];
 385   5                                      }
 386   4                                              break;
 387   4                                      case 0x00:
 388   4                                      {       
 389   5                                              Card_Write_Flag = True;
 390   5                                              Write_Add = R_Buffer[2];
 391   5                                              Write_Data = R_Buffer[3]; 
 392   5                                      }
 393   4                                              break;
 394   4                                      default:        Error_Send();   
 395   4                              }               
 396   3                      }
 397   2                      break;
 398   2                      case  0xaa:     
 399   2                              switch(R_Buffer[1])
 400   2                              {
 401   3                                      case  0xff:     Card_Power_Flag = True; break;
 402   3                                      case  0x00:     Card_Power_Flag = False;        break;
 403   3                                      default:        Error_Send();
 404   3                              }
 405   2                                      break;
 406   2                      default:        Error_Send();
 407   2              }
 408   1      }
 409          
 410          void Write_Card()
 411          {
 412   1              Open_At24c01A();
 413   1              NOP();
 414   1              Start_I2C();
 415   1              SendByte(Write_At24c01A);
 416   1              if(ack == 1)
 417   1              {
 418   2                      SendByte(Write_Add);
 419   2                      if(ack == 1)
 420   2                      {
 421   3                              SendByte(Write_Data);
 422   3                              if(ack == 1)
 423   3                              {
 424   4                                      Write_Send();
 425   4                                      Card_Write_Flag = False;
 426   4                                      Stop_I2C();
 427   4                                      NOP();
C51 COMPILER V6.23a  READ2401A                                                             08/22/2003 17:48:00 PAGE 8   

 428   4                                      Close_At24c01A();       
 429   4                              }
 430   3                      }
 431   2              }
 432   1      
 433   1      }
 434          
 435          void Read_Card()
 436          {
 437   1              Open_At24c01A(); 
 438   1              NOP();
 439   1              Start_I2C();
 440   1              SendByte(Write_At24c01A);
 441   1              if(ack == 1)
 442   1              {
 443   2                      SendByte(Read_Add);
 444   2                      if(ack == 1)
 445   2                      {
 446   3                              Start_I2C();
 447   3                              SendByte(Read_At24c01A);
 448   3                              if(ack == 1)
 449   3                              {
 450   4                                      Read_Data = RevByte();
 451   4                                      Read_Send();
 452   4                                      Card_Read_Flag = False;
 453   4                                      Stop_I2C();
 454   4                                      NOP();
 455   4                                      Close_At24c01A();
 456   4                              }
 457   3                      }
 458   2              }
 459   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    667    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      9       1
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      5    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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