?? 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 + -