93C66为4K位串行 EEPROM存储器,读写时序与24C有点区别。
根据手册,读取数据时,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); }
|