📄 24lc32.c
字号:
#include "24LC32.h"
#include "C8051f.h"
#define WriteDeviceAddress 0xa2
#define ReadDeviceAddress 0xa3
sbit E2P_SCL = P2^3;
sbit E2P_SDA = P2^2;
sbit E2P_DOG = P3^7;
static void AT32DelayMs(unsigned int number)
{
unsigned char temp;
for( ; number != 0; number--,E2P_DOG =! E2P_DOG)
{
for(temp = 112; temp != 0; temp--)
{
}
}
}
static void AT32Start()
{
E2P_SDA = 1;
E2P_SCL = 1;
E2P_SDA = 0;
E2P_SCL = 0;
}
/***************************************************************************/
static void AT32Stop()
{
E2P_SCL = 0;
E2P_SDA = 0;
E2P_SCL = 1;
E2P_SDA = 1;
}
/***************************************************************************/
static void AT32Ack()
{
E2P_SDA = 0;
E2P_SCL = 1;
E2P_SCL = 0;
E2P_SDA = 1;
}
/***************************************************************************/
static void AT32NoAck()
{
E2P_SDA = 1;
E2P_SCL = 1;
E2P_SCL = 0;
}
/***************************************************************************/
static bit AT32TestAck()
{
bit ErrorBit;
E2P_SDA = 1;
E2P_SCL = 1;
ErrorBit = E2P_SDA;
E2P_SCL = 0;
return(ErrorBit);
}
/***************************************************************************/
static void AT32Write8Bit(unsigned char input)
{
unsigned char temp;
for(temp=8;temp!=0;temp--)
{
E2P_SDA = (bit)(input&0x80);
E2P_SCL = 1;
E2P_SCL = 0;
input = input<<1;
}
}
static unsigned char AT32Read8Bit()
{
unsigned char temp;
unsigned char rbyte = 0;
for(temp = 8; temp != 0; temp--)
{
E2P_SCL = 1;
rbyte = rbyte << 1;
rbyte = rbyte|((unsigned char)(E2P_SDA));
E2P_SCL = 0;
}
return(rbyte);
}
static void Write24c32(unsigned char *Wdata,unsigned int RomAddress,unsigned char number)
{
unsigned char AddrH;
unsigned char AddrL;
AddrL = (unsigned char)(RomAddress & 0x00ff);
AddrH = (unsigned char)((RomAddress & 0x0f00) >> 8);
AT32Start();
AT32Write8Bit(WriteDeviceAddress);
AT32TestAck();
AT32Write8Bit(AddrH);
AT32TestAck();
AT32Write8Bit(AddrL);
AT32TestAck();
for( ; number != 0; number--)
{
AT32Write8Bit(*Wdata);
AT32TestAck();
Wdata++;
}
AT32Stop();
AT32DelayMs(10);
}
static void Read24c32(unsigned char *RamAddress,unsigned int RomAddress,unsigned char bytes)
{
unsigned char AddrH;
unsigned char AddrL;
AddrL = (unsigned char)(RomAddress & 0x00ff);
AddrH = (unsigned char)((RomAddress & 0x0f00) >> 8);
AT32Start();
AT32Write8Bit(WriteDeviceAddress);
AT32TestAck();
AT32Write8Bit(AddrH);
AT32TestAck();
AT32Write8Bit(AddrL);
AT32TestAck();
AT32Start();
AT32Write8Bit(ReadDeviceAddress);
AT32TestAck();
while(bytes != 1)
{
*RamAddress = AT32Read8Bit();
AT32Ack();
RamAddress++;
bytes--;
}
*RamAddress = AT32Read8Bit();
AT32NoAck();
AT32Stop();
}
void E2PWrite32(unsigned int Addr,unsigned char Val)
{
Write24c32(&Val,Addr,1);
}
unsigned char E2PRead32(unsigned int Addr)
{
unsigned char Temp;
Read24c32(&Temp,Addr,1);
return(Temp);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -