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

📄 reader.lst

📁 基于at89s52的读mifare1卡c51源程序.单片机与rfid读卡模块yhy502相连。单片机与上位机通过串口进行通信
💻 LST
📖 第 1 页 / 共 2 页
字号:
 198   2              }
 199   1              SCL = 0;
 200   1              return SUCCESS;
 201   1      }
 202          /*****************************************************************************
 203          *function: IIC send ACK
 204          *****************************************************************************/
 205          void I2CSendAck(void)
 206          {
 207   1              SDA = 0;
 208   1              _nop_();
 209   1              SCL = 1;
 210   1              SCL = 0;
 211   1      }
 212          /*****************************************************************************
 213          *function: IIC send Not ACK
 214          *****************************************************************************/
 215          void I2CSendNotAck(void)
 216          {
 217   1              SDA = 1;
 218   1              _nop_();
 219   1              SCL = 1;
 220   1              SCL = 0;
 221   1      }
 222          /*****************************************************************************
 223          *function: send a byte over IIC bus
 224          *****************************************************************************/
 225          void I2CSendByte(unsigned char cSendByte)
 226          {
 227   1              unsigned char data i = 8;
 228   1              while (i--)
 229   1              {
 230   2                      SCL = 0;
 231   2                      SDA = (bit)(cSendByte & 0x80);
 232   2                      cSendByte += cSendByte;
 233   2                      _nop_();
 234   2                      SCL = 1;
 235   2              }
 236   1              SCL = 0;
 237   1      }
 238          /*****************************************************************************
 239          *function: receive a byte over IIC bus
C51 COMPILER V8.12   READER                                                                03/07/2009 23:13:12 PAGE 5   

 240          *****************************************************************************/
 241          unsigned char I2CReceiveByte(void)
 242          {
 243   1              unsigned char data i = 8;
 244   1              unsigned char data cR_Byte = 0;
 245   1              SDA = 1;
 246   1              while (i--)
 247   1              {
 248   2                      cR_Byte += cR_Byte;
 249   2                      SCL = 0;
 250   2                      _nop_();  
 251   2                      _nop_();
 252   2                      SCL = 1;
 253   2                      cR_Byte |= (unsigned char)SDA;
 254   2              }
 255   1              SCL = 0;
 256   1              return cR_Byte;
 257   1      }
 258          /*****************************************************************************
 259          *function: read data from HY502 over IIC bus
 260          *****************************************************************************/
 261          unsigned char IicReadHY502(unsigned char *cP)
 262          {
 263   1              unsigned char cCnt;
 264   1              unsigned char cCheckSum = 0;
 265   1              for (cCnt=0; cCnt<0xFF; cCnt++) // wait HY502 working, while it's working, it will send "not ACK" to IIC 
             -master
 266   1              {
 267   2                      delay(1);
 268   2                      I2CStart();
 269   2                      I2CSendByte(READ_HY502);
 270   2                      if (I2CWaitAck() == SUCCESS)
 271   2                      {
 272   3                              break;
 273   3                      }
 274   2              }
 275   1              if (0xFF == cCnt)
 276   1              {
 277   2                      return FAILURE;
 278   2              }
 279   1              cP[0]=2;
 280   1              for (cCnt=0; cCnt<cP[0]; cCnt++)        // in the protocol, cP[0] is the length of this data package
 281   1              {
 282   2                      cP[cCnt] = I2CReceiveByte();
 283   2                      I2CSendAck();
 284   2                      cCheckSum ^= cP[cCnt];
 285   2              }
 286   1              cP[cCnt] = I2CReceiveByte();
 287   1              I2CSendNotAck();
 288   1              I2CStop();
 289   1              if (cCheckSum != cP[cCnt])
 290   1              {
 291   2                      return FAILURE;
 292   2              }
 293   1              else
 294   1              {
 295   2                      return SUCCESS;
 296   2              }
 297   1      }
 298          /*****************************************************************************
 299          *function: send data to HY502 over IIC bus
 300          *****************************************************************************/
C51 COMPILER V8.12   READER                                                                03/07/2009 23:13:12 PAGE 6   

 301          unsigned char IicSendHY502(unsigned char *cP)
 302          {
 303   1              unsigned char i;
 304   1              unsigned char cCheckSum = 0;
 305   1              I2CStart();
 306   1              I2CSendByte(WRITE_HY502);
 307   1              if (I2CWaitAck() == SUCCESS)
 308   1              {
 309   2                      for(i=0; i<cP[0]; i++)  // in the protocol, cP[0] is the length of this data package
 310   2                      {
 311   3                              cCheckSum ^= cP[i];
 312   3                              I2CSendByte(cP[i]);
 313   3                              if (I2CWaitAck() != SUCCESS)
 314   3                              {
 315   4                                      return FAILURE;
 316   4                              }
 317   3                      }
 318   2                      I2CSendByte(cCheckSum);
 319   2                      if (I2CWaitAck() != SUCCESS)
 320   2                      {
 321   3                              return FAILURE;
 322   3                      }                
 323   2                      I2CStop();
 324   2              return SUCCESS;
 325   2              }
 326   1              else
 327   1              {
 328   2                      return FAILURE;
 329   2              }
 330   1      }
 331          
 332          void send_str(unsigned char *str)
 333          {
 334   1        unsigned char i = 0;
 335   1      
 336   1        while (str[i] != '\0')
 337   1        {
 338   2          SBUF = str[i++];
 339   2          while (!TI)
 340   2            ;
 341   2          //等待数据传送完毕
 342   2          TI = 0; //清中断标志
 343   2        }
 344   1      }
 345          
 346          void main(void)
 347          {
 348   1              unsigned char idata cStatus;
 349   1              P2=0xff;            
 350   1              InitializeSystem();                // 初始化系统   
 351   1      
 352   1      
 353   1              IT0 = 0; //低电平触发
 354   1              //   IT0=1;              //下降沿触发
 355   1              //IT1 = 0; //低电平触发
 356   1              //   IT1=1;              //下降沿触发
 357   1      
 358   1              EA = 1; //总中断允许
 359   1              //EX1 = 1; //开启INT1中断
 360   1              EX0 = 1; //开启INT0中断
 361   1              cp[0]='f';
 362   1              cp[1]='u';
C51 COMPILER V8.12   READER                                                                03/07/2009 23:13:12 PAGE 7   

 363   1              cp[2]='c';
 364   1              cp[3]='k';
 365   1              cp[4]=' ';
 366   1              cp[5]='y';
 367   1              cp[6]='o';
 368   1              cp[7]='u';
 369   1              send_str(cp);
 370   1              g_cReceBuf[0]=0x2;
 371   1              g_cReceBuf[1]=0x20;
 372   1              cStatus =IicSendHY502(g_cReceBuf);//ComSearchCard);       // 发送寻卡命令  
 373   1              if(cStatus==0)
 374   1                      P2=0x00;                         
 375   1              cStatus =IicReadHY502(cp);                // 读取卡号并存入到cP
 376   1              send_str(cp);
 377   1              while(1);
 378   1      }
 379          
 380          void INT0_Proc(void) interrupt 0
 381          {
 382   1              EX0=0;
 383   1              P2=0x00;
 384   1              delay_1ms(2000);
 385   1              P2=0xff;
 386   1              EX0=1;
 387   1      
 388   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    652    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     31      11
   IDATA SIZE       =     34       1
   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 + -