查看: 2536|回复: 0
打印 上一主题 下一主题

卡模块读取4100卡成功,在改进下读取T5557,求助!谢谢!

[复制链接]
跳转到指定楼层
沙发
发表于 2015-3-18 17:15:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
分立元件读卡模块读取4100卡成功,求酷!,但不能在改进下读取T5557,求助!谢谢!
使用C51,读卡函数读取4100没问题,就是125K输出没问题,曼彻斯特解码没问题!而读写T5557又如何改进呢?以下是本人修改接收T5557的程序,请高手多给意见!谢谢!

void gap(uint titemp)
{                    
        WAKE_CLKO &= 0xf0;
        TR0=0;
        power=0;
        fctick=0;
        ET1 = 1;
        while(fctick<titemp);
        ET1 = 0;
        power=1;
        TR0=1;
        WAKE_CLKO |= 0x01;
}        
void fcdelay(uint  tick)
{
    fctick=0;
        ET1 = 1;
        while(fctick<tick);
        ET1 = 0;
}  

void WriCode(uchar SendVal,uchar len)
{         
    uchar i;
        for(i=0; i<len; i++)
        {               
            if((SendVal<<i)&0x80)
                {
                     fcdelay(bit1);          //发送数据“1”
                }
            else
                {
                     fcdelay(bit0);          //发送数据“0”
                }   
            gap(Tgap);     
        }
}

void resetCmd(void)                   // 00 reset
{         
        gap(Tstar);                //开始间隙 GAPS:50个场时钟   
        fcdelay(bit0);          //发送数据“0”
        gap(Tgap);
        fcdelay(bit0);          //发送数据“0”  
        gap(Tgap);                  
}  
void stopCmd(void)                   // 11 stop
{         
        gap(Tstar);                //开始间隙 GAPS:50个场时钟   
        fcdelay(bit1);          //发送数据“1”
        gap(Tgap);
        fcdelay(bit1);          //发送数据“1”  
        gap(Tgap);                  
}   
//操作码2+锁定位1+数据位32+地址位3=38
void Read_cmd(uchar opcode,uchar addr)
{         
         gap(Tstar);                //开始间隙 GAPS:50个场时钟
     WriCode(opcode,2);
     WriCode(0,1);           
//     WriCode(data1,8);   
//     WriCode(data2,8);  
//     WriCode(data3,8);  
//     WriCode(data4,8);
     WriCode((addr<<5),3);
}  

uchar jtemp=0;
void Read_Card(void)//读卡
{              
     uint i=0;
     uint bits=0;
//         uchar temp=0;

         for (i=0;i<33;i++)
         {
         decode=0;
         }   
         data1=0;data2=0;data3=0;data4=0;
         lastbit=0;
         checkin=0;
         half=0;
         i=0;

         if(page==0xc0)
         {
             if(addrtick>2)
                 {
                     addrtick=0;
                         page=0x80;
                 }
         }
         else
         {
             if(addrtick>7)
                 {
                     addrtick=0;
                         page=0xc0;
                 }                     
         }        
         Read_cmd(page,addrtick);     //写时序
         addrtick++;
         for (bits=0;bits<60000;bits++) //读取曼彻斯特_码
         {         
                ET1=1;
                fctick=0;
                while((!Manchester_IN)==lastbit)//   
                {
                        if(fctick>=TIME_OF)
                        {
                                break;//超时退出
                        }
                }
                tcomp=fctick;
                ET1=0;
                TL1 = 0xB8;//9600;
                TH1 = 0xB8;//9600;
                if(tcomp>15)
                {
                        if(checkin)
                        {           
                                if((tcomp>15)&&(tcomp<35))
                                {
                                if (half==1)
                                        {
                                        half=0;
                                            decode=lastbit;
                                            i++;                  
                                        }
                                    else
                                        half=1;        
                                }

                                if((tcomp>40)&&(tcomp<60))
                                {            
                                    if (half==1)
                                        {
                               if (lastbit==0)
                                           {
                                           decode=1;
                                           }
                                       else
                                       {
                                               decode=0;
                                           }
                            }
                                    else
                                        {
                                            i--;
                                        }
                                    i++;
                                    half=1;
                            }  

                                if(i>=32)
                                {
                                    i=0;                              
                                    databuf[jtemp*4]=((decode[1]<<7)|(decode[2]<<6)|(decode[3]<<5)|(decode[4]<<4)|(decode[5]<<3)|(decode[6]<<2)|(decode[7]<<1)|(decode[8]));        
                                    databuf[jtemp*4+1]=((decode[9]<<7)|(decode[10]<<6)|(decode[11]<<5)|(decode[12]<<4)|(decode[13]<<3)|(decode[14]<<2)|(decode[15]<<1)|(decode[16]));
                                    databuf[jtemp*4+2]=((decode[17]<<7)|(decode[18]<<6)|(decode[19]<<5)|(decode[20]<<4)|(decode[21]<<3)|(decode[22]<<2)|(decode[23]<<1)|(decode[24]));  
                                    databuf[jtemp*4+3]=((decode[25]<<7)|(decode[26]<<6)|(decode[27]<<5)|(decode[28]<<4)|(decode[29]<<3)|(decode[30]<<2)|(decode[31]<<1)|(decode[32]));

                                        sendChar(databuf[jtemp*4+0]);
                                        sendChar(databuf[jtemp*4+1]);
                                        sendChar(databuf[jtemp*4+2]);
                                        sendChar(databuf[jtemp*4+3]);

                                        jtemp++;

                                        if(jtemp>10){jtemp=0;return;}
                                }
                        }
                        else
                        {         
                                if((tcomp>65)&&(tcomp<90))
                                {         
                                    if (lastbit==1)
                                        {   
                                        checkin=1;  
                                        i=0;  
                                        }
                                }
                        }
                }
                lastbit=!lastbit;
     }
}

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入中科因仑

本版积分规则

快速回复 返回顶部 返回列表