⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 eeprom连续页写模式.c

📁 eeprom连续页写模式
💻 C
字号:
eeprom连续页写模式,5ms页写入时间(mgwmj)(点击数:822) 
//E2PROM i2c通用写入子程序,可单字节写入(len=1),也可多字节页写入,内部自动分页
处理
//chip_addr:芯片首地址;len:待写数据长度;data_ptr:待写数据地址或数组首地址
void eep_page_write(unsigned int chip_addr, unsigned int len, unsigned char 
*data_ptr)
{
  unsigned char i, i_data;
  unsigned int  addr;
  bit   b;
  if(len==0) return; addr=chip_addr; b=EA; EA=0;
  do{
     scl=0; sda=1; scl=1; sda=0; scl=0;                 //起始条件

     i_data=0xa0;                                       //芯片地址码+W
     for(i=0;i<8;i++){sda=i_data&0x80; i_data=i_data<<1; scl=1; scl=0;}
     sda=1; scl=1; if(sda==1)goto end; scl=0;           //检测ACK应答

     i_data=addr >> 8;                                  //写高地址
     for(i=0;i<8;i++){sda=i_data&0x80; i_data=i_data<<1; scl=1; scl=0;}
     sda=1; scl=1; if(sda==1)goto end; scl=0;           //检测ACK应答

     i_data=addr & 0x00ff;                              //写低地址
     for(i=0;i<8;i++){sda=i_data&0x80; i_data=i_data<<1; scl=1; scl=0;}
     sda=1; scl=1; if(sda==1)goto end; scl=0;           //检测ACK应答

     do{                                                //写数据
        i_data=*data_ptr++;
        for(i=0;i<8;i++){sda=i_data&0x80; i_data=i_data<<1; scl=1; scl=0;}
        sda=1; scl=1; if(sda==1)goto end; scl=0;        //检测ACK应答
        addr++;
     }while(!(addr==chip_addr+len || addr%64==0));      //写满或到达页边界时退出

     sda=0; scl=1; sda=1;                               //停止条件
     delay(5);
  }while(addr!=chip_addr+len);                          //未写满,换页继续
end:  EA=b;
} 
 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -