winnie 发表于 2009-4-25 15:49:41

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]
查看完整版本: AT24C02的操作