ImageVerifierCode 换一换
格式:DOCX , 页数:18 ,大小:16.75KB ,
资源ID:9096975      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/9096975.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(SLRC400程序设计.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

SLRC400程序设计.docx

1、SLRC400程序设计SL RC400程序设计#include #include #include #include main.h#include slrc400.h#include iso15693.hunsigned char xdata ini _at_ 0x7f00; / move base addressto 0x7f00unsigned char xdata *GpBase = &ini; / redirect pointer tobase address#define ReadRawIO(addr) (*(GpBase + addr)#define WriteRawIO(addr

2、,value) *(GpBase + addr) = value;extern struct TranSciveBufferunsigned char MfCommand;unsigned int MfLength;unsigned char MfData64;/ 复位并初始化 RC400/ 注意:RC400上电后应延时 500ms才能可靠初始化/char PcdReset()char status = MI_OK;char n = 0;unsigned int i = 2000;RC400_RST=0;DelayMs(50);RC400_RST=1;DelayMs(5);RC400_RST=

3、0;while (i!=0 & n!=PCD_RESETPHASE)n = ReadRawRC(RegCommand);i-;while (i!=0 & n=PCD_RESETPHASE)n = ReadRawRC(RegCommand);i-;if (i != 0)WriteRawRC(RegPage,0x80);n = 0x80;while ( (i!=0) & (n&0x80) )n = ReadRawRC(RegCommand);i-;if (i=0 | (n&0xFF) status = MI_RESETERR ; else status = MI_RESETERR; if (sta

4、tus = MI_OK) WriteRawRC(RegPage,0x0); return status;/ 设置 RC400的工作方式/char PcdConfigISOType()ClearBitMask(RegControl,0x08); /WriteRawRC(RegTxControl,0x58); /100%ASKWriteRawRC(RegCwConductance,0x3f); / 输出功率和操作距离调整WriteRawRC(RegModConductance,0x05); / must bemeasured for 15% Modulation IndexWriteRawRC(R

5、egCoderControl,0x2f); /2e fast 2f/ 52.97kHz, 1-256 codingWriteRawRC(RegModWidth,0x3F); / 设置调制脉冲宽度: 9.44usWriteRawRC(RegModWidthSOF,0x3F); / 设置 SOF脉冲宽度: 9.44us/ WriteRawRC(RegTypeBFraming,0x00);WriteRawRC(RegRxControl1,0x8b); / 控制接收:电压增益 42dbWriteRawRC(RegDecoderControl,0x34); /c14);WriteRawRC(RegBit

6、Phase,0xad); /0xcd);/0xad);/? ?WriteRawRC(RegRxThreshold,0x68);/c68);/ WriteRawRC(RegBPSKDemControl,0);WriteRawRC(RegRxControl2,0x81); /c41);I 时钟用作接收器时钟WriteRawRC(RegClockQControl,0x00);WriteRawRC(RegRxWait,0x08);WriteRawRC(RegChannelRedundancy,0x2C); / Enable CRCTX/RXWriteRawRC(RegCRCPresetLSB,0xFF

7、);WriteRawRC(RegCRCPresetMSB,0xFF);WriteRawRC(RegTimeSlotPeriod,0x00);WriteRawRC(RegSIGOUTSelect,0x00);/?0X02 /enable SIGOUT = envelope/ WriteRawRC(RFU27,0x00);WriteRawRC(RegFIFOLevel,0x38);WriteRawRC(RegTimerClock,0x0B);WriteRawRC(RegTimerReload,0x00);WriteRawRC(RegTimerControl,0x02); /TStopRxEnd=0

8、,TStopRxBeg=1,/ WriteRawRC(RFU2E,0x00);/ WriteRawRC(RFU2F,0x00);DelayMs(1);PcdAntennaOn();return MI_OK;/ 读 RC400寄存器位/input:Address= 寄存器地址/ouput: 读出的值/unsigned char ReadRawRC(unsigned char Address)static unsigned char c;c = ReadRawIO(Address); / read valueat the specified/ addressreturn c;/ 写 RC400寄存

