| 本帖最后由 2012CMD 于 2015-1-7 21:12 编辑 
 先上个电路图,射频卡和电路均为125KHz
 
 EM4100卡片数据如下图所示
 
 下面是我的测试卡片是否存在的程序
 
 其中reset_timer0如下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;
            }
        }
 现在问题是就算没有刷卡也会执行那个buzzer_beep函数,就是说不刷卡也会检测到011111111(卡片末尾的0和开始的9个1这种情况),不知道怎么回事??void reset_timer0(void)
{
    //打开timer0
    T0CON|=(1<<7);
    TMR0L=0;
    TMR0H=0;
}
另外还有几个问题想问问各位
 ①在不刷卡的时候,RF_OUTPUT引脚也会有乱七八糟的波形这个是正常的不???
 ②刷卡的时候一个周期64/(125Khz)=512us,比如1(1→0下跳变)就是512us,那么如果只收到一个1或者0就为256us,我上面的时间判断是不是正确的??
 
 :)有点多,麻烦各位了
 
 
 
 
 
 |