金陵科技学院学士学位论文 附录
// // //输入: // // 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