9、器/input:Address= 寄存器地址/ value= 要写入的值/void WriteRawRC(unsigned char Address, unsigned char value)WriteRawIO(Address,value);/ 置 RC400寄存器位/input:reg= 寄存器地址/ mask= 置位值/void SetBitMask(unsigned char reg,unsigned char mask)char tmp = 0x0;tmp = ReadRawRC(reg);WriteRawRC(reg,tmp | mask); / set bit mask/ 清 R

10、C400寄存器位/input:reg= 寄存器地址/ mask= 清位值/void ClearBitMask(unsigned char reg,unsigned char mask)char tmp = 0x0;tmp = ReadRawRC(reg);WriteRawRC(reg, tmp & mask); / clear bit mask/ 通过 RC400和 ISO15693卡通讯/input: pi-MfCommand = RC400 命令字/ pi-MfLength = 发送的数据长度/ pi-MfData = 发送数据/output:status = 错误字/ pi-MfLeng

11、th = 接收的数据 BIT 长度/ pi-MfData = 接收数据/char ISO15693_Transceive(struct TranSciveBuffer *pi)bit recebyte = 0;char status = MI_COM_ERR;unsigned char n,waitFor,TimerReload;unsigned int i;switch (pi-MfCommand)case PCD_TRANSMIT:waitFor = 0x08;/0x10;break;default:waitFor = 0x28;recebyte=1;break;/*switch (pi-

12、MfData1)case ISO15693_STAY_QUIET:TimerReload = 0x04; / 2048/fc= 0x01 = 151 usbreak;case ISO15693_SELECT:case ISO15693_RESET_TO_READY:TimerReload = 0x0F; / 2048/fc= 0x01 = 151 usbreak;case ISO15693_LOCK_AFI:case ISO15693_LOCK_DSFID:case ISO15693_LOCK_BLOCK:case ISO15693_WRITE_SINGLE_BLOCK:case ISO156

13、93_WRITE_MULTIPLE_BLOCKS:case ISO15693_WRITE_AFI:case ISO15693_WRITE_DSFID:TimerReload = 0x29; / 2048/fc= 0x01 = 151 usbreak;case ISO15693_READ_SINGLE_BLOCK:TimerReload = 0x17; / 2048/fc= 0x01 = 151 usbreak;case ISO15693_INVENTORY:TimerReload = 0x1F; / 2048/fc= 0x01 = 151 usbreak;case ISO15693_GET_S

14、YSTEM_INFO:TimerReload = 0x25; / 2048/fc= 0x01 = 151 usbreak;case ISO15693_GET_MULTIPLE_BLOCK_SECURITY:TimerReload =0x40;/(0x04+(cmdcmdlen-1+0x01)*0x02 + 0x04 + 0x01; /2048/fc = 0x01 = 151 usbreak;/ (0x04 + cmdcmdlen - 1)*0x02 - Timefor all receivedBytes, 0x04 - Time bevore and after response,0x01 a

15、dditionalcase ISO15693_READ_MULTIPLE_BLOCKS:TimerReload =0x40;/(0x04+0x04*(cmdcmdlen-1+0x01)*0x02 + 0x04 + 0x01;/ 2048/fc = 0x01 = 151 usbreak;default:TimerReload = 0x86; / 2048/fc =0x01 = 151 usbreak;WriteRawRC(RegPage,0x00);WriteRawRC(RegFIFOLevel,0x1A);SetBitMask(RegChannelRedundancy, 0x04);Write

16、RawRC(RegTimerReload, TimerReload);WriteRawRC(RegTimerControl, 0x06);*/SetBitMask(RegControl,0x01);WriteRawRC(RegCommand, 0x00);WriteRawRC(RegInterruptEn, 0x81);WriteRawRC(RegInterruptRq, 0x3F);WriteRawRC(RegInterruptEn, 0x38 | 0x80);for (i=0; iMfLength; i+)WriteRawRC(RegFIFOData,pi-MfDatai);_nop_()

17、;_nop_();_nop_();_nop_();_nop_();WriteRawRC(RegCommand, PCD_TRANSCEIVE); / startto send command to labeli = 0xa000;don = ReadRawRC(RegInterruptRq);i-;while ( (i!=0) & !(n&waitFor) );/ 等待发送完毕if (!recebyte)if (n & 0x10)status = MI_OK;WriteRawRC(RegInterruptEn,0x10);WriteRawRC(RegTimerControl,0x00);Wri

