📄 at2402.c
字号:
/* Name:AT24C02*/
#include "reg52.h"
#include "at2402.h"
// #include "common.h"
/********** Function Definition ************/
void DELAY0(unsigned int t)
{
while(t!=0)
t--;
}
void I2C_Start(void)
{
SDA=1;
SCL=1;
DELAY0(DELAY_TIME);
SDA=0;
DELAY0(DELAY_TIME);
SCL=0;
DELAY0(DELAY_TIME);
}
void I2C_Stop(void)
{
/*I2C,SCL,SDA*/
SDA=0;
SCL=1;
DELAY0(DELAY_TIME);
SDA=1;
DELAY0(DELAY_TIME);
SCL=0;
DELAY0(DELAY_TIME);
}
void SEND_0(void) /* SEND ACK */
{
SDA=0;
SCL=1;
DELAY0(DELAY_TIME);
SCL=0;
DELAY0(DELAY_TIME);
}
void SEND_1(void)
{
SDA=1;
SCL=1;
DELAY0(DELAY_TIME);
SCL=0;
DELAY0(DELAY_TIME);
}
bit Check_Acknowledge(void)
{
SDA=1;
SCL=1;
DELAY0(DELAY_TIME/2);
F0=SDA;
DELAY0(DELAY_TIME/2);
SCL=0;
DELAY0(DELAY_TIME);
if(F0==1)
return FALSE;
return TRUE;
}
void WriteI2CByte(char b)reentrant
{
char i;
for(i=0;i<8;i++)
if((b<<i)&0x80) SEND_1();
else
SEND_0();
}
char ReadI2CByte(void)reentrant
{
char b=0,i;
for(i=0;i<8;i++)
{
SDA=1;
SCL=1;
DELAY0(10);
F0=SDA;
DELAY0(10);
SCL=0;
if(F0==1)
{
b=b<<1;
b=b|0x01;
}
else
b=b<<1;
}
return b;
}
/**********24c0**********/
void Write_One_Byte(char addr,char thedata)
{
bit acktemp=1;
/*write a byte to mem*/
I2C_Start();
WriteI2CByte(0xa0); // 0xa0
acktemp=Check_Acknowledge();
WriteI2CByte(addr);/*address*/
acktemp=Check_Acknowledge();
WriteI2CByte(thedata);/*thedata*/
acktemp=Check_Acknowledge();
I2C_Stop();
}
/*
void Write_A_Page(char *buffer,char addr)
{
bit acktemp=1;
// bit wrtmp;
int i;
//write a page to at24c02
I2C_Start();
WriteI2CByte(0xa0); //0xa0
acktemp=Check_Acknowledge();
WriteI2CByte(addr); //address
acktemp=Check_Acknowledge();
for(i=0;i<7;i++)
{
WriteI2CByte(buffer[i]);
if(!Check_Acknowledge())
{
I2C_Stop();
}
}
I2C_Stop();
}
*/
char Read_One_Byte(char addr)
{ bit acktemp=1;
char mydata;
/*read a byte from mem*/
I2C_Start();
WriteI2CByte(0xa0); //0xa0
acktemp=Check_Acknowledge();
WriteI2CByte(addr);/*address*/
acktemp=Check_Acknowledge();
I2C_Start();
WriteI2CByte(0xa1); //0xa1
acktemp=Check_Acknowledge();
mydata=ReadI2CByte();
acktemp=Check_Acknowledge();
I2C_Stop();
return mydata;
}
/*
void Read_N_Bytes(char *buffer,char n,char addr)
{
bit acktemp=1;
int i=0;
//read 8 bytes from mem
I2C_Start();
WriteI2CByte(0xa0); //0xa0
acktemp=Check_Acknowledge();
WriteI2CByte(addr);//address
acktemp=Check_Acknowledge();
I2C_Start();
WriteI2CByte(0xa1); //0xa1
acktemp=Check_Acknowledge();
for(i=0;i<n;i++)
{
buffer[i]=ReadI2CByte();
if(i!=n-1)
SEND_0();
else
SEND_1();
}
I2C_Stop();
}
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -