📄 at24c08.c
字号:
/***************************************************
说明:本程序是的开发环境是microchip MPLAB 7.20,
编译器是PICC18V8.35
本人使用的MCU是PIC18F4520,EEPROM 是AT24C08
使用的是I2C接口
原型:Delay(unsigned int)
功能:延时子程序
原型:void IIC_ByteWrite(unsigned int Addr,unsigned char WData)
功能:写数据WData到地址Addr
原型:unsigned char IIC_RandomRead(unsigned int Addr)
功能:读取地址Addr的数据
原型:void IIC_PageWrite(unsigned int Addr,far unsigned char *Buf,unsigned char NByte)
功能:从指针Buf开始取NByte个字节写到Addr开始的EEPROM(NByte<=16)
原型:void IIC_SeqRead(unsigned int Addr,far unsigned char *Buf,unsigned char NByte)
功能:从地址Addr开始连续读取NByte个字节,并存放到指针Buf指向的空间
****************************************************/
#define WRITE 0XA0
#define READ 0XA1
void IIC_ByteWrite(unsigned int Addr,unsigned char WData)
{
unsigned char Page,PageAddr;
Page=(unsigned char)(Addr/256);
PageAddr=(unsigned char)(Addr%256);
SEN=1;
do{}while(SSPIF==0);
SSPIF=0;
Delay(5);
SSPBUF=WRITE|(Page<<1);
do{}while(SSPIF==0);
SSPIF=0;
Delay(5);
SSPBUF=PageAddr;
do{}while(SSPIF==0);
SSPIF=0;
Delay(5);
SSPBUF=WData;
do{}while(SSPIF==0);
SSPIF=0;
while(BF);
Delay(5);
PEN=1;
do{}while(SSPIF==0);
SSPIF=0;
Delay(300);
return;
}
unsigned char IIC_RandomRead(unsigned int Addr)
{
unsigned char RData;
unsigned char Page,PageAddr;
Page=(unsigned char)(Addr/256);
PageAddr=(unsigned char)(Addr%256);
SEN=1;
do{}while(SSPIF==0);
SSPIF=0;
Delay(5);
SSPBUF=WRITE|(Page<<1);
do{}while(SSPIF==0);
SSPIF=0;
SSPBUF=PageAddr;
do{}while(SSPIF==0);
SSPIF=0;
Delay(5);
RSEN=1;
do{}while(SSPIF==0);
SSPIF=0;
SSPBUF=READ|(Page<<1);
do{}while(SSPIF==0);
SSPIF=0;
RCEN=1;
do{}while(SSPIF==0);
SSPIF=0;
while(BF==0);
RData=SSPBUF;
PEN=1;
do{}while(SSPIF==0);
SSPIF=0;
Delay(30);
return RData;
}
void IIC_PageWrite(unsigned int Addr,far unsigned char *Buf,unsigned char NByte)
{
char i;
unsigned char Page,PageAddr;
Page=(unsigned char)(Addr/256);
PageAddr=(unsigned char)(Addr%256);
SEN=1;
do{}while(SSPIF==0);
SSPIF=0;
Delay(5);
SSPBUF=WRITE|(Page<<1);
do{}while(SSPIF==0);
SSPIF=0;
Delay(5);
SSPBUF=PageAddr;
do{}while(SSPIF==0);
SSPIF=0;
Delay(5);
for(i=NByte;i>0;i--)
{
SSPBUF=*Buf++;
do{}while(SSPIF==0);
SSPIF=0;
while(RW);
Delay(5);
}
PEN=1;
do{}while(SSPIF==0);
SSPIF=0;
Delay(300);
return;
}
void IIC_SeqRead(unsigned int Addr,far unsigned char *Buf,unsigned char NByte)
{
char i;
unsigned char Page,PageAddr;
Page=(unsigned char)(Addr/256);
PageAddr=(unsigned char)(Addr%256);
SEN=1;
do{}while(SSPIF==0);
SSPIF=0;
SSPBUF=WRITE|(Page<<1);
do{}while(SSPIF==0);
SSPIF=0;
SSPBUF=PageAddr;
do{}while(SSPIF==0);
SSPIF=0;
Delay(5);
RSEN=1;
do{}while(SSPIF==0);
SSPIF=0;
SSPBUF=READ|(Page<<1);
do{}while(SSPIF==0);
SSPIF=0;
for(i=NByte;i>1;i--)
{
RCEN=1;
do{}while(SSPIF==0);
SSPIF=0;
while(BF==0);
*Buf++=SSPBUF;
ACKDT=0;
ACKEN=1;
do{}while(SSPIF==0);
SSPIF=0;
Delay(5);
}
RCEN=1;
do{}while(SSPIF==0);
SSPIF=0;
while(BF==0);
*Buf=SSPBUF;
PEN=1;
do{}while(SSPIF==0);
SSPIF=0;
Delay(30);
return;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -