历史上的今天
今天是:2024年10月25日(星期五)
2019年10月25日 | 单片机RFID高频RC632读卡程序,14443A,B.15693,都有
2019-10-25 来源:51hei
这是51单片机并行口rc632读卡程序
单片机源程序如下:
#include #include #include #include "main.h" #include "slrc632.h" #include "iso14443a.h" #include "iso14443b.h" #include "iso15693.h" /*Declare SFR associated with the IAP */ sfr IAP_DATA = 0xE2; //Flash data register sfr IAP_ADDRH = 0xE3; //Flash address HIGH sfr IAP_ADDRL = 0xE4; //Flash address LOW sfr IAP_CMD = 0xE5; //Flash command register sfr IAP_TRIG = 0xE6; //Flash command trigger sfr IAP_CONTR = 0xE7; //Flash control register //硬件版本号 unsigned char code hardmodel[12] = {"SL601F-0512"}; bit g_bReceOk; //正确接收到上位机指令标志 bit g_bReceAA; //接收到上位机发送的AA字节标志 bit g_bRc632Ok; //RC632复位正常标志 bit g_bIblock; void outputconvery (); unsigned char Readcard_flag,start_flag=0,startnum=0; unsigned int idata g_cReceNum; //接收到上位机的字节数 unsigned int data g_cCommand; //接收到的命令码 unsigned char data g_cSNR[4]; //M1卡序列号 unsigned char g_cIcdevH; //设备标记 unsigned char g_cIcdevL; //设备标记 unsigned char g_cFWI; // unsigned char idata g_cCidNad,huankuaiflag=0; // unsigned char idata g_cReceBuf[64]; //和上位机通讯时的缓冲区 unsigned char idata canshu[5]={0x00,0x00,0x00,0x10,0x01};//0:扇区,1:块,2-3:卡号首尾位置,4:读卡方式 unsigned char idata key[6]={0xFF,0xFF,0xFF,0xFF,0xFF,0xFF};//密码 unsigned char idata canshuflag=0,timenum=0,UID[4]; struct TranSciveBuffer{unsigned char MfCommand; unsigned int MfLength; unsigned char MfData[64]; }; /***************************定时器0初始化********************************/ void timer0init (void)//22.1184MHZ,20ms { TH0=0x70; TL0=0x00; ET0=1; TR0=1; TMOD=0x21; } /*****************************定时器0中断函数********************************/ void timer0(void) interrupt 1 { TH0=0x70; TL0=0x00; timenum++; if(timenum==100) canshuflag=1,timenum=0; } void gonggongdaima(void) { IAP_TRIG = 0x46;//发送46h到触发寄存器 IAP_TRIG = 0xB9;//发送B9h到触发寄存器 _nop_();//延时 IAP_CONTR = 0;//关闭IAP功能 IAP_CMD = 0;//清空命令寄存器 IAP_TRIG = 0;//清空命令触发寄存器 IAP_ADDRH = 0;//清空地址高位 IAP_ADDRL = 0;//清空地址低位 } /**************************字节读函数***************************************/ unsigned char Byte_Read(unsigned int add) { IAP_DATA = 0x00;//清空数据 IAP_CONTR = 0x81;//打开IAP,设置操作等待时间 IAP_CMD = 0x01;//字节读命令 IAP_ADDRH = add>>8;//设置高8位地址 IAP_ADDRL = add&0x00ff;//设置低8位地址 gonggongdaima(); return (IAP_DATA);//返回读到的数据 } /*****************************字节编程函数*****************************/ void Byte_Program(unsigned int add, unsigned char dat) { IAP_CONTR = 0x81;//打开IAP,设置操作等待时间 IAP_CMD = 0x02;//字节编程命令 IAP_ADDRH = add>>8;//设置高8位地址 IAP_ADDRL = add&0x00ff;//设置低8位地址 IAP_DATA = dat;//要编程的数据先送进IAP_DATA寄存器 gonggongdaima(); } /*****************************扇区擦除函数****************************/ void Sector_Erase(unsigned int add) { IAP_CONTR = 0x81;//打开IAP,设置操作等待时间 IAP_CMD = 0x03;//扇区擦除命令 IAP_ADDRH = add>>8;//设置高8位地址 IAP_ADDRL = add&0x00ff;//设置低8位地? gonggongdaima(); } /****************************读取参数函数************************/ void Read_canshu(void) { canshu[0]=Byte_Read(0x8000); canshu[1]=Byte_Read(0x8001); canshu[2]=Byte_Read(0x8002); canshu[3]=Byte_Read(0x8003); canshu[4]=Byte_Read(0x8004); } void Read_Akey(void) { key[0]=Byte_Read(0x8200); key[1]=Byte_Read(0x8201); key[2]=Byte_Read(0x8202); key[3]=Byte_Read(0x8203); key[4]=Byte_Read(0x8204); key[5]=Byte_Read(0x8205); } void Read_Bkey(void) { key[0]=Byte_Read(0x8400); key[1]=Byte_Read(0x8401); key[2]=Byte_Read(0x8402); key[3]=Byte_Read(0x8403); key[4]=Byte_Read(0x8404); key[5]=Byte_Read(0x8405); } /****************************保存参数函数****************************/ void Save_canshu(void) { Sector_Erase(0x8000);//擦除扇区 Byte_Program(0x8000,canshu[0]); Byte_Program(0x8001,canshu[1]); Byte_Program(0x8002,canshu[2]); Byte_Program(0x8003,canshu[3]); Byte_Program(0x8004,canshu[4]); } void Save_Akey(void) { Sector_Erase(0x8200);//擦除扇区 Byte_Program(0x8200,key[0]); Byte_Program(0x8201,key[1]); Byte_Program(0x8202,key[2]); Byte_Program(0x8203,key[3]); Byte_Program(0x8204,key[4]); Byte_Program(0x8205,key[5]); } void Save_Bkey(void) { Sector_Erase(0x8400);//擦除扇区 Byte_Program(0x8400,key[0]); Byte_Program(0x8401,key[1]); Byte_Program(0x8402,key[2]); Byte_Program(0x8403,key[3]); Byte_Program(0x8404,key[4]); Byte_Program(0x8405,key[5]); } void delay(unsigned int i) { unsigned char j; while(i--) for(j=0;j<200;j++); } void BEEP(unsigned char i) { unsigned char k; k=100; sond = 0; redled = 1; blueled = 0; delay(k); sond =1; blueled = 1; redled = 0; } void REDON(void) { redled = 1; } void REDOFF(void) { redled = 0; } void BLUEON(void) { blueled = 1; } void BLUEOFF(void) { blueled = 0; } void main( ) { InitializeSystem( ); Rc632Ready( ); PcdConfigISOType( '1' ); BEEP(2); DelayMs(1000); RC632_CE=0;
史海拾趣
|
当用运算放大器组成放大倍数绝对值小于1的回路时电路会怎么样? 内部补偿的恒定GBP的运放在放大倍数大于等于1时可以保证电路稳定,但当组成小于1的电路时会否引起电路稳定性问题??… 查看全部问答> |
|
S3C2440+WinCE5.0平台上,用EVC开发串口接收程序,请问串口能每隔1ms收到1字节的数据吗? 我编的应用程序实时性很差, … 查看全部问答> |
|
我们公司开发的m600驱动模组能驱动1024*768以下不同厂家不同分辨率的TFT。需要资料的可以跟我联系。 boy_201a@163.com 13501104029 qq 781558807 张凯… 查看全部问答> |
|
https://bbs.eeworld.com.cn/upfiles/img/20096/2009630164127921.rar 相关链接:https://bbs.eeworld.com.cn/upfiles/img/20096/2009630164127921.rar… 查看全部问答> |




