發(fā)表于:2003/8/3 8:05:00
#3樓
以下是引用在的發(fā)言:
請(qǐng)問你的24C02是怎么用的,麻煩請(qǐng)mail給我:lwjxs@1633.com
請(qǐng)參考下面程序:
// SPROM函數(shù)
/* +-------------+
| 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;
}
/* +---------------------+
| 寫數(shù)據(jù)到SPROM數(shù)據(jù)線 |
+---------------------+ */
void wd_24(char c)
{
unsigned char n;
for(n=0;n<8;n++)
{
SDA_24 = 0x80 & c; c = ACC; // 數(shù)據(jù)高位送SDA針并左移一位
CLK_24 = 1; nop(); CLK_24 = 0; // 正時(shí)鐘脈沖周期
}
return;
}
/* +---------------+
| SPROM ASK周期 |
+---------------+ */
bit ack_24(void)
{
bit b;
SDA_24 = 1; CLK_24 = 1; b = SDA_24; CLK_24 = 0;
return(b);
}
/* +-------------+
| SPROM字節(jié)寫 |
+-------------+ */
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字節(jié)讀 |
+-------------+ */
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++; // 讀相應(yīng)位
CLK_24 = 0;
}
ack_24(); stop24();
return(c);
}