“24C16”芯片读写程序有那些应用的实例?
发布网友
发布时间:2022-05-19 00:08
我来回答
共2个回答
热心网友
时间:2023-11-24 01:20
// ************************************************************
// 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;
}
热心网友
时间:2023-11-24 01:20
//
************************************************************
//
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;
}
热心网友
时间:2023-11-24 01:20
// ************************************************************
// 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;
}
热心网友
时间:2023-11-24 01:20
//
************************************************************
//
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;
}