分立元件读卡模块读取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;
}
}
|