程序运行到1702初始化的时候有一句
while((temp = SPIRead(Command)) != 0) /* 等待Command = 0,FM1702复位成功 */
{
;// _nop_();
}
然后程序就卡住了。SPIRead()貌似每次都不为零,有几种可能的原因呢?
软件是直接从别的地方移植过来的,我只修改了管脚定义而已。莫非硬件有问题?
还有就是请教一下
unsigned char SPIRead(char reg_ad)
{ char temp;
RF_SCK=0;
_nop_();
_nop_();
RF_NSS=0;
reg_ad <<= 1;
reg_ad |= 0x80;
spi_byte_transceive(reg_ad);
temp=spi_byte_transceive(0x00);
RF_NSS=1;
return (temp);
}
void SPIWrite(char reg_ad,char reg_data)
{
RF_SCK=0;
reg_ad <<= 1;
RF_NSS=0;
reg_ad &= 0x7F;
spi_byte_transceive(reg_ad);
spi_byte_transceive(reg_data);
RF_NSS=1;
return;
}
在上面两个函数中,为什么reg_ad要进行变换?
请大家多多来鄙视吧。
附我现在用的刷卡机程序和图纸。
刷卡程序使用STC12C5A60S和KEILV4,FM1702NL
ourdev_573191.rar(文件大小:99K) (原文件名:刷卡程序使用STC12C5A60S和KEILV4.rar)
Command不为零有可能是SPI复位不成功。
二。为什么reg_ad要进行变换?
那是因为fm1702寄存器的地址格式要求:
1。最低位必需为零
2。最高位如果是写的话置0,读就置1。
-----------------------------------------------------------------------
3Q
-----------------------------------------------------------------------
3Q
上传个参考代码,基本上改改寄存器,和延时程序就可以用了。如果不能用,差不多就是硬件问题了。
一周热门 更多>