18、teRawRC(RegCommand,PCD_IDLE);ClearBitMask(RegCoderControl, 0x80);return status;elseif (i!=0) & (n&0x08)if ( !(ReadRawRC(RegErrorFlag) & 0x0C) )n = ReadRawRC(RegFIFOLength);pi-MfLength = n*8;for (i=0; iMfDatai = ReadRawRC(RegFIFOData);_nop_();_nop_();_nop_();_nop_();_nop_();if (pi-MfData0 = 0)/ 没有错误标

19、志status = MI_OK;WriteRawRC(RegInterruptEn,0x10);WriteRawRC(RegTimerControl,0x00);WriteRawRC(RegCommand,PCD_IDLE);ClearBitMask(RegCoderControl, 0x80);return status;/ 开启天线/ 每次启动或关闭天险发射之间应至少有 1ms的间隔/char PcdAntennaOn()unsigned char i;i = ReadRawRC(RegTxControl);if (i & 0x03) return MI_OK; elseSetBitMas

20、k(RegTxControl, 0x03);return MI_OK;char ISO15693_Transceive1(struct TranSciveBuffer *pi)bit recebyte = 0;char status = MI_COM_ERR;unsigned char n,waitFor,TimerReload;unsigned int i;switch (pi-MfCommand)case PCD_TRANSMIT:waitFor = 0x10;break;default:waitFor = 0x28;recebyte=1;break;switch (pi-MfData1)

21、case ISO15693_STAY_QUIET:TimerReload = 0x04; / 2048/fc= 0x01 = 151 usbreak;case ISO15693_SELECT:case ISO15693_RESET_TO_READY:TimerReload = 0x0F; / 2048/fc= 0x01 = 151 usbreak;case ISO15693_LOCK_AFI:case ISO15693_LOCK_DSFID:case ISO15693_LOCK_BLOCK:case ISO15693_WRITE_SINGLE_BLOCK:case ISO15693_WRITE

22、_MULTIPLE_BLOCKS:case ISO15693_WRITE_AFI:case ISO15693_WRITE_DSFID:TimerReload = 0x29; / 2048/fc= 0x01 = 151 usbreak;case ISO15693_READ_SINGLE_BLOCK:TimerReload = 0x17; / 2048/fc= 0x01 = 151 usbreak;case ISO15693_INVENTORY:TimerReload = 0x1F; / 2048/fc= 0x01 = 151 usbreak;case ISO15693_GET_SYSTEM_IN

23、FO:TimerReload = 0x25; / 2048/fc= 0x01 = 151 usbreak;case ISO15693_GET_MULTIPLE_BLOCK_SECURITY:TimerReload =0x40;/(0x04+(cmdcmdlen-1+0x01)*0x02 + 0x04 + 0x01; /2048/fc = 0x01 = 151 usbreak;/ (0x04 + cmdcmdlen - 1)*0x02 - Timefor all receivedBytes, 0x04 - Time bevore and after response,0x01 additiona

24、lcase ISO15693_READ_MULTIPLE_BLOCKS:TimerReload =0x40;/(0x04+0x04*(cmdcmdlen-1+0x01)*0x02 + 0x04 + 0x01;/ 2048/fc = 0x01 = 151 usbreak;default:TimerReload = 0x86; / 2048/fc =0x01 = 151 usbreak;WriteRawRC(RegPage,0x00);WriteRawRC(RegFIFOLevel,0x1A);SetBitMask(RegChannelRedundancy, 0x04);WriteRawRC(Re

25、gTimerReload, TimerReload);WriteRawRC(RegTimerControl, 0x06);SetBitMask(RegControl,0x01);WriteRawRC(RegCommand, 0x00);WriteRawRC(RegInterruptEn, 0x81);WriteRawRC(RegInterruptRq, 0x3F);WriteRawRC(RegInterruptEn, 0x38 | 0x80);for (i=0; iMfLength; i+)WriteRawRC(RegFIFOData,pi-MfDatai);_nop_();_nop_();_nop_();_nop_();_nop_();WriteRawRC(RegCommand, PCD_TRANSCEIVE); / startto send command to labeli = 0xa000;don = ReadRawRC(RegInterruptRq);i-;while ( (i!=0) & !(n&waitFor) );/ 等待发送完毕if (!recebyte)if (n & 0x10)status = MI_OK;WriteRawRC(RegIn

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1