📄 at24c04.c
字号:
/*=============================================*/
/*;***********************************/
/*;起动24C01时序*/
void Start()
{
SCL=1;
SDA=1;
SDA=0;
SCL=0;
}
/*;************************************/
/*;停止24C01时序*/
void Stop()
{
SDA=0;
SCL=1;
SDA=1;
}
/*;**************************************/
/*;检测24C01的响应信号*/
bit ACK()
{
bit c;
SDA=1;
SCL=1;
c=SDA;
SCL=0;
return c;
}
/*;************************************/
/*;往24C01发一8位数据*/
void SendChar(unsigned char ch)
{
unsigned char i;
i=8;
do
{
SDA=(ch&0x80);
SCL=1;
SCL=0;
ch<<=1;
}while(--i!=0);
}
/*;**************************************/
/*;从24C01接收一8位数据*/
unsigned char RecChar()
{
unsigned char i,j;
i=8;
do
{
SCL=1;
j=(j<<1)|SDA;
SCL=0;
}while(--i!=0);
return j;
}
//;**************************************
/*;********************************/
/*;往24C01写一字节*/
void WriteChar(unsigned int addr,unsigned char ch)
{
unsigned char c;
c=((*((unsigned char *)&addr))<<1)&0x02;
Start();
SendChar(0xa0|c);
ACK();
SendChar(addr);
ACK();
SendChar(ch);
ACK();
Stop();
// for(addr=4;addr!=0;addr--)
for(ch=0xff;ch!=0;ch--) ;
}
//;**************************************
/*;********************************/
/*;往24C01写多字节*/
void WriteBuf(unsigned int addr,unsigned char idata *buf,unsigned char count)
{
unsigned char c;
c=((*((unsigned char *)&addr))<<1)&0x02;
Start();
SendChar(0xa0|c);
ACK();
SendChar(addr);
ACK();
do
{
SendChar(*buf++);
ACK();
if(count!=1)
{if(((++addr)&0x7)==0)
{
Stop();
for(c=0xff;c!=0;c--) ;
c=((*((unsigned char *)&addr))<<1)&0x02;
Start();
SendChar(0xa0|c);
ACK();
SendChar(addr);
ACK();
}
}
else
{
Stop();
for(c=0xff;c!=0;c--) ;
}
}while(--count!=0);
}
/*;**********************************/
/*;从24C01读一字节*/
/*;入口:R0中为要读出内容的地址*/
/*;出口:A中为读到的内容*/
unsigned char ReadChar(unsigned int addr)
{
unsigned char ch;
ch=((*((unsigned char *)&addr))<<1)&0x02;
Start();
SendChar(0xa0|ch);
ACK();
SendChar(addr);
ACK();
Start();
SendChar(0xa1|ch);
ACK();
ch=RecChar();
Stop();
return ch;
}
/**********************************/
/*至少读2字节*/
void ReadBuf(unsigned int addr,unsigned char idata *buf,unsigned char count)
{
unsigned char ch;
ch=((*((unsigned char *)&addr))<<1)&0x02;
Start();
SendChar(0xa0|ch);
ACK();
SendChar(addr);
ACK();
Start();
SendChar(0xa1|ch);
ACK();
count--;
do
{
*buf++=RecChar();
SDA=0;
SCL=1;
SCL=0;
SDA=1;
}while(--count!=0);
*buf=RecChar();
Stop();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -