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);

}

/**********读保护存储器***********/