ucharReceivEDAta(void)
{ucharcount;
ucharvalue;
uchario_value;
value=0;
SetIO(0);//设置IO脚为输入;
CLK(0);
//IO=1;
for(count=0;count《8;count++)
{value=value》》1;
CLK(1);
DelayUs(2);
io_value=PIND;
CLK(0);
DelayUs(2);
if(io_value&0x10==0x10)value|=0x80;//判断IO脚是否为1
elsevalue&=0x7f;
}
return(value);
}
//********************发送数据************//
voidSendData(ucharXdata)
{ucharcount;
ucharvalue;
SetIO(1);////设置IO脚为输出;
value=Xdata;
for(count=8;count!=0;count--)
{CLK(0);
if((Xdata《《(count-1))&0x80)IO(1);
elseIO(0);
CLK(1);
DelayUs(2);
CLK(0);}
}
//****************IC卡复位************************//
voidResetIC(uchar*Xdata)
{ucharcount;
SetIO(1);//设置IC卡引脚的属性
RST(0);
CLK(0);
IO(1);
DelayUs(5);
RST(1);
DelayUs(5);
CLK(1);
DelayUs(5);
CLK(0);
DelayUs(5);
RST(0);
for(count=4;count!=0;count--)
{*Xdata=ReceiveData();
Xdata+=2;}
}
//*******************Start条件****************//
voidStart(void)
{SetIO(1);
CLK(0);
IO(0);
DelayUs(2);
CLK(1);
IO(1);
DelayUs(2);
IO(0);
CLK(0);
}
//*******************Stop条件****************//
voidStop(void)
{CLK(0);
IO(0);
DelayUs(2);
CLK(1);
IO(0);
DelayUs(2);
IO(1);
DelayUs(2);
IO(0);
}
//******************处理过程**************//
voidProcess(void)
{uintj;
SetIO(1);//设置IO脚为输出脚
CLK(0);
DelayUs(5);
IO(0);
for(j=255;j》0;j--)
{CLK(1);
DelayUs(5);
CLK(0);
DelayUs(5);
}
IO(1);
}
//****************说明*********************//
//*********输出模式接口命令,包括读主存储器30H,读保护存储器34H,读安全代码的接口命令31H***********//
//******处理模式数据接口命令,包括写主存储器38H,写保护存储器3CH,写安全代码39H,校验安全代码33H*******//
voidCommand(ucharByte1,ucharByte2,ucharByte3)
{Start();
SendData(Byte1);
SendData(Byte2);
SendData(Byte3);
Stop();
}
/**********读主存储器**************/
voidReaDMAinMemory(ucharaddr,uchar*p,ucharN)
{Command(0x30,addr,0xff);
do{*p=ReceiveData();
p++;}while(--N);
}
/**********读保护存储器***********/