📄 24c02.c
字号:
#include "global.c"
#include "24C02.h"
#define WriteDeviceAddress 0xa0
#define ReadDeviceAddress 0xa1
#define SetSCL PFDATDIR = PFDATDIR | 0x01
#define ClrSCL PFDATDIR = PFDATDIR & 0xFFFE
#define SetSDA PFDATDIR = PFDATDIR | 0x02
#define ClrSDA PFDATDIR = PFDATDIR & 0xFFFD
#define SDAIN PFDATDIR = PFDATDIR & 0xFDFF
#define SDAOUT PFDATDIR = PFDATDIR | 0x0200
void delay(Uint16 number)
{
Uint16 j;
for(j = 0;j < number;j++) j=j;
}
void IStart(void)
{
ClrSCL;
//----------------
SDAOUT;
delay(50);
SetSDA;
SetSCL;
delay(15);
ClrSDA;
delay(5);
ClrSCL;
//---------------------
delay(5);
SetSDA;
}
void IStop(void)
{
ClrSCL;
SDAOUT;
delay(50);
ClrSDA;
delay(15);
SetSCL;
delay(5);
SetSDA;
//----------------------
delay(5);
ClrSCL;
}
void IAck(void)
{
SDAOUT;
delay(50);
ClrSDA;
delay(5);
SetSCL;
delay(15);
ClrSCL;
delay(5);
SetSDA;
}
void INAck(void)
{
SDAOUT;
delay(50);
SetSDA;
SetSCL;
delay(15);
ClrSCL;
}
Uint16 TestAck(void)
{
Uint16 Temp;
ClrSCL;
delay(5);
SetSCL;
delay(15);
SDAIN;
delay(50);
ClrSCL;
Temp = 0x0002 & PFDATDIR;
return Temp;
}
void WriteByte(Uint16 data)
{
Uint16 i;
Uint16 Temp = 0x8000;
data = data<<8;
SDAOUT;
delay(50);
for(i=8;i!=0;i--)
{
if (Temp & data) SetSDA;
else ClrSDA;
SetSCL;
delay(15);
ClrSCL;
data = data<<1;
}
}
Uint16 ReadByte(void)
{
Uint16 i,T;
Uint16 Temp = 0x0000;
SDAIN;
delay(50);
for (i=8;i!=0;i--)
{
SetSCL;
Temp = Temp<<1;
T = PFDATDIR;
T = T & 0x0002;
if (T) Temp = Temp | 1;
else Temp = Temp | 0;
delay(15);
ClrSCL;
}
return Temp;
}
Uint16 Write24c02(Uint16 *Wdata, Uint16 RomAddress, Uint16 number)
{
IStart();
WriteByte(WriteDeviceAddress);
if(TestAck()) return 1;
WriteByte(RomAddress);
if(TestAck()) return 1;
for(;number!=0;number--)
{
WriteByte(*Wdata);
if(TestAck()) return 1;
Wdata++;
}
IStop();
delay(10000);
return 0;
}
Uint16 Read24c02(Uint16 *RamAddr, Uint16 RomAddress, Uint16 number)
{
IStart();
WriteByte(WriteDeviceAddress);
if(TestAck()) return 1;
WriteByte(RomAddress);
if(TestAck()) return 1;
IStart();
WriteByte(ReadDeviceAddress);
if(TestAck()) return 1;
while(number!=1)
{
*RamAddr = ReadByte();
IAck();
RamAddr++;
number--;
}
*RamAddr = ReadByte();
INAck();
IStop();
return 0;
}
//===========================================================================
// No more.
//===========================================================================
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -