//////////////////////////////读93C46一个字节//////////////////////////////////////
unsigned char read_byte()
{
u8 data_byte,ji;
SCK_L;
__nop();
__nop();
SCK_H;
__nop();
__nop();
SCK_L;
__nop();
__nop();
for(ji=0;ji<8;ji++)
{
data_byte<<=1;
if(DO==1)
{
data_byte|=0x01;
}
else
{
data_byte&=0xfe;
}
SCK_H;
__nop();
__nop();
SCK_L;
__nop();
__nop();
}
return data_byte;
}
//////////////////////////93C46写一个字节/////////////////////////////////
void write_byte(u8 tmp)
{
u8 h;
for(h=0;h<8;h++)
{
SCK_L;
__nop();
__nop();
__nop();
__nop();
if(tmp&0x80)
{
DI_H;
}
else
{
DI_L;
}
SCK_H;
__nop();
__nop();
__nop();
__nop();
tmp<<=1;
}
}
///////////////////////////以下93C46擦写允许////////////////////////////////////////
void write_en()
{
DI_L;
CS_H;
write_byte(0X02);
write_byte(0X60);
CS_L;
DI_L;
}
////////////////////////////以下93c46擦写禁止/////////////////////////////////////////////////////
void write_ds()
{
DI_L;
CS_H;
write_byte(0X02);
write_byte(0X00);
CS_L;
DI_L;
}
//////////////////////////////////////////////////////////////////
unsigned char read_eeprom (u8 addr)
{
u8 data_r;
addr&=0x7f;
DI_L;
CS_H;
write_byte(0X03); ///读操作码
write_byte(addr); ///要读的地址
data_r=read_byte(); ///读数据
CS_L;
return data_r;
}
/////////////////////////////////////////////////////////////////////
void write_eeprom(u8 edata,u8 addr)
{
u8 user_d; ////写指令码
user_d=addr|0x80;
DI_L;
CS_H;
write_byte(0x02);
write_byte(user_d);
write_byte(edata);
display();
DI_L;
CS_L;
}
//////////////////////////////////////////////////////////////////////////
void save_key(u16 save_d,u8 ad_h,u8 ad_l)
{
u8 ele_tmp;
write_en();
ele_tmp=(unsigned char)save_d; ////字节低位
write_eeprom(ele_tmp,ad_l); ////写93C46
save_d>>=8;
ele_tmp=save_d;
display();
write_eeprom(ele_tmp,ad_h);
write_ds();
}
///////////////////////////////////////////////////////////////////////////////////
int read_int(unsigned char h_addr,unsigned char l_addr)
{
u8 load_tmp;
u16 load_int_tmp;
load_tmp=read_eeprom(h_addr); ////加载数据高位
load_int_tmp=load_tmp;
load_int_tmp=load_int_tmp<<8;
load_tmp=read_eeprom(l_addr); ////加载数据低位
load_int_tmp+=load_tmp;
return load_int_tmp;
}