亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? rc522.c

?? RC522讀寫控制C代碼
?? C
字號:
#include <intrins.h>
#include "reg52.h"
#include "main.h"
#include "mfrc522.h"
#define MAXRLEN 18
                              
/////////////////////////////////////////////////////////////////////
//功    能:尋卡
//參數說明: req_code[IN]:尋卡方式
//                0x52 = 尋感應區內所有符合14443A標準的卡
//                0x26 = 尋未進入休眠狀態的卡
//          pTagType[OUT]:卡片類型代碼
//                0x4400 = Mifare_UltraLight
//                0x0400 = Mifare_One(S50)
//                0x0200 = Mifare_One(S70)
//                0x0800 = Mifare_Pro(X)
//                0x4403 = Mifare_DESFire
//返    回: 成功返回MI_OK
/////////////////////////////////////////////////////////////////////
char PcdRequest(unsigned char req_code,unsigned char *pTagType)
{
   char status;  
   unsigned int  unLen;
   unsigned char ucComMF522Buf[MAXRLEN]; 
//  unsigned char xTest ;
   ClearBitMask(Status2Reg,0x08);
   WriteRawRC(BitFramingReg,0x07);

//  xTest = ReadRawRC(BitFramingReg);
//  if(xTest == 0x07 )
 //   { LED_GREEN  =0 ;}
 // else {LED_GREEN =1 ;while(1){}}
   SetBitMask(TxControlReg,0x03);
 
   ucComMF522Buf[0] = req_code;

   status = PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,1,ucComMF522Buf,&unLen);
//     if(status  == MI_OK )
//   { LED_GREEN  =0 ;}
//   else {LED_GREEN =1 ;}
   if ((status == MI_OK) && (unLen == 0x10))
   {    
       *pTagType     = ucComMF522Buf[0];
       *(pTagType+1) = ucComMF522Buf[1];
   }
   else
   {   status = MI_ERR;   }
   
   return status;
}

/////////////////////////////////////////////////////////////////////
//功    能:防沖撞
//參數說明: pSnr[OUT]:卡片序列號,4字節
//返    回: 成功返回MI_OK
/////////////////////////////////////////////////////////////////////  
char PcdAnticoll(unsigned char *pSnr)
{
    char status;
    unsigned char i,snr_check=0;
    unsigned int  unLen;
    unsigned char ucComMF522Buf[MAXRLEN]; 
    

    ClearBitMask(Status2Reg,0x08);
    WriteRawRC(BitFramingReg,0x00);
    ClearBitMask(CollReg,0x80);
 
    ucComMF522Buf[0] = PICC_ANTICOLL1;
    ucComMF522Buf[1] = 0x20;

    status = PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,2,ucComMF522Buf,&unLen);

    if (status == MI_OK)
    {
    	 for (i=0; i<4; i++)
         {   
             *(pSnr+i)  = ucComMF522Buf[i];
             snr_check ^= ucComMF522Buf[i];
         }
         if (snr_check != ucComMF522Buf[i])
         {   status = MI_ERR;    }
    }
    
    SetBitMask(CollReg,0x80);
    return status;
}

/////////////////////////////////////////////////////////////////////
//功    能:選定卡片
//參數說明: pSnr[IN]:卡片序列號,4字節
//返    回: 成功返回MI_OK
/////////////////////////////////////////////////////////////////////
char PcdSelect(unsigned char *pSnr)
{
    char status;
    unsigned char i;
    unsigned int  unLen;
    unsigned char ucComMF522Buf[MAXRLEN]; 
    
    ucComMF522Buf[0] = PICC_ANTICOLL1;
    ucComMF522Buf[1] = 0x70;
    ucComMF522Buf[6] = 0;
    for (i=0; i<4; i++)
    {
    	ucComMF522Buf[i+2] = *(pSnr+i);
    	ucComMF522Buf[6]  ^= *(pSnr+i);
    }
    CalulateCRC(ucComMF522Buf,7,&ucComMF522Buf[7]);
  
    ClearBitMask(Status2Reg,0x08);

    status = PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,9,ucComMF522Buf,&unLen);
    
    if ((status == MI_OK) && (unLen == 0x18))
    {   status = MI_OK;  }
    else
    {   status = MI_ERR;    }

    return status;
}


/////////////////////////////////////////////////////////////////////
//功    能:命令卡片進入休眠狀態
//返    回: 成功返回MI_OK
/////////////////////////////////////////////////////////////////////
char PcdHalt(void)
{
    char status;
    unsigned int  unLen;
    unsigned char ucComMF522Buf[MAXRLEN]; 

    ucComMF522Buf[0] = PICC_HALT;
    ucComMF522Buf[1] = 0;
    CalulateCRC(ucComMF522Buf,2,&ucComMF522Buf[2]);
 
    status = PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,4,ucComMF522Buf,&unLen);

    return MI_OK;
}

/////////////////////////////////////////////////////////////////////
//用MF522計算CRC16函數
/////////////////////////////////////////////////////////////////////
void CalulateCRC(unsigned char *pIndata,unsigned char len,unsigned char *pOutData)
{
    unsigned char i,n;
    ClearBitMask(DivIrqReg,0x04);
    WriteRawRC(CommandReg,PCD_IDLE);
    SetBitMask(FIFOLevelReg,0x80);
    for (i=0; i<len; i++)
    {   WriteRawRC(FIFODataReg, *(pIndata+i));   }
    WriteRawRC(CommandReg, PCD_CALCCRC);
    i = 0xFF;
    do 
    {
        n = ReadRawRC(DivIrqReg);
        i--;
    }
    while ((i!=0) && !(n&0x04));
    pOutData[0] = ReadRawRC(CRCResultRegL);
    pOutData[1] = ReadRawRC(CRCResultRegM);
}

/////////////////////////////////////////////////////////////////////
//功    能:復位RC522
//返    回: 成功返回MI_OK
/////////////////////////////////////////////////////////////////////
char PcdReset(void)
{
    MF522_RST=1;
    _nop_();
    MF522_RST=0;
    _nop_();
    MF522_RST=1;
     _nop_();
    WriteRawRC(CommandReg,PCD_RESETPHASE);
    _nop_();
    
    WriteRawRC(ModeReg,0x3D);            //和Mifare卡通訊,CRC初始值0x6363
    WriteRawRC(TReloadRegL,30);           
    WriteRawRC(TReloadRegH,0);
    WriteRawRC(TModeReg,0x8D);
    WriteRawRC(TPrescalerReg,0x3E);
    WriteRawRC(TxAutoReg,0x40);     
    return MI_OK;
}
//////////////////////////////////////////////////////////////////////
//設置RC632的工作方式 
//////////////////////////////////////////////////////////////////////
char M500PcdConfigISOType(unsigned char type)
{
   if (type == 'A')                     //ISO14443_A
   { 
       ClearBitMask(Status2Reg,0x08);

 /*     WriteRawRC(CommandReg,0x20);    //as default   
       WriteRawRC(ComIEnReg,0x80);     //as default
       WriteRawRC(DivlEnReg,0x0);      //as default
	   WriteRawRC(ComIrqReg,0x04);     //as default
	   WriteRawRC(DivIrqReg,0x0);      //as default
	   WriteRawRC(Status2Reg,0x0);//80    //trun off temperature sensor
	   WriteRawRC(WaterLevelReg,0x08); //as default
       WriteRawRC(ControlReg,0x20);    //as default
	   WriteRawRC(CollReg,0x80);    //as default
*/
       WriteRawRC(ModeReg,0x3D);//3F
/*	   WriteRawRC(TxModeReg,0x0);      //as default???
	   WriteRawRC(RxModeReg,0x0);      //as default???
	   WriteRawRC(TxControlReg,0x80);  //as default???

	   WriteRawRC(TxSelReg,0x10);      //as default???
   */
       WriteRawRC(RxSelReg,0x86);//84
 //      WriteRawRC(RxThresholdReg,0x84);//as default
 //      WriteRawRC(DemodReg,0x4D);      //as default

 //      WriteRawRC(ModWidthReg,0x13);//26
       WriteRawRC(RFCfgReg,0x7F);   //4F
	/*   WriteRawRC(GsNReg,0x88);        //as default???
	   WriteRawRC(CWGsCfgReg,0x20);    //as default???
       WriteRawRC(ModGsCfgReg,0x20);   //as default???
*/
   	   WriteRawRC(TReloadRegL,30);//tmoLength);// TReloadVal = 'h6a =tmoLength(dec) 
	   WriteRawRC(TReloadRegH,0);
       WriteRawRC(TModeReg,0x8D);
	   WriteRawRC(TPrescalerReg,0x3E);
	   

  //     PcdSetTmo(106);
       DelayMs(1);
       PcdAntennaOn();
   }
   else{ return -1; }
   
   return MI_OK;
}
/////////////////////////////////////////////////////////////////////
//功    能:讀RC632寄存器
//參數說明:Address[IN]:寄存器地址
//返    回:讀出的值
/////////////////////////////////////////////////////////////////////
unsigned char ReadRawRC(unsigned char Address)
{
     unsigned char i, ucAddr;
     unsigned char ucResult=0;

     MF522_SCK = 0;
     MF522_NSS = 0;
     ucAddr = ((Address<<1)&0x7E)|0x80;

     for(i=8;i>0;i--)
     {
         MF522_SI = ((ucAddr&0x80)==0x80);
         MF522_SCK = 1;
         ucAddr <<= 1;
         MF522_SCK = 0;
     }

     for(i=8;i>0;i--)
     {
         MF522_SCK = 1;
         ucResult <<= 1;
         ucResult|=(bit)MF522_SO;
         MF522_SCK = 0;
     }

     MF522_NSS = 1;
     MF522_SCK = 1;
     return ucResult;
}

/////////////////////////////////////////////////////////////////////
//功    能:寫RC632寄存器
//參數說明:Address[IN]:寄存器地址
//          value[IN]:寫入的值
/////////////////////////////////////////////////////////////////////
void WriteRawRC(unsigned char Address, unsigned char value)
{  
    unsigned char i, ucAddr;

    MF522_SCK = 0;
    MF522_NSS = 0;
    ucAddr = ((Address<<1)&0x7E);

    for(i=8;i>0;i--)
    {
        MF522_SI = ((ucAddr&0x80)==0x80);
        MF522_SCK = 1;
        ucAddr <<= 1;
        MF522_SCK = 0;
    }

    for(i=8;i>0;i--)
    {
        MF522_SI = ((value&0x80)==0x80);
        MF522_SCK = 1;
        value <<= 1;
        MF522_SCK = 0;
    }
    MF522_NSS = 1;
    MF522_SCK = 1;
}

/////////////////////////////////////////////////////////////////////
//功    能:置RC522寄存器位
//參數說明:reg[IN]:寄存器地址
//          mask[IN]:置位值
/////////////////////////////////////////////////////////////////////
void SetBitMask(unsigned char reg,unsigned char mask)  
{
    char tmp = 0x0;
    tmp = ReadRawRC(reg);
    WriteRawRC(reg,tmp | mask);  // set bit mask
}

/////////////////////////////////////////////////////////////////////
//功    能:清RC522寄存器位
//參數說明:reg[IN]:寄存器地址
//          mask[IN]:清位值
/////////////////////////////////////////////////////////////////////
void ClearBitMask(unsigned char reg,unsigned char mask)  
{
    char tmp = 0x0;
    tmp = ReadRawRC(reg);
    WriteRawRC(reg, tmp & ~mask);  // clear bit mask
} 

/////////////////////////////////////////////////////////////////////
//功    能:通過RC522和ISO14443卡通訊
//參數說明:Command[IN]:RC522命令字
//          pInData[IN]:通過RC522發送到卡片的數據
//          InLenByte[IN]:發送數據的字節長度
//          pOutData[OUT]:接收到的卡片返回數據
//          *pOutLenBit[OUT]:返回數據的位長度
/////////////////////////////////////////////////////////////////////
char PcdComMF522(unsigned char Command, 
                 unsigned char *pInData, 
                 unsigned char InLenByte,
                 unsigned char *pOutData, 
                 unsigned int  *pOutLenBit)
{
    char status = MI_ERR;
    unsigned char irqEn   = 0x00;
    unsigned char waitFor = 0x00;
    unsigned char lastBits;
    unsigned char n;
    unsigned int i;
    switch (Command)
    {
       case PCD_AUTHENT:
          irqEn   = 0x12;
          waitFor = 0x10;
          break;
       case PCD_TRANSCEIVE:
          irqEn   = 0x77;
          waitFor = 0x30;
          break;
       default:
         break;
    }
   
    WriteRawRC(ComIEnReg,irqEn|0x80);
    ClearBitMask(ComIrqReg,0x80);
    WriteRawRC(CommandReg,PCD_IDLE);
    SetBitMask(FIFOLevelReg,0x80);
    
    for (i=0; i<InLenByte; i++)
    {   WriteRawRC(FIFODataReg, pInData[i]);    }
    WriteRawRC(CommandReg, Command);
   
    
    if (Command == PCD_TRANSCEIVE)
    {    SetBitMask(BitFramingReg,0x80);  }
    
//    i = 600;//根據時鐘頻率調整,操作M1卡最大等待時間25ms
 i = 2000;
    do 
    {
         n = ReadRawRC(ComIrqReg);
         i--;
    }
    while ((i!=0) && !(n&0x01) && !(n&waitFor));
    ClearBitMask(BitFramingReg,0x80);
	      
    if (i!=0)
    {    
         if(!(ReadRawRC(ErrorReg)&0x1B))
         {
             status = MI_OK;
             if (n & irqEn & 0x01)
             {   status = MI_NOTAGERR;   }
             if (Command == PCD_TRANSCEIVE)
             {
               	n = ReadRawRC(FIFOLevelReg);
              	lastBits = ReadRawRC(ControlReg) & 0x07;
                if (lastBits)
                {   *pOutLenBit = (n-1)*8 + lastBits;   }
                else
                {   *pOutLenBit = n*8;   }
                if (n == 0)
                {   n = 1;    }
                if (n > MAXRLEN)
                {   n = MAXRLEN;   }
                for (i=0; i<n; i++)
                {   pOutData[i] = ReadRawRC(FIFODataReg);    }
            }
         }
         else
         {   status = MI_ERR;   }
        
   }
   

   SetBitMask(ControlReg,0x80);           // stop timer now
   WriteRawRC(CommandReg,PCD_IDLE); 
   return status;
}


/////////////////////////////////////////////////////////////////////
//開啟天線  
//每次啟動或關閉天險發射之間應至少有1ms的間隔
/////////////////////////////////////////////////////////////////////
void PcdAntennaOn()
{
    unsigned char i;
    i = ReadRawRC(TxControlReg);
    if (!(i & 0x03))
    {
        SetBitMask(TxControlReg, 0x03);
    }
}


/////////////////////////////////////////////////////////////////////
//關閉天線
/////////////////////////////////////////////////////////////////////
void PcdAntennaOff()
{
    ClearBitMask(TxControlReg, 0x03);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
中文字幕免费在线观看视频一区| 日韩 欧美一区二区三区| 欧美videossexotv100| 欧美探花视频资源| 色综合一区二区三区| 成人午夜短视频| 国产高清亚洲一区| 国产美女av一区二区三区| 免费在线欧美视频| 免费观看久久久4p| 免费精品视频在线| 九九精品一区二区| 国内久久精品视频| 国产一区视频在线看| 国产一区二区在线影院| 国产精品综合二区| 高清在线观看日韩| 成人天堂资源www在线| av亚洲精华国产精华精华 | jlzzjlzz亚洲日本少妇| 成人国产一区二区三区精品| 色综合久久久久网| 在线看国产一区二区| 欧美日韩三级一区二区| 在线不卡免费欧美| 日韩欧美一区电影| 久久久久久久久久久久久夜| 国产精品第13页| 亚洲精品中文在线观看| 亚洲福利一二三区| 久久精品国产99久久6| 国产成人精品1024| 91丝袜国产在线播放| 欧美色男人天堂| 日韩精品一区二区三区在线观看 | 日本不卡123| 久久国产生活片100| 丁香网亚洲国际| 欧美优质美女网站| 欧美一级欧美三级在线观看| 国产亚洲制服色| 亚洲乱码一区二区三区在线观看| 亚洲成在人线免费| 麻豆91在线看| www..com久久爱| 制服丝袜中文字幕一区| 国产午夜精品福利| 一区二区激情小说| 久久99国产乱子伦精品免费| av在线播放不卡| 欧美一区二区三区在线观看| 国产精品午夜久久| 亚洲国产精品久久久久秋霞影院| 精品一区二区三区av| 成人久久18免费网站麻豆 | 日韩一区二区视频在线观看| 久久久电影一区二区三区| 亚洲欧美激情一区二区| 免费观看在线综合色| av不卡免费电影| 日韩亚洲欧美成人一区| 国产精品乱码妇女bbbb| 日日夜夜免费精品视频| 高清不卡在线观看av| 欧美精品乱码久久久久久| 欧美国产日韩亚洲一区| 日日骚欧美日韩| 91最新地址在线播放| 日韩免费观看高清完整版在线观看| 亚洲日本在线观看| 韩国精品主播一区二区在线观看| 欧美无砖专区一中文字| 国产亚洲精品福利| 日韩av一区二区在线影视| proumb性欧美在线观看| 欧美mv日韩mv国产网站| 亚洲无人区一区| 91亚洲国产成人精品一区二区三| 日韩精品一区在线观看| 亚洲午夜电影在线观看| 91亚洲国产成人精品一区二三| 久久久九九九九| 美腿丝袜亚洲三区| 在线视频一区二区三区| 国产日韩精品视频一区| 久久99久久99| 91麻豆精品国产| 亚洲影院理伦片| 91在线码无精品| 国产精品天美传媒| 九九精品一区二区| 日韩一区二区免费高清| 午夜精品福利在线| 色94色欧美sute亚洲13| 中文字幕一区二区三区乱码在线| 国产原创一区二区| 精品国产免费视频| 人人爽香蕉精品| 在线播放/欧美激情| 亚洲一区在线观看网站| 日本高清成人免费播放| 亚洲欧美日本韩国| 成a人片亚洲日本久久| 久久久不卡影院| 粉嫩高潮美女一区二区三区| 久久精品一区二区| 国产一区二区调教| 2024国产精品| 国产精品资源在线观看| 久久人人爽人人爽| 国产精品影视网| 国产亚洲精品7777| 成人在线一区二区三区| 中文字幕欧美日本乱码一线二线| 国产99久久精品| 国产精品对白交换视频| 91蜜桃免费观看视频| 亚洲视频综合在线| 91丨porny丨国产入口| 亚洲精选视频在线| 精品视频在线看| 午夜激情一区二区三区| 日韩一区二区影院| 黄网站免费久久| 国产午夜亚洲精品羞羞网站| 成人美女视频在线观看| 国产精品美日韩| 日本高清免费不卡视频| 香蕉加勒比综合久久| 91精品国产综合久久国产大片| 免费久久精品视频| 久久久一区二区三区捆绑**| 成人免费毛片app| 亚洲日本成人在线观看| 欧美在线免费观看亚洲| 丝袜亚洲另类欧美综合| 欧美mv日韩mv国产网站app| 国产馆精品极品| 亚洲美女淫视频| 69精品人人人人| 国产一区二区三区久久悠悠色av| 国产精品蜜臀av| 欧美日韩www| 国产一区二区福利| 国产精品理论片在线观看| 91黄色在线观看| 久久国产成人午夜av影院| 久久久精品天堂| 欧美亚州韩日在线看免费版国语版| 日韩高清中文字幕一区| 久久久精品免费观看| 色又黄又爽网站www久久| 日韩不卡一区二区| 国产精品久久二区二区| 欧美日韩免费电影| 国产剧情一区二区三区| 亚洲自拍都市欧美小说| 久久久亚洲精品石原莉奈| 91麻豆6部合集magnet| 美女脱光内衣内裤视频久久网站| 国产精品婷婷午夜在线观看| 欧美另类z0zxhd电影| 国产丶欧美丶日本不卡视频| 亚洲午夜视频在线观看| 久久亚洲二区三区| 欧美影院一区二区| 国产一区二区美女| 亚洲午夜精品在线| 久久久综合精品| 欧美美女直播网站| a在线播放不卡| 精品亚洲欧美一区| 一区二区三区加勒比av| 久久久99精品久久| 在线播放视频一区| 91网址在线看| 国产成人欧美日韩在线电影| 日产精品久久久久久久性色| 亚洲日本va午夜在线影院| 日韩精品中文字幕一区| 精品视频123区在线观看| 成人激情图片网| 国产一区二区调教| 青娱乐精品视频| 亚洲国产日韩精品| 一区精品在线播放| 久久久久久免费网| 666欧美在线视频| 91久久免费观看| 白白色 亚洲乱淫| 国内外成人在线| 久久精品国产澳门| 日韩精品一二三四| 亚洲一区中文日韩| 亚洲欧美日本韩国| 最新久久zyz资源站| 欧美国产日韩在线观看| 久久久久久久久久久黄色| 日韩免费高清电影| 3d动漫精品啪啪1区2区免费|