请教51单片机和RC522读卡器相关问题,无法寻卡
时间:10-02
整理:3721RD
点击:
想用51单片机和RC522连接,实现刷一下卡单片机上某个灯亮一下的功能,感觉这是最基础的,想先做出这一步再加一些复杂的功能,但是现在这一步也实现不了,不知道程序或连线有没有问题,麻烦帮我一下。
我是用I/O口模拟SPI通信
sbit MF522_NSS =P1^3 ;
sbit MF522_SCK = P1^4;
sbit MF522_SI = P1^5;
sbit MF522_SO = P1^6;
sbit MF522_RST = P1^7;
指示灯定义为
sbit LED = P1^0;
sbit LED1 = P1^1;
sbit LED2 = P1^2;
#include <STDIO.H>
#include <string.h>
#include "LPCREG.h"
#include "pindef.h"
#include "mfrc522.h"
unsigned char code DefaultKey[6] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
unsigned char g_ucTempbuf[20];
/////////////////////////////////////////////////////////////////////
//系统初始化
/////////////////////////////////////////////////////////////////////
void InitializeSystem()
{
P0M1 = 0x0; P0M2 = 0x0;
P1M1 = 0x0; P1M2 = 0x0;
P3M1 = 0x0; P3M2 = 0xFF;
P0 = 0xFF; P1 = 0xFF; P3 = 0xFF;P2 = 0xFF;
}
void main( )
{
unsigned char status;
InitializeSystem( );
PcdReset();
PcdAntennaOff();
PcdAntennaOn();
while ( 1 )
{
status = PcdRequest(PICC_REQALL, g_ucTempbuf);//寻卡
switch(status)
{
case MI_NOTAGERR: //status=-2;
LED=0;
break;
case MI_ERR: //status=-1;
LED1=0;
break;
case MI_OK: //status=0;
LED2=0;
break;
default:
P1=0xFF;
;
}
continue;
}
}
想先检查一下寻卡函数PcdRequest到底有没有起作用,所以用了switch语句,检查它到底返回的状态字到底是0还是-1还是-2(只有这三种状态),结果程序烧写进单片机后我还没刷卡第二个指示灯就亮了,也就是说返回的状态字是-1,不知道到底哪儿有问题,请帮我解答一下
我是用I/O口模拟SPI通信
sbit MF522_NSS =P1^3 ;
sbit MF522_SCK = P1^4;
sbit MF522_SI = P1^5;
sbit MF522_SO = P1^6;
sbit MF522_RST = P1^7;
指示灯定义为
sbit LED = P1^0;
sbit LED1 = P1^1;
sbit LED2 = P1^2;
#include <STDIO.H>
#include <string.h>
#include "LPCREG.h"
#include "pindef.h"
#include "mfrc522.h"
unsigned char code DefaultKey[6] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
unsigned char g_ucTempbuf[20];
/////////////////////////////////////////////////////////////////////
//系统初始化
/////////////////////////////////////////////////////////////////////
void InitializeSystem()
{
P0M1 = 0x0; P0M2 = 0x0;
P1M1 = 0x0; P1M2 = 0x0;
P3M1 = 0x0; P3M2 = 0xFF;
P0 = 0xFF; P1 = 0xFF; P3 = 0xFF;P2 = 0xFF;
}
void main( )
{
unsigned char status;
InitializeSystem( );
PcdReset();
PcdAntennaOff();
PcdAntennaOn();
while ( 1 )
{
status = PcdRequest(PICC_REQALL, g_ucTempbuf);//寻卡
switch(status)
{
case MI_NOTAGERR: //status=-2;
LED=0;
break;
case MI_ERR: //status=-1;
LED1=0;
break;
case MI_OK: //status=0;
LED2=0;
break;
default:
P1=0xFF;
;
}
continue;
}
}
想先检查一下寻卡函数PcdRequest到底有没有起作用,所以用了switch语句,检查它到底返回的状态字到底是0还是-1还是-2(只有这三种状态),结果程序烧写进单片机后我还没刷卡第二个指示灯就亮了,也就是说返回的状态字是-1,不知道到底哪儿有问题,请帮我解答一下
看你的描述,应该是初始化没有做好。
可否指点一下,哪一块的初始化,我是根据例程改的,其实很多地方不懂
这三个函数的实现你再看看,是不是有问题。
PcdReset();
PcdAntennaOff();
PcdAntennaOn();
这是RC522的库函数,应该没问题吧,厂家给的
你的rc522做好了吗? 我也需要用到,请问要怎么实现刷卡啊
少了头文件
#include<reg52.h>
#include <intrins.h>
端口定义不正确
13.56M PRO1520 pin对pin 兼容 CV520,RC522,FM17520,FM17522质量第一,价格第二。 E-mail:bin.hu@profact.net 扣扣:1101521061