本帖最后由 2012CMD 于 2015-1-7 21:12 编辑
先上个电路图,射频卡和电路均为125KHz
EM4100卡片数据如下图所示
下面是我的测试卡片是否存在的程序
while(1)
{
//依靠EM4100数据卡最后一位数据为0(0→1跳变)判断起点
while(1=Manchester_IN)//等低电平
while(0==Manchester_IN); //当电平由低向高跳变时启动计时器0
reset_timer0();
//检测9个1(1→0跳变)
while(1==Manchester_IN);
TIMER0_OFF;
//必须先读取低位,后读取高位
low=TMR0L;high=TMR0H;
time=( (high<<8)+low )*1/5;
//判断第一个1(1→0跳变)是不是在规定时间内(0110,连续两个1共512us)
if( (490<time) && (time<520) )
{
time=0;
for(i=0;i<8;i++)
{
while(0==Manchester_IN); //当电平由低向高跳变时启动计时器0
reset_timer0();
while(1==Manchester_IN);
TIMER0_OFF;
low=TMR0L;high=TMR0H;
time=( (high<<8)+low )*1/5;
//检测电平跳变时间时候在规定时间内(256us)
if( (230<time) && (time<290) )
buzzer_beep();
time=0;
}
}
else
continue;
}
}
其中reset_timer0如下
void reset_timer0(void)
{
//打开timer0
T0CON|=(1<<7);
TMR0L=0;
TMR0H=0;
}
现在问题是就算没有刷卡也会执行那个buzzer_beep函数,就是说不刷卡也会检测到011111111(卡片末尾的0和开始的9个1这种情况),不知道怎么回事??
另外还有几个问题想问问各位
①在不刷卡的时候,RF_OUTPUT引脚也会有乱七八糟的波形这个是正常的不???
②刷卡的时候一个周期64/(125Khz)=512us,比如1(1→0下跳变)就是512us,那么如果只收到一个1或者0就为256us,我上面的时间判断是不是正确的??
:)有点多,麻烦各位了
|