"); //-->
//ESDA-数据
//ECLK-时钟
//EWP-写保护
//晶体12MHZ
#define UN unsigned char
sbit ACC0=ACC^0;
sbit ACC1=ACC^1;
sbit ACC2=ACC^2;
sbit ACC3=ACC^3;
sbit ACC4=ACC^4;
sbit ACC5=ACC^5;
sbit ACC6=ACC^6;
sbit ACC7=ACC^7;
void ask()
{
unsigned int i=0xffff;
ESDA=1;_nop_();ECLK=1;_nop_();
do
{i--;
if(ESDA!=1)
{ECLK=0;i=0;}
}
while(i!=0);
}
/*###################################*/
void stop()
{
ECLK=0; _nop_();
ESDA=0; _nop_();
ECLK=1; _nop_();
ESDA=1;_nop_();
ECLK=0;_nop_();
}
/* */
/*###################################*/
/*24c256 start */
void start()
{
ESDA=1;_nop_();
ECLK=1;_nop_();
ESDA=0;_nop_();
ECLK=0;_nop_();
}
/*###################################*/
/*24c256 rdby */
UN rdby()
{ ESDA=1;
ECLK=1;ACC7=ESDA;ECLK=0;
ECLK=1;ACC6=ESDA;ECLK=0;
ECLK=1;ACC5=ESDA;ECLK=0;
ECLK=1;ACC4=ESDA;ECLK=0;
ECLK=1;ACC3=ESDA;ECLK=0;
ECLK=1;ACC2=ESDA;ECLK=0;
ECLK=1;ACC1=ESDA;ECLK=0;
ECLK=1;ACC0=ESDA;ECLK=0;
return(ACC);
}
/*###################################*/
/*24c256 waddr */
void waddr()
{ start();
wrby(0xa0);
ask();}
/*###################################*/
/*24c256 raddr */
UN raddr()
{ start();
wrby(0xa1);
ask();
ACC=rdby();
stop();
return(ACC);
}
/*###################################*/
void wrby(UN x)
{ ACC=x;
ESDA=ACC7;ECLK=1;ECLK=0;
ESDA=ACC6;ECLK=1;ECLK=0;
ESDA=ACC5;ECLK=1;ECLK=0;
ESDA=ACC4;ECLK=1;ECLK=0;
ESDA=ACC3;ECLK=1;ECLK=0;
ESDA=ACC2;ECLK=1;ECLK=0;
ESDA=ACC1;ECLK=1;ECLK=0;
ESDA=ACC0;ECLK=1;ECLK=0;
ESDA=1;ECLK=1;
}
/*####################################*/
/*24c256 读出一字节 */
UN rout(unsigned int x)
{ waddr();
w16addr(x);
ACC=raddr();
return(ACC);
}
/*######################################*/
/*24c256 写入一字节 */
void memory(unsigned int f,UN x)
{ EWP=0;
waddr();
w16addr(f);
wrby(x);
ask();
stop();
d5ms();
EWP=1;
}
/* 延时*/
void d5ms()
{ UN a, b;
for (a=0;a<=15;a++)
{
for (b=0;b<0x7f;b++)
{;}
}
}
/*################################写入256的16位地址*/
void w16addr(unsigned int x)
{ UN m;UN n;
DPTR=x;
m=DPH;
n=DPL;
wrby(m );
ask();
wrby(n );
ask();
}
*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。