以下是引用在的发言:
请问你的24C02是怎么用的,麻烦请mail给我:lwjxs@1633.com
请参考下面程序:
// SPROM函数
/* +-------------+
| SPROM开始位 |
+-------------+ */
void start24(void)
{
SDA_24 = 1; CLK_24 = 1; nop(); SDA_24 = 0; nop(); CLK_24 = 0;
return;
}
/* +-------------+
| SPROM停止位 |
+-------------+ */
void stop24(void)
{
SDA_24 = 0; CLK_24 = 1; nop(); SDA_24 = 1;
return;
}
/* +---------------------+
| 写数据到SPROM数据线 |
+---------------------+ */
void wd_24(char c)
{
unsigned char n;
for(n=0;n<8;n++)
{
SDA_24 = 0x80 & c; c = ACC; // 数据高位送SDA针并左移一位
CLK_24 = 1; nop(); CLK_24 = 0; // 正时钟脉冲周期
}
return;
}
/* +---------------+
| SPROM ASK周期 |
+---------------+ */
bit ack_24(void)
{
bit b;
SDA_24 = 1; CLK_24 = 1; b = SDA_24; CLK_24 = 0;
return(b);
}
/* +-------------+
| SPROM字节写 |
+-------------+ */
void write24(char a, char d)
{
unsigned int i;
start24();
if(MTYPE){wd_24(0xa0); ack_24();}
else a=a<<1;
wd_24(a); ack_24();
wd_24(d); ack_24();
stop24();
i=0;
while(1)
{
start24();
wd_24(0xa0);
if(ack_24()==0)break;
if(i>8000)break;
i++;
}
return;
}
/* +-------------+
| SPROM字节读 |
+-------------+ */
char read24(char a)
{
unsigned char n;
char c;
c = 0;
start24();
if(MTYPE){wd_24(0xa0); ack_24();}
else {a=a<<1;a++;}
wd_24(a); ack_24();
if(MTYPE){start24(); wd_24(0xa1); ack_24();}
SDA_24 = 1;
for(n=0;n<8;n++)
{
CLK_24 = 1;
c = c<<1; if(SDA_24)c++; // 读相应位
CLK_24 = 0;
}
ack_24(); stop24();
return(c);
}