📄 at24c512.c
字号:
#include <AT24C512.h>
void IICpwrite(unsigned char highaddress,unsigned char lowaddress,unsigned char *psr);
void IICpread(unsigned char highaddress,unsigned char lowaddress,unsigned char *dst);
void ByteWrite24C512(unsigned int ADDR,unsigned char Data);
unsigned char ByteRead24C512(unsigned int ADDR);
void IICWriteByte(unsigned char sendbyte);
void IICWriteByte(unsigned char sendbyte);
unsigned char IICReadByte(void);
void IICStart(void);
void IICStop(void);
void IICAck(void);
void Noack(void);
void _Nop() //延时1us
{
unsigned char i=1;
while(i--);
}
/*******************页面写数据*********************/
/*void IICpwrite(unsigned char highaddress,unsigned char lowaddress,unsigned char *psr)
{
int i;
// WP=0;_nop_();_nop_();_nop_();_nop_();
IICStart();
IICWriteByte(0xa0);
IICWriteByte(highaddress);
IICWriteByte(lowaddress);
for(i=0;i<5;i++)
{ IICWriteByte(*psr++); }
IICStop();
// WP=1;
}*/
/*******************页面读数据********************/
/*void IICpread(unsigned char highaddress,unsigned char lowaddress,unsigned char *dst)
{
int i;//WP=0;
IICStart();
IICWriteByte(0xa0);
IICWriteByte(highaddress);
IICWriteByte(lowaddress);
IICStart();
IICWriteByte(0xa1);
for(i=0;i<5;i++)
{
*dst++=IICReadByte();
if(i<4) IICAck();
else Noack();
}
IICStop();
// WP=1;
}*/
/*******************随机写数据*********************/
void ByteWrite24C512(unsigned int ADDR,unsigned char Data)
{
IICStart();
IICWriteByte(0xa0);
IICWriteByte((ADDR&0xFF00)>>8); //高位地址
IICWriteByte(ADDR&0x00FF); //低位地址
IICWriteByte(Data);
IICStop();
// Delay2(10000);
}
/**********************随机读数据**********/
unsigned char ByteRead24C512(unsigned int ADDR)
{
unsigned char ReadByte;
IICStart();
IICWriteByte(0xa0);
IICWriteByte((ADDR&0xFF00)>>8);
IICWriteByte(ADDR&0x00FF);
IICStart();
IICWriteByte(0xa1);
ReadByte=IICReadByte();
IICStop();
return(ReadByte);
}
/*******************向IIC总线写数据*********************/
void IICWriteByte(unsigned char sendbyte)
{
unsigned char j;
// SCL=0;
for(j=8;j>0;j--)
{
sendbyte<<=1; //无论C51怎样实现这个操作,始终会使CY=sendbyte^7;
SDA=CY;
_Nop();
SCL=1;
_Nop();
SCL=0;
}
SDA=1;
_Nop();
SCL=1;
while(SDA);
SCL=0;
}
/**********************从IIC总线上读数据子程序**********/
unsigned char IICReadByte(void)
{
unsigned char receivebyte=0,i=8;
// SCL=0;
SDA=1;
for(i=0;i<8;i++)
{
receivebyte=(receivebyte<<1)|SDA;
SCL=1;
SCL=0;
}
SDA=1;SCL=0;
return(receivebyte);
}
/*****************启动总线**********************/
void IICStart(void)
{
SDA=1; /*发送起始条件的数据信号*/
_Nop();
SCL=1;
_Nop(); /*起始条件建立时间大于4.7us,延时*/
_Nop();
_Nop();
_Nop();
_Nop();
SDA=0; /*发送起始信号*/
_Nop(); /* 起始条件锁定时间大于4μs*/
_Nop();
_Nop();
_Nop();
_Nop();
SCL=0; /*钳住I2C总线,准备发送或接收数据 */
_Nop();
_Nop();
_Nop();
_Nop();
}
/*****************停止IIC总线****************/
void IICStop(void)
{
SDA=0; /*发送结束条件的数据信号*/
_Nop(); /*发送结束条件的时钟信号*/
SCL=1; /*结束条件建立时间大于4μs*/
_Nop();
_Nop();
_Nop();
_Nop();
_Nop();
SDA=1; /*发送I2C总线结束信号*/
_Nop();
_Nop();
_Nop();
_Nop();
}
/*void IICAck(void)
{
SDA=0;_Nop();_Nop();_Nop();_Nop();
SCL=1;_Nop();_Nop();_Nop();_Nop();_Nop();
SCL=0;_Nop();_Nop();
// SDA=1;_nop_();
}
void Noack(void)
{
SDA=1;_Nop();_Nop();_Nop();_Nop();
SCL=1;_Nop();_Nop();_Nop();_Nop();_Nop();
SCL=0;_Nop();_Nop();
}*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -