柳亦春 茶室:“24C16”芯片读写程序有那些应用的实例?

来源:百度文库 编辑:神马品牌网 时间:2024/03/29 01:11:08
可否提供相关的信息或者网页资料?
谢谢!

// ************************************************************
// I2存储器函数区
//
// ============================================================
// SPROM脉冲延时
//
void Sdelay(void)
{
unsigned char n;
for(n=4;n>0;n--);
return;
}
// ============================================================
// SPROM开始位
//
void s24XX(void)
{
SDA24XX=1;SCK24XX=1;
Sdelay();
SDA24XX=0; // Tsu:start=4.7uS
Sdelay();
SCK24XX=0; // Thd:start=4uS
return;
}

// ============================================================
// SPROM停止位
//
void p24XX(void)
{
SDA24XX=0;
Sdelay();SCK24XX=1;
Sdelay();SDA24XX=1; // Tsu:stop=4uS
return;
}

// ============================================================
// 写数据到SPROM数据线
// 返回:ACK状态
bit w24XX(unsigned char c)
{
ACC=c;
for(c=8;c>0;c--)
{
SDA24XX=0x80 & ACC; // 数据高位送SDA针并左移一位
SCK24XX=1;_nop_(); // Clock high time
SCK24XX=0;
_nop_();
}
SDA24XX=1;
_nop_();
SCK24XX=1;CY=SDA24XX;
_nop_();
SCK24XX=0;
Sdelay();
return(CY);
}

// ============================================================
// SPROM字节读
// 参数:地址a
unsigned char rb24XX(unsigned char a)
{
s24XX();
w24XX(0xa0); w24XX(a);
s24XX(); w24XX(0xa1);

SDA24XX=1;
ACC=0; // 利用ACC返回数据
for(a=0;a<8;a++) // 使用a变量兼作循环变量
{
SCK24XX=1;
ACC+=ACC; if(SDA24XX)ACC++; // 读相应位
SCK24XX=0;
Sdelay();
}
p24XX();
return(ACC);
}

// ============================================================
// SPROM字节写
// 参数: 地址a, 数据d
// 返回: 1表示写失败
bit wb24XX(unsigned char a, unsigned char d)
{
s24XX();
w24XX(0xa0); // 控制字
w24XX(a); // 地址
w24XX(d);p24XX(); // 数据

for(a=255;a>0;a--)
{
s24XX();
if(w24XX(0xa0)==0)break;
WDT();
}
p24XX();
return(CY);
}
// SPROM¿ªÊ¼Î»
//
void s24XX(void)
{
SDA24XX=1;SCK24XX=1;
Sdelay();
SDA24XX=0; // Tsu:start=4.7uS
Sdelay();
SCK24XX=0; // Thd:start=4uS
return;
}