AT24C02的操作
我用的是PIC18F452:对AT24C02进行读写的操作。
程序如下:硬件仿真时,我在数字示波器上看到的ACK应答位都是1,
而且读出来的值都是0XFF。
void i2cout_write(unsignedchar address,unsignedchar data)
{
SEN=1;
delay(20);
do{
RSEN=1;
}while(SSPIF==0);
SSPIF=0;
delay(10);
SSPBUF= 0xa0;
do{
;
}while(SSPIF==0);
SSPIF=0;
delay(5);
SSPBUF= address;
do{
;
}while(SSPIF==0);
SSPIF=0;
delay(5);
SSPBUF= data;
do{
;
}while(SSPIF==0);
SSPIF=0;
delay(5);
PEN=1;
do{
;
}while(SSPIF==0);
SSPIF=0;
}
u8 i2cout_read(unsignedchar address)
{
u8 temp;
SEN=1;
delay(20);
do{
RSEN=1;
}while(SSPIF==0);
SSPIF=0;
delay(10);
SSPBUF=0xa0 ;
do{
;
}while(SSPIF==0);
SSPIF=0;
delay(5);
SSPBUF= address;
do{
;
}while(SSPIF==0);
SSPIF=0;
delay(5);
SEN=1;
delay(20);
do{
RSEN=1;
}while(SSPIF==0);
SSPIF=0;
delay(10);
SSPBUF= 0xa1;
do{
;
}while(SSPIF==0);
SSPIF=0;
delay(10);
RCEN=1;
temp=SSPBUF;
do{
;
}while(SSPIF==0);
temp=SSPBUF;
SSPIF=0;
delay(5);
PEN=1;
do{
;
}while(SSPIF==0);
SSPIF=0;
RCEN=0;
return temp;
}
main()
{
unsignedchardata1,data2;
unsignedcharaddress;
/* I2C*/ //初始化:
SSPCON1=0x08;
TRISC3=1;
TRISC4=1;
SSPSTAT=0x08;
SSPADD=0x06;
SSPCON2=0x00;
SSPIF=0;
RCEN=1;
SSPEN=1;
address=0xaa;
data1=0xee;
i2cout_write(address,data1);
data2=i2cout_read(address);
}
页:
[1]