打印
[国产单片机]

stc驱动rc632读卡器问题

[复制链接]
1352|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
fengsth|  楼主 | 2014-5-7 11:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
fengsth|  楼主 | 2014-5-7 11:36 | 只看该作者
我的程序:
void main(void)   
{   
    InitializeSystem();   
    Rc632Ready();
        PcdAntennaOff();   
    DelayMs(10);
    PcdAntennaOn();   
    PcdConfigISOType( 'B' );   
    while(1)   
    {   
        if(M531PiccRequestB(PICC_REQBSTD,0,0,g_cReceBuf)==MI_OK)   
        {   
                        P2 &=0xe7; //ºìÂÌɫָʾµÆÁÁ  
        }   
    }   
}


void InitializeSystem(void)   
{   
//IO¿Ú³õʼ»¯   
    P0 = 0xff;   
    P1 = 0xff;   
    P2 = 0xff;   
    P3 = 0xff;   
          
    SCON = 0x50;       //SCON: serail mode 1, 8-bit UART, enable ucvr
        TMOD &= 0x0F;   
    TMOD = 0x21;       //TMOD: timer 1, mode 2, 8-bit reload
        PCON = 0x80;   
    TH1  = 0xFd;       //Baud:9600  fosc=11.0592MHz   
    TL1  = TH1;   
    TR1 = 1;          // timer 1 run   
    ES  = 0;   
    EA  = 0;
        IE |= 0x90;
}  



/////////////////////////////////////////////////////////////////////   
//³õʼ»¯RC632   
/////////////////////////////////////////////////////////////////////   
void Rc632Ready(void)   
{   
    char status;   
    DelayMs(100);   
    DelayMs(100);   
    DelayMs(100);   
    DelayMs(100);   
    DelayMs(100);   
    DelayMs(100);   
    DelayMs(100);   
   
   
    status = PcdReset();   
    if(status != MI_OK)   
    {   
        DelayMs(10);   
        status = PcdReset();   
    }   
    if(status != MI_OK)   
    {   
        DelayMs(10);   
        status = PcdReset();   
    }   
    if(status == MI_OK)   
    {   
        //ºìɫָʾµÆÁÁ£¬±íʾRC632¸´Î»³É¹¦
                 P2 &= 0xef;   
    }         
}


//REQUEST B   
//////////////////////////////////////////////////////////////////////   
char M531PiccRequestB(unsigned char req_code,   
                      unsigned char AFI,   
                      unsigned char N,   
                      unsigned char *ATQB)   
{   
    char  status;   
    struct TranSciveBuffer MfComData;   
    struct TranSciveBuffer *pi;   
    pi=&MfComData;   
   
    ClearBitMask(RegControl,0x08);      // disable crypto 1 unit      
      
    SetBitMask(RegTxControl,0x03);      // Tx2RF-En, Tx1RF-En enable   
   
    PcdSetTmo(5);   
    MfComData.MfCommand = PCD_TRANSCEIVE;   
    MfComData.MfLength  = 3;   
    MfComData.MfData[0] = ISO14443B_ANTICOLLISION;             // APf code   
    MfComData.MfData[1] = AFI;                //   
    MfComData.MfData[2] = ((req_code<<3)&0x08) | (N&0x07);  // PARAM   
   
    status = PcdComTransceive(pi);   
   
    if (status!=MI_OK && status!=MI_NOTAGERR)   
    {  
        status = MI_COLLERR;   }   
      
    if (MfComData.MfLength != 96)   
    {
            //P2 &= 0xf7;  
            status = MI_COM_ERR;   /////程序就跑到这里
        }   
      
    if (status == MI_OK)   
    {     
        memcpy(ATQB, &MfComData.MfData[0], 16);   
        PcdSetTmo(ATQB[11]>>4);   
    }      
    return status;   
}


  

使用特权

评论回复
板凳
fengsth|  楼主 | 2014-5-7 13:57 | 只看该作者
这论坛就没人解释么

使用特权

评论回复
地板
旭日东起| | 2014-5-7 14:31 | 只看该作者
本帖最后由 旭日东起 于 2014-5-7 15:24 编辑

网上有很多用 SPI  做的例子,可以下载参考一下

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
fengsth + 1 赞一个!
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

10

帖子

0

粉丝