基于单片机的IC卡门禁系统的设计 - 图文 下载本文

金陵科技学院学士学位论文 附录

// // //输入: // // RC531目标寄存器地址和写入值 // // // //输出: // // N/A // //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~// void SPIWrite(char reg_ad,char reg_data) {

sck=0; //时钟 reg_ad <<= 1;

cs=0; //接口选通

reg_ad &= 0x7F; //最高位为0表示写 spi_byte_transceive(reg_ad); //写地址 spi_byte_transceive(reg_data); //写数据 cs=1; return; }

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~// //名称: rc531_register_read // //功能: 该函数实现通过SPI接口读取RC531中一个寄存器的值 // // // //输入: // // RC531目标寄存器地址 // // // //输出: // // 目标寄存器的值 // //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~// uchar SPIRead(char reg_ad) { char temp;

sck=0; //时钟

44

金陵科技学院学士学位论文 附录

_nop_(); _nop_();

cs=0; //接口选通开

reg_ad <<= 1; //reg_ad左移一位付值给reg_ad

reg_ad |= 0x80; //reg_ad跟“0X80”或运算后付值给reg_ad 最高位为1表示读

spi_byte_transceive(reg_ad); temp=spi_byte_transceive(0x00); cs=1; return (temp); }

/****************************************************************/ /*名称: Request */

/*功能: 该函数实现对放入FM1702操作范围之内的卡片的Request操作*/ /*输入: mode: ALL(监测所以FM1702操作范围之内的卡片) */ /* STD(监测在FM1702操作范围之内处于HALT状态的卡片) */ /*输出: FM1702_NOTAGERR: 无卡*/ /* FM1702_OK: 应答正确*/ /* FM1702_REQERR: 应答错误*/

/****************************************************************/ uchar Request(uchar mode) {

unsigned char temp;

RevBuffer[0] = mode;

SPIWrite(0x11,0x58);//关发射控制 SPIWrite(0x11,0x5b);//开发射控制

SPIWrite(0x0f,0x07); //address 0FH 调整位的帧格式 temp = SPIRead(0x09);

45