亚洲春色中文字幕久久久-三上亚,一吻二脱三床四吻胸,国产真实伦对白视频全集,在线毛片观看,精品成品入口黄网,国产毛aⅴ片久久久,亚洲AV色香蕉一区二区三区老师,萧皇后A级艳片,色情日本视频更新,99久久亚洲精品日本无码
標題:
51單片機 Rc632射頻識別器件驅動源碼
[打印本頁]
作者:
zplove57
時間:
2017-3-16 17:54
標題:
51單片機 Rc632射頻識別器件驅動源碼
51單片機,RC632射頻識別器件
,可以實現對支持14443A/B、15693協議的IC卡進行非接觸讀寫操作-51 MCU,RC632 RFID IC,ISO14443A/B、ISO15693,READ&WRITE
0.png
(69.81 KB, 下載次數: 62)
下載附件
2017-3-16 20:07 上傳
全部下載:
CLRC632_RFID_CODE.rar
(235.83 KB, 下載次數: 103)
2017-3-16 17:54 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
主程序:
#include <reg52.h>
#include <string.h>
#include <intrins.h>
#include "main.h"
#include "slrc632.h"
#include "iso14443a.h"
#include "iso14443b.h"
#include "iso15693.h"
//硬件版本號
unsigned char code hardmodel[12] = {"SL601F-0512"};
bit g_bReceOk; //正確接收到上位機指令標志
bit g_bReceAA; //接收到上位機發送的AA字節標志
bit g_bRc632Ok; //RC632復位正常標志
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; //
unsigned char idata g_cReceBuf[64]; //和上位機通訊時的緩沖區
struct TranSciveBuffer{unsigned char MfCommand;
unsigned int MfLength;
unsigned char MfData[64];
};
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=i*200;
sond = 0;
delay(k);
sond =1;
}
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( 'A' );
BEEP(1);
REDON();
BLUEOFF();
while ( 1 )
{
if (g_bReceOk)
{
g_bReceOk = 0;
RC632_CE=0;
switch(g_cCommand)
{
case 0x0101:
ComSetBound(); break;
case 0x0104:
ComGetHardModel(); break;
case 0x0108:
ComM632PcdConfigISOType(); break;
case 0x010C:
ComPcdAntenna(); break;
case 0x0201:
ComRequestA(); break;
case 0x0202:
ComAnticoll(); break;
case 0x0203:
ComSelect(); break;
case 0x0204:
ComHlta(); break;
case 0x0207:
ComAuthentication(); break;
case 0x0208:
ComM1Read(); break;
case 0x0209:
ComM1Write(); break;
case 0x020A:
ComM1Initval(); break;
case 0x020B:
ComM1Readval(); break;
case 0x020C:
ComM1Decrement(); break;
case 0x020D:
ComM1Increment(); break;
case 0x020E:
ComM1Restore(); break;
case 0x020F:
ComM1Transfer(); break;
case 0x0212:
ComUL_PcdAnticoll(); break;
case 0x0213:
ComUL_PcdWrite(); break;
case 0x0301:
ComTypeBRst(); break;
// case 0x1E:
// ComAttrib(); break;
case 0x0302:
ComHltb(); break;
case 0x0303:
ComCL_Deselect(); break;
case 0x0401:
ComRF020Check(); break;
case 0x0402:
ComRF020Read(); break;
case 0x0403:
ComRF020Write(); break;
case 0x0404:
ComRF020Lock(); break;
case 0x0405:
ComRF020Count(); break;
case 0x0406:
ComRF020Deselect(); break;
case 0x0501:
ComSelectSR(); break;
case 0x0502:
ComCompletionSR(); break;
case 0x0503:
ComReadSR176(); break;
case 0x0504:
ComWriteSR176(); break;
case 0x0505:
ComProtectSR176(); break;
case 0x0506:
ComReadSR4K(); break;
case 0x0507:
ComWriteSR4K(); break;
case 0x0508:
ComAuthSR4K(); break;
case 0x0509:
ComGetUIDSR4K(); break;
case 0x050A:
ComProtectSR4K(); break;
case 0x1000:
ComISO15693_Inventory16(); break;
case 0x1001:
ComISO15693_Inventory(); break;
case 0x1002:
ComISO15693_Stay_Quiet(); break;
case 0x1003:
ComISO15693_Select(); break;
case 0x1004:
ComISO15693_Reset_To_Ready();break;
case 0x1005:
ComISO15693_Read_sm(); break;
case 0x1006:
ComISO15693_Write_sm(); break;
case 0x1007:
ComISO15693_Lock_Block(); break;
case 0x1008:
ComISO15693_Write_AFI(); break;
case 0x1009:
ComISO15693_Lock_AFI(); break;
case 0x100A:
ComISO15693_Write_DSFID(); break;
case 0x100B:
ComISO15693_Lock_DSFID(); break;
case 0x100C:
ComISO15693_Get_System_Information(); break;
case 0x100D:
ComISO15693_Get_Multiple_Block_Security();break;
default:
AnswerErr( FAULT11 ); break;
}
REDOFF();
BLUEON();
sond = 1;
REDON();
BLUEOFF();
RC632_CE=1;
ES = 1;
EA=1;
}
}
}
/////////////////////////////////////////////////////////////////////
//系統初始化
/////////////////////////////////////////////////////////////////////
void InitializeSystem()
{
TMOD &= 0x0F;
TMOD |= 0x21;
PCON |= 0x80;
SCON = 0x50;
TH1 = TL1 = BOUND19200;
TR1=1;
P0 = P1 = P2 = P3 = 0xFF;
IE |= 0x90;
}
/////////////////////////////////////////////////////////////////////
//初始化RC632
/////////////////////////////////////////////////////////////////////
void Rc632Ready()
{
char status;
delay(100);
status = PcdReset();
if(status != MI_OK)
{
delay(10);
status = PcdReset();
}
if(status != MI_OK)
{
delay(10);
status = PcdReset();
}
if(status == MI_OK)
{
g_bRc632Ok = 1;
}
}
/////////////////////////////////////////////////////////////////////
//響應上位機發送的設置波特率命令
/////////////////////////////////////////////////////////////////////
void ComSetBound()
{
unsigned char bound = g_cReceBuf[6];
if (bound > 7)
{ AnswerErr(FAULT12); }
else
{
AnswerCommandOk();
TR1 = 0;
switch(bound)
{
case 0:
TH1=TL1=BOUND4800;
break;
case 1:
TH1=TL1=BOUND9600;
break;
case 2:
TH1=TL1=BOUND14400;
break;
case 3:
TH1=TL1=BOUND19200;
break;
case 4:
TH1=TL1=BOUND28800;
break;
case 5:
TH1=TL1=BOUND38400;
break;
case 6:
TH1=TL1=BOUND57600;
break;
case 7:
TH1=TL1=BOUND115200;
break;
default:
break;
}
TR1 = 1;
}
}
/////////////////////////////////////////////////////////////////////
//響應上位機發送的讀取硬件版本號命令
/////////////////////////////////////////////////////////////////////
void ComGetHardModel()
{
memcpy(&g_cReceBuf[0], &hardmodel[0], sizeof(hardmodel));
AnswerOk(&g_cReceBuf[0], sizeof(hardmodel));
}
/////////////////////////////////////////////////////////////////////
//響應上位機發送的設置RC632協議命令,ISO14443A/B或ISO15693
/////////////////////////////////////////////////////////////////////
void ComM632PcdConfigISOType()
{
if (MI_OK == PcdConfigISOType(g_cReceBuf[6]))
{ AnswerCommandOk(); }
else
{ AnswerErr(-1); }
}
/////////////////////////////////////////////////////////////////////
//響應上位機發送的天線命令
/////////////////////////////////////////////////////////////////////
void ComPcdAntenna()
{
char status;
if (!g_cReceBuf[6])
{ status = PcdAntennaOff(); }
else
{
DelayMs(10);
status = PcdAntennaOn();
DelayMs(10);
}
if (status == MI_OK)
{ AnswerCommandOk(); }
else
{ AnswerErr(FAULT10); }
}
/////////////////////////////////////////////////////////////////////
//響應上位機發送的尋A卡命令
/////////////////////////////////////////////////////////////////////
void ComRequestA()
{
unsigned char atq[2];
char status;
status = PcdRequest(g_cReceBuf[6], atq);
if (status != MI_OK)
{ status = PcdRequest(g_cReceBuf[6], atq); }
if (status == MI_OK)
{ AnswerOk(atq,2); }
else
{ AnswerErr(FAULT20); }
}
/////////////////////////////////////////////////////////////////////
//響應上位機發送的A卡防沖撞命令
/////////////////////////////////////////////////////////////////////
void ComAnticoll()
{
if (MI_OK == PcdAnticoll(&g_cSNR))
{ AnswerOk(&g_cSNR,4); }
else
{ AnswerErr(FAULT10); }
}
/////////////////////////////////////////////////////////////////////
//響應上位機發送的A卡鎖定命令
/////////////////////////////////////////////////////////////////////
void ComSelect()
{
if (MI_OK == PcdSelect(&g_cReceBuf[6], &g_cReceBuf[0]))
{ AnswerOk(&g_cReceBuf[0], 1); }
else
{ AnswerErr(FAULT10); }
}
/////////////////////////////////////////////////////////////////////
//響應上位機發送的A卡休眠命令
/////////////////////////////////////////////////////////////////////
void ComHlta()
{
if (MI_OK == PcdHalt())
{ AnswerCommandOk(); }
else
{ AnswerErr(FAULT10); }
}
/////////////////////////////////////////////////////////////////////
//響應上位機發送的A卡驗證密鑰命令
/////////////////////////////////////////////////////////////////////
void ComAuthentication()
{
char status = MI_COM_ERR;
unsigned char *pkeys,*pSNR;
pkeys = &g_cReceBuf[20];
pSNR = &g_cSNR;
if (MI_OK == ChangeCodeKey(&g_cReceBuf[8],pkeys)) //轉換密鑰格式
{
if (MI_OK == PcdAuthKey(pkeys)) //傳送密鑰到RC500FIFO
{
status = PcdAuthState(g_cReceBuf[6], g_cReceBuf[7], pSNR); //驗證密鑰
}
}
if (status == MI_OK)
{ AnswerCommandOk(); }
else
{ AnswerErr(FAULT22); }
}
/////////////////////////////////////////////////////////////////////
//響應上位機讀M1卡命令
/////////////////////////////////////////////////////////////////////
void ComM1Read()
{
if (MI_OK == PcdRead(g_cReceBuf[6], &g_cReceBuf[0]))
{ AnswerOk(&g_cReceBuf[0], 16); }
else
{ AnswerErr(FAULT23); }
}
/////////////////////////////////////////////////////////////////////
//響應上位機寫M1卡命令
/////////////////////////////////////////////////////////////////////
void ComM1Write()
{
if (MI_OK == PcdWrite(g_cReceBuf[6], &g_cReceBuf[7]))
{ AnswerCommandOk(); }
else
{ AnswerErr(FAULT24); }
}
/////////////////////////////////////////////////////////////////////
//響應上位機初始化錢包命令
/////////////////////////////////////////////////////////////////////
void ComM1Initval()
{
g_cReceBuf[11]=~g_cReceBuf[7];g_cReceBuf[12]=~g_cReceBuf[8];
g_cReceBuf[13]=~g_cReceBuf[9];g_cReceBuf[14]=~g_cReceBuf[10];
g_cReceBuf[15]=g_cReceBuf[7];g_cReceBuf[16]=g_cReceBuf[8];
g_cReceBuf[17]=g_cReceBuf[9];g_cReceBuf[18]=g_cReceBuf[10];
g_cReceBuf[19]=g_cReceBuf[6];g_cReceBuf[20]=~g_cReceBuf[6];
g_cReceBuf[21]=g_cReceBuf[6];g_cReceBuf[22]=~g_cReceBuf[6];
if (MI_OK == PcdWrite(g_cReceBuf[6], &g_cReceBuf[7]))
{ AnswerCommandOk(); }
else
{ AnswerErr(FAULT24); }
}
/////////////////////////////////////////////////////////////////////
//響應上位機讀錢包命令
/////////////////////////////////////////////////////////////////////
void ComM1Readval()
{
if (MI_OK == PcdRead(g_cReceBuf[6], &g_cReceBuf[0]))
{ AnswerOk(&g_cReceBuf[0], 4); }
else
{ AnswerErr(FAULT23); }
}
/////////////////////////////////////////////////////////////////////
//響應上位機扣款命令
/////////////////////////////////////////////////////////////////////
void ComM1Decrement()
{
if (MI_OK == PcdValue(PICC_DECREMENT, g_cReceBuf[6], &g_cReceBuf[7]))
{ AnswerCommandOk(); }
else
{ AnswerErr(FAULT24); }
}
/////////////////////////////////////////////////////////////////////
//響應上位機充值命令
/////////////////////////////////////////////////////////////////////
void ComM1Increment()
{
if (MI_OK == PcdValue(PICC_INCREMENT, g_cReceBuf[6], &g_cReceBuf[7]))
{ AnswerCommandOk(); }
else
{ AnswerErr(FAULT24); }
}
/////////////////////////////////////////////////////////////////////
//響應上位機M1卡回傳命令
/////////////////////////////////////////////////////////////////////
void ComM1Restore()
{
if (MI_OK == PcdRestore(g_cReceBuf[6]))
{ AnswerCommandOk(); }
else
{ AnswerErr(FAULT23); }
}
/////////////////////////////////////////////////////////////////////
//響應上位機M1卡值傳送命令
/////////////////////////////////////////////////////////////////////
void ComM1Transfer()
{
if (MI_OK == PcdTransfer(g_cReceBuf[6]))
{ AnswerCommandOk(); }
else
{ AnswerErr(FAULT24); }
}
/////////////////////////////////////////////////////////////////////
//響應上位機ultra light防沖撞命令
/////////////////////////////////////////////////////////////////////
void ComUL_PcdAnticoll()
{
if (MI_OK == UL_PcdAnticoll(&g_cReceBuf[0]))
{ AnswerOk(&g_cReceBuf[0], 7); }
else
{ AnswerErr(FAULT10); }
}
/////////////////////////////////////////////////////////////////////
//響應上位機ultra light寫卡命令
/////////////////////////////////////////////////////////////////////
void ComUL_PcdWrite()
{
if (MI_OK == UL_PcdWrite(g_cReceBuf[6], &g_cReceBuf[7]))
{ AnswerCommandOk(); }
else
{ AnswerErr(FAULT24); }
}
/////////////////////////////////////////////////////////////////////
//響應上位機高級復位TYPEB卡命令
/////////////////////////////////////////////////////////////////////
void ComTypeBRst()
{
unsigned char status;
if ((status = M531PiccRequestB(g_cReceBuf[6], 0, 0, &g_cReceBuf[0])) == MI_OK)
{
g_cFWI = 0xFF;//g_cReceBuf[11] >> 4;
g_cCidNad = 8;//((g_cReceBuf[11]&0x02)<<1) | ((g_cReceBuf[11]&0x01)<<3);
// status = M531PiccAttrib(&g_cReceBuf[1], g_cReceBuf[10]&0x0F, &g_cReceBuf[12]);
// }
// if (status == MI_OK) {
AnswerOk(&g_cReceBuf[0], 12); }
else
{ AnswerErr(FAULT21); }
}
/////////////////////////////////////////////////////////////////////
//響應上位機HLTB3命令
/////////////////////////////////////////////////////////////////////
void ComHltb()
{
if (MI_OK == M531PiccHltb(&g_cReceBuf[6]))
{ AnswerCommandOk(); }
else
{ AnswerErr(FAULT10); }
M531PiccAttrib(&g_cReceBuf[1], g_cReceBuf[10]&0x0F, &g_cReceBuf[12]);
}
/////////////////////////////////////////////////////////////////////
//響應上位機HLTB4命令
/////////////////////////////////////////////////////////////////////
void ComCL_Deselect()
{
if (MI_OK == CL_Deselect(0))
{ AnswerCommandOk(); }
else
{ AnswerErr(FAULT10); }
}
/////////////////////////////////////////////////////////////////////
//響應上位機AT88RF020卡驗證密鑰命令
/////////////////////////////////////////////////////////////////////
void ComRF020Check()
{
if (MI_OK == At88rf020Check(&g_cReceBuf[6]))
{ AnswerCommandOk(); }
else
{ AnswerErr(FAULT22); }
}
/////////////////////////////////////////////////////////////////////
//響應上位機AT88RF020卡讀命令
/////////////////////////////////////////////////////////////////////
void ComRF020Read()
{
if (MI_OK == At88rf020Read(g_cReceBuf[6], &g_cReceBuf[0]))
{ AnswerOk(&g_cReceBuf[0],8); }
else
{ AnswerErr(FAULT23); }
}
/////////////////////////////////////////////////////////////////////
//響應上位機AT88RF020卡寫命令
/////////////////////////////////////////////////////////////////////
void ComRF020Write()
{
if (MI_OK == At88rf020Write(g_cReceBuf[6], &g_cReceBuf[7]))
{ AnswerCommandOk(); }
else
{ AnswerErr(FAULT24); }
}
/////////////////////////////////////////////////////////////////////
//響應上位機AT88RF020卡LOCK命令
/////////////////////////////////////////////////////////////////////
void ComRF020Lock()
{
if (MI_OK == At88rf020Lock(&g_cReceBuf[6]))
{ AnswerCommandOk(); }
else
{ AnswerErr(FAULT24); }
}
/////////////////////////////////////////////////////////////////////
//響應上位機AT88RF020卡COUNT命令
/////////////////////////////////////////////////////////////////////
void ComRF020Count()
{
if (MI_OK == At88rf020Count(&g_cReceBuf[6]))
{ AnswerCommandOk(); }
else
{ AnswerErr(FAULT24); }
}
/////////////////////////////////////////////////////////////////////
//響應上位機AT88RF020卡DESELECT命令
/////////////////////////////////////////////////////////////////////
void ComRF020Deselect()
{
if (MI_OK == At88rf020Deselect())
{ AnswerCommandOk(); }
else
{ AnswerErr(FAULT10); }
}
/////////////////////////////////////////////////////////////////////
//響應上位機激活ST卡片命令
/////////////////////////////////////////////////////////////////////
void ComSelectSR()
{
if(MI_OK == SelectSR(&g_cReceBuf[0]))
{ AnswerOk(&g_cReceBuf[0],1); }
else
{ AnswerErr(FAULT20); }
}
/////////////////////////////////////////////////////////////////////
//響應上位機SR176讀塊命令
/////////////////////////////////////////////////////////////////////
void ComReadSR176()
{
if (MI_OK == ReadSR176(g_cReceBuf[6], &g_cReceBuf[0]))
{ AnswerOk(&g_cReceBuf[0],2); }
else
{ AnswerErr(FAULT23); }
}
/////////////////////////////////////////////////////////////////////
//響應上位機SR176寫塊命令
/////////////////////////////////////////////////////////////////////
void ComWriteSR176()
{
char status;
if((status = WriteSR176(g_cReceBuf[6], &g_cReceBuf[7])) == MI_OK)
{
DelayMs(5);
status = ReadSR176(g_cReceBuf[6], &g_cReceBuf[0]);
if((status==MI_OK) && (g_cReceBuf[0]==g_cReceBuf[7]) && (g_cReceBuf[1]==g_cReceBuf[8]))
{ AnswerCommandOk(); }
else
{ AnswerErr(FAULT24); }
}
else
{ AnswerErr(FAULT24); }
}
/////////////////////////////////////////////////////////////////////
//響應上位機SR176塊鎖定命令
/////////////////////////////////////////////////////////////////////
void ComProtectSR176()
{
char status;
if ((status = GetProtSR176(g_cReceBuf[0])) == MI_OK)
{
status = ProtectSR176(g_cReceBuf[6]);
if (status == MI_OK)
{
DelayMs(5);
status = GetProtSR176(g_cReceBuf[1]);
if ((g_cReceBuf[0]|g_cReceBuf[6]) != g_cReceBuf[1])
{ status = MI_COM_ERR; }
}
}
if (status == MI_OK)
{ AnswerCommandOk(); }
else
{ AnswerErr(FAULT24); }
}
/////////////////////////////////////////////////////////////////////
//響應上位機SR176卡COMPLETION命令
/////////////////////////////////////////////////////////////////////
void ComCompletionSR()
{
if (MI_OK == CompletionSR())
{ AnswerCommandOk(); }
else
{ AnswerErr(FAULT10); }
}
/////////////////////////////////////////////////////////////////////
//響應上位機SRIX4K讀塊命令
/////////////////////////////////////////////////////////////////////
void ComReadSR4K()
{
if (MI_OK == ReadSR4K(g_cReceBuf[6], &g_cReceBuf[0]))
{ AnswerOk(&g_cReceBuf[0],4); }
else
{ AnswerErr(FAULT23); }
}
/////////////////////////////////////////////////////////////////////
//響應上位機SRIX4K寫塊命令
/////////////////////////////////////////////////////////////////////
void ComWriteSR4K()
{
char status;
if ((status = WriteSR4K(g_cReceBuf[6], &g_cReceBuf[7])) == MI_OK)
{
DelayMs(7);
status = ReadSR4K(g_cReceBuf[6], &g_cReceBuf[0]);
if ((status==MI_OK) && (g_cReceBuf[0]==g_cReceBuf[7]) && (g_cReceBuf[1]==g_cReceBuf[8])
&& (g_cReceBuf[2]==g_cReceBuf[9]) && (g_cReceBuf[3]==g_cReceBuf[10]))
{ AnswerCommandOk(); }
else
{ AnswerErr(FAULT24); }
}
else
{ AnswerErr(FAULT24); }
}
/////////////////////////////////////////////////////////////////////
//響應上位機SRIX4K卡AUTHENTICATE命令
/////////////////////////////////////////////////////////////////////
void ComAuthSR4K()
{
if (MI_OK == AuthSR4K(&g_cReceBuf[6], &g_cReceBuf[0]))
{ AnswerOk(&g_cReceBuf[0], 3); }
else
{ AnswerErr(FAULT22); }
}
/////////////////////////////////////////////////////////////////////
//響應上位機SRIX4K讀UID命令
/////////////////////////////////////////////////////////////////////
void ComGetUIDSR4K()
{
if (MI_OK == GetUIDSR4K(&g_cReceBuf[0]))
{ AnswerOk(&g_cReceBuf[0], 8); }
else
{ AnswerErr(FAULT23); }
}
/////////////////////////////////////////////////////////////////////
//響應上位機SRIX4K塊鎖定命令
/////////////////////////////////////////////////////////////////////
void ComProtectSR4K()
{
char status;
if ((status = ReadSR4K(0xFF, &g_cReceBuf[0])) == MI_OK)
{
status = WriteSR4K(0xFF, &g_cReceBuf[6]);
if (status == MI_OK)
{
DelayMs(7);
status = ReadSR4K(0xFF, &g_cReceBuf[1]);
if ((g_cReceBuf[0]&g_cReceBuf[6]) != g_cReceBuf[1])
{ status = MI_COM_ERR; }
}
}
if (status == MI_OK )
{ AnswerCommandOk(); }
else
{ AnswerErr(FAULT24); }
}
/////////////////////////////////////////////////////////////////////
//響應上位機ISO15693_Inventory命令
/////////////////////////////////////////////////////////////////////
void ComISO15693_Inventory16()
{
if (MI_OK == ISO15693_Inventory16(0x16,0x00,0x00,&g_cReceBuf[0],&g_cReceBuf[0], &g_cReceBuf[1]))
{ AnswerOk(&g_cReceBuf[1], g_cReceBuf[0]); }
else
{ AnswerErr( FAULT20 ); }
}
/////////////////////////////////////////////////////////////////////
//響應上位機ISO15693_Inventory命令
/////////////////////////////////////////////////////////////////////
void ComISO15693_Inventory()
{
if (MI_OK == ISO15693_Inventory(0x36,0x00,0x00,&g_cReceBuf[0],&g_cReceBuf[0]))
{ AnswerOk(&g_cReceBuf[0], 9); }
else
{ AnswerErr( FAULT20 ); }
}
/////////////////////////////////////////////////////////////////////
//響應上位機ISO15693_Stay_Quiet命令
/////////////////////////////////////////////////////////////////////
void ComISO15693_Stay_Quiet()
{
if (MI_OK == ISO15693_Stay_Quiet(0x22, &g_cReceBuf[6]))
{ AnswerCommandOk(); }
else
{ AnswerErr(FAULT10); }
}
/////////////////////////////////////////////////////////////////////
//響應上位機ISO15693_Select命令
/////////////////////////////////////////////////////////////////////
void ComISO15693_Select()
{
if (MI_OK == ISO15693_Select(0x22, &g_cReceBuf[6]))
{ AnswerCommandOk(); }
else
{ AnswerErr(FAULT10); }
}
/////////////////////////////////////////////////////////////////////
//響應上位機ISO15693_Reset_To_Ready命令
/////////////////////////////////////////////////////////////////////
void ComISO15693_Reset_To_Ready()
{
unsigned char flags = 0x02;
flags |= g_cReceBuf[6] << 4;
if (MI_OK == ISO15693_Reset_To_Ready(flags, &g_cReceBuf[7]) )
{ AnswerCommandOk(); }
else
{ AnswerErr(FAULT10); }
}
/////////////////////////////////////////////////////////////////////
//響應上位機ISO15693_Read命令
/////////////////////////////////////////////////////////////////////
void ComISO15693_Read_sm()
{
unsigned char flags = 0x02;
flags |= g_cReceBuf[6] << 4;
if (MI_OK == ISO15693_Read_sm(flags,&g_cReceBuf[7],g_cReceBuf[15],g_cReceBuf[16],&g_cReceBuf[0],&g_cReceBuf[1]))
{ AnswerOk(&g_cReceBuf[1],g_cReceBuf[0]); }
else
{ AnswerErr(FAULT23); }
}
/////////////////////////////////////////////////////////////////////
//響應上位機ISO15693_Write命令
/////////////////////////////////////////////////////////////////////
void ComISO15693_Write_sm()
{
unsigned char flags = 0x02;
flags |= g_cReceBuf[6] << 4;
if (MI_OK == ISO15693_Write_sm(flags, &g_cReceBuf[7], g_cReceBuf[15], &g_cReceBuf[16]) )
{ AnswerCommandOk(); }
else
{ AnswerErr(FAULT24); }
}
/////////////////////////////////////////////////////////////////////
//響應上位機ISO15693_Lock_Block命令
/////////////////////////////////////////////////////////////////////
void ComISO15693_Lock_Block()
{
unsigned char flags = 0x02;
flags |= g_cReceBuf[6] << 4;
if (MI_OK == ISO15693_Lock_Block(flags, &g_cReceBuf[7], g_cReceBuf[15]))
{ AnswerCommandOk(); }
else
{ AnswerErr(FAULT24); }
}
/////////////////////////////////////////////////////////////////////
//響應上位機ISO15693_Write_AFI命令
/////////////////////////////////////////////////////////////////////
void ComISO15693_Write_AFI()
{
unsigned char flags = 0x02;
flags |= g_cReceBuf[6] << 4;
if (MI_OK == ISO15693_Write_AFI(flags, &g_cReceBuf[7], g_cReceBuf[15]))
{ AnswerCommandOk(); }
else
{ AnswerErr(FAULT24); }
}
/////////////////////////////////////////////////////////////////////
//響應上位機ISO15693_Lock_AFI命令
/////////////////////////////////////////////////////////////////////
void ComISO15693_Lock_AFI()
{
unsigned char flags = 0x02;
flags |= g_cReceBuf[6] << 4;
if (MI_OK == ISO15693_Lock_AFI(flags, &g_cReceBuf[7]) )
{ AnswerCommandOk(); }
else
{ AnswerErr(FAULT24); }
}
/////////////////////////////////////////////////////////////////////
//響應上位機ISO15693_Write_DSFID命令
/////////////////////////////////////////////////////////////////////
void ComISO15693_Write_DSFID()
{
unsigned char flags = 0x02;
flags |= g_cReceBuf[6] << 4;
if (MI_OK == ISO15693_Write_DSFID(flags, &g_cReceBuf[7], g_cReceBuf[15]) )
{ AnswerCommandOk(); }
else
{ AnswerErr(FAULT24); }
}
/////////////////////////////////////////////////////////////////////
//響應上位機ISO15693_Lock_DSFID命令
/////////////////////////////////////////////////////////////////////
void ComISO15693_Lock_DSFID()
{
unsigned char flags = 0x02;
flags |= g_cReceBuf[6] << 4;
if (MI_OK == ISO15693_Lock_DSFID(flags, &g_cReceBuf[7]))
{ AnswerCommandOk(); }
else
{ AnswerErr(FAULT24); }
}
/////////////////////////////////////////////////////////////////////
//響應上位機ISO15693_Get_System_Information命令
/////////////////////////////////////////////////////////////////////
void ComISO15693_Get_System_Information()
{
unsigned char flags = 0x02;
flags |= g_cReceBuf[6] << 4;
if (MI_OK == ISO15693_Get_System_Information(flags, &g_cReceBuf[7], &g_cReceBuf[0], &g_cReceBuf[1]))
{ AnswerOk(&g_cReceBuf[1],g_cReceBuf[0]); }
else
{ AnswerErr(FAULT23); }
}
/////////////////////////////////////////////////////////////////////
//響應上位機ISO15693_Get_Multiple_Block_Security命令
/////////////////////////////////////////////////////////////////////
void ComISO15693_Get_Multiple_Block_Security()
{
unsigned char flags = 0x02;
flags |= g_cReceBuf[6] << 4;
if (MI_OK == ISO15693_Get_Multiple_Block_Security(flags,&g_cReceBuf[7],g_cReceBuf[15],g_cReceBuf[16],&g_cReceBuf[0],&g_cReceBuf[1]))
{ AnswerOk(&g_cReceBuf[1],g_cReceBuf[0]); }
else
{ AnswerErr(FAULT23); }
}
/////////////////////////////////////////////////////////////////////
//正確執行完上位機指令,應答(無返回數據)
/////////////////////////////////////////////////////////////////////
void AnswerCommandOk()
{
unsigned char i,chkdata;
chkdata = 0;
TI = 0; //發送命令頭
SBUF = 0xAA;
while (!TI);
TI = 0;
SBUF = 0xBB;
while (!TI);
TI = 0; //發送長度字
SBUF = 0x06;
while (!TI);
TI = 0;
SBUF = 0x00;
while (!TI);
TI = 0; //發送設備標識
SBUF = g_cIcdevH;
while (!TI);
if (g_cIcdevH == 0xAA)
{
TI = 0;
SBUF = 0;
while (!TI);
}
TI = 0;
SBUF = g_cIcdevL;
while (!TI);
if (g_cIcdevL == 0xAA)
{
TI = 0;
SBUF = 0;
while (!TI);
}
TI = 0; //發送命令碼
i = (unsigned char)(g_cCommand & 0xFF);
SBUF = i;
chkdata ^= i;
while (!TI);
TI = 0; //發送命令碼
i = (unsigned char)((g_cCommand >>8) & 0xFF);
SBUF = i;
chkdata ^= i;
while (!TI);
TI = 0; //發送狀態字
SBUF = 0;
while (!TI);
TI = 0; //發送效驗字
chkdata ^= g_cIcdevH^ g_cIcdevL;
SBUF = chkdata;
while (!TI);
if (chkdata == 0xAA)
{
TI = 0;
SBUF = 0;
while (!TI);
}
TI = 0;
ES = 1;
}
/////////////////////////////////////////////////////////////////////
//正確執行完上位機指令,應答(有返回數據)
//input:answerdata = 應答數據
// answernum = 數據長度
/////////////////////////////////////////////////////////////////////
void AnswerOk(unsigned char *answerdata, unsigned int answernum)
{
unsigned char chkdata;
unsigned int i;
TI = 0; //發送命令頭
SBUF = 0xAA;
while (!TI);
TI = 0;
SBUF = 0xBB;
while (!TI);
TI = 0; //長度字,包括狀態字和效驗字
chkdata = (((unsigned char)((answernum + 6) & 0xFF)));
SBUF = chkdata;
while (!TI);
TI = 0;
chkdata = (((unsigned char)(((answernum + 6)>>8) & 0xFF)));
SBUF = chkdata;
while (!TI);
TI = 0; //發送設備標識
SBUF = g_cIcdevH;
while(!TI);
if (g_cIcdevH == 0xAA)
{
TI = 0;
SBUF = 0;
while (!TI);
}
TI = 0;
SBUF = g_cIcdevL;
while(!TI);
if (g_cIcdevL == 0xAA)
{
TI = 0;
SBUF = 0;
while (!TI);
}
TI = 0; //發送命令碼
i = (unsigned char)(g_cCommand & 0xFF);
SBUF = i;
chkdata ^= i;
while (!TI);
TI = 0; //發送命令碼
i = (unsigned char)((g_cCommand >>8) & 0xFF);
SBUF = i;
chkdata ^= i;
while (!TI);
TI = 0; //狀態字
SBUF = 0;
while (!TI);
chkdata ^= g_cIcdevH ^ g_cIcdevL;
for (i=0; i<answernum; i++)
{
TI = 0;
chkdata ^= *(answerdata+i);
SBUF = *(answerdata+i);
while (!TI);
if (*(answerdata + i) == 0xAA)
{
TI = 0;
SBUF = 0;
while (!TI);
}
}
TI = 0; //效驗字
SBUF = chkdata;
while(!TI);
if (chkdata == 0xAA)
{
TI=0;
SBUF=0;
while (!TI);
}
TI = 0;
ES = 1;
}
/////////////////////////////////////////////////////////////////////
//未能正確執行上位機指令,應答
//input:faultcode = 錯誤代碼
/////////////////////////////////////////////////////////////////////
void AnswerErr(char faultcode)
{
unsigned char i,chkdata;
chkdata = 0;
TI = 0; //發送命令頭
SBUF = 0xAA;
while (!TI);
TI = 0;
SBUF = 0xBB;
while (!TI);
TI = 0; //發送長度字
SBUF = 0x06;
while (!TI);
TI = 0;
SBUF = 0x00;
while (!TI);
TI = 0; //發送設備標識
SBUF = g_cIcdevH;
while (!TI);
if (g_cIcdevH == 0xAA)
{
TI = 0;
SBUF = 0;
while (!TI);
}
TI = 0;
SBUF = g_cIcdevL;
while (!TI);
if (g_cIcdevL == 0xAA)
{
TI = 0;
SBUF = 0;
while (!TI);
}
TI = 0; //發送命令碼
i = (unsigned char)(g_cCommand & 0xFF);
SBUF = i;
chkdata ^= i;
while (!TI);
TI = 0; //發送命令碼
i = (unsigned char)((g_cCommand >>8) & 0xFF);
SBUF = i;
chkdata ^= i;
while (!TI);
TI = 0; //發送錯誤代碼
SBUF = faultcode;
while (!TI);
chkdata = g_cIcdevH ^ g_cIcdevL ^ faultcode;
TI = 0; //效驗字
SBUF = chkdata;
while (!TI);
TI = 0;
ES = 1;
}
/////////////////////////////////////////////////////////////////////
//串行中斷,接收上位機數據
/////////////////////////////////////////////////////////////////////
seri_int () interrupt 4 using 1
{
unsigned int i,j;
unsigned char rece_data = SBUF;
unsigned char verify = 0;
if (RI)
{
RI = 0;
if (g_bReceAA)
{
g_bReceAA = 0;
switch (rece_data)
{
case 0x00:
break;
case 0xBB:
g_cReceNum = 0;
break;
default:
i = g_cReceNum;
g_cReceBuf[i] = rece_data;
break;
}
}
else
{
switch (rece_data)
{
case 0xAA:
g_bReceAA = 1;
default:
i = g_cReceNum++;
g_cReceBuf[i] = rece_data;
break;
}
}
i = (((unsigned int)(g_cReceBuf[1]<<8)) + (unsigned int)(g_cReceBuf[0]));
if ((g_cReceNum == i + 2) && ( i != 0 ))
{
for (j=1; j<g_cReceNum; j++)
{ verify ^= g_cReceBuf[j]; }
if (!verify)
{
g_bReceOk = 1;
g_cCommand = (((unsigned int)(g_cReceBuf[5]<<8)) + (unsigned int)(g_cReceBuf[4]));
g_bReceAA = 0;
sond = 0;
ES = 0;
}
}
if (g_cReceNum >= sizeof(g_cReceBuf))
{ g_cReceNum=0; }
}
if (TI)
{ TI = 0; }
}
void DelayMs(unsigned int _MS)
{
unsigned char i=0;
while(_MS--)
{
for(i=0;i<120;i++)
{
_nop_();_nop_();_nop_();_nop_();
}
}
}
void Delay_50us(unsigned char _50us)
{
unsigned char i;
while(_50us--)
for(i=0;i<25;i++);
}
復制代碼
作者:
rawi
時間:
2017-6-13 15:50
支持一下~~~~~~~~~
作者:
xvsd_247
時間:
2018-6-25 08:49
看看~~~~~~~~~~~~~~~
作者:
xinyang
時間:
2018-9-21 13:29
好東西, 正好需要。
作者:
hewe_001
時間:
2018-10-28 16:55
不是SPI接口的!
作者:
渺渺
時間:
2018-11-22 10:40
感謝大佬,有用有用
作者:
SAD莫若
時間:
2019-4-30 15:26
感謝~感謝~感謝
作者:
amos_machine
時間:
2019-5-4 20:26
學習一下,代碼不是SPI的驅動。
作者:
千與千尋9527
時間:
2019-5-9 20:52
資料太少
歡迎光臨 (http://www.denmoz.com/bbs/)
Powered by Discuz! X3.1