📄 24c02.c
字号:
#include "global.c"
#include "24C02.h"
//IOPA3=SCL
//IOPA4=SDA
#define WriteDeviceAddress 0xa0
#define ReadDeviceAddress 0xa1
#define SetSCL PADATDIR = PADATDIR | 0x0008
#define ClrSCL PADATDIR = PADATDIR & 0xFFF7
#define SetSDA PADATDIR = PADATDIR | 0x0010
#define ClrSDA PADATDIR = PADATDIR & 0xFFEF
#define SDAIN PADATDIR = PADATDIR & 0xF7FF
#define SDAOUT PADATDIR = PADATDIR | 0x1000
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 = 0x0010 & PADATDIR;
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 = PADATDIR;
T = T & 0x0010;
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 + -