93C66為4K位串行 EEPROM存儲器,讀寫時序與24C有點區別。
93C66引腳圖
根據手冊,讀取數據時,CS置高,先向DI發起始位1(高電平),再發送操作碼10,然后再發9位地址碼,這樣就可以讀取數據了。但無論如何修改程序,讀出的數據要么不是0XFF,就是0XF0或0XF8。時序圖和源碼見后,請各位大師指點。
讀取數據時序圖
單片機源程序如下:
void wd93(uint dd,uchar num)//寫入 { unsigned char i; dd=dd<<(16-num); for (i=0; i<num; i++) { if (dd & 0x8000) DI_93c66=1; else DI_93c66=0; SK_93c66=0; delay_us(1); SK_93c66=1; delay_us(1); dd=dd<<1; SK_93c66=0; } }
void ewen93()//允許編程 { CS_93c66=1; wd93(0x0980,12);// 0000 1001 1xxxxxxx 允許寫指令 CS_93c66=0; }
void ewds93()//禁止編程 { CS_93c66=1; wd93(0x0900,12);//0000 1001 0xxx xxxx 禁止寫指令 CS_93c66=0; }
unsigned char ReadEe(uint address)//讀取數據 address:A8--A0 { unsigned char i, dat=0; CS_93c66=1; delay_us(2);// wd93(0x06,3);// 110 wd93(address,9);//xxxxx xxxx
for (i=0; i<8; i++) { dat=dat<<1; SK_93c66=0; delay_us(1);// SK_93c66=1; delay_us(1);// if(DO_93c66) dat=dat|1;
} CS_93c66=0;delay_us(2);// return(dat); }
void WriteEe(uint address,unsigned char dat)//寫入數據 address:A8--A0 { CS_93c66=1;delay_us(10);//
wd93(0x05,3); // 101 wd93(address,9); //x xxxx xxxx wd93(dat,8); //data
CS_93c66=0;delay_ms(4); }
|