24c01a.c
来自「24C01的读写程序」· C语言 代码 · 共 122 行
C
122 行
delay()
{
unsigned int i=1200;
while(i--);
}
delay1(unsigned char i)
{
while(i--)
{
_nop_();
}
}
/*----------------------------------------------------------------------------
调用方式:write_8bit(unsigned char ch) ﹫2001/03/23
函数说明:内函数,私有,用户不直接调用。
-------------------------------------------------------------------------------
*/
void write_8bit(unsigned char ch)
{
unsigned char i=8;
SCL=0;
delay1(5);
while (i--)
{
SDA=(bit)(ch&0x80);
delay1(5);
ch<<=1;
SCL=1;
delay1(5);
SCL=0;
delay1(5);
}
delay1(10);
}
/*------------------------------------------------------------------------------
调用方式:void ACK(void) ﹫2001/03/23
函数说明:内函数,私有,用户不直接调用。
-------------------------------------------------------------------------------
*/
void ACK(void)
{
unsigned char time_1;
SDA=1;
SCL=0;
delay1(5);
SCL=1;
time_1=30;
while(SDA) {if (!time_1) break;} //ACK
SCL=0;
delay1(10);
}
/*;停止24C01时序*/
void IICStart(void)
{
SCL=0; //
SDA=1;
SCL=1;
_nop_();
_nop_();
_nop_();
SDA=0;
_nop_();
_nop_();
_nop_();
_nop_();
SCL=0;
//SDA=1; //
}
/*;停止24C01时序*/
void Stop()
{
SDA=0;
SCL=1;
SDA=1;
}
unsigned char ReadIIC_24C01(unsigned char address)
{
unsigned char ddata=0;
unsigned char i=8;
IICStart();
write_8bit(0xa0);
ACK();
write_8bit(address); //写页地址和操作方式
ACK();
IICStart();
write_8bit(0xa1);
ACK();
while (i--)
{
SDA=1;
ddata<<=1;
SCL=0;
delay1(5);
SCL=1;
if (SDA) ddata|=0x01;
}
Stop();
SCL=0;_nop_();SCL=1;delay1(6);
SDA=0;_nop_();SCL=1;delay1(6);
SDA=1; //STOP
delay();
return ddata;
}
void WriteIIC_24C01(unsigned char address,unsigned char ddata)
{
IICStart();
write_8bit(0xa0);
ACK();
write_8bit(address);
ACK();
write_8bit(ddata);
ACK();
write_8bit(ddata); //发送数据
ACK();
Stop();
delay();
}
/***********以上是***写24C01一个字节函数***************/
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?