//////////////////////////////////////////////////////////////// //24c16读写驱动程序 // //模块调用: //读数据:read(unsigned int address) //写数据:write(unsigned int address,unsigned char dd) dd为要写的 数据字节*/ //////////////////////////////////////////////////////////////// #define unsigned char Uchar #define unsigned int Uint sbit sda = P3^; sbit scl = P3^; sbit a0 = ACC^; //定义ACC的位,利用ACC操作 //速度最快 sbit a1 = ACC^; sbit a2 = ACC^; sbit a3 = ACC^; sbit a4 = ACC^; sbit a5 = ACC^; sbit a6 = ACC^; sbit a7 = ACC^; //------------------------------------------------------------------------------ #pragma disable //起始函数 void s24(void) { _nop_(); scl = ; sda = ; scl = ; _nop_(); sda = ; _nop_(); _nop_(); scl = ; _nop_(); _nop_(); sda = ; } //------------------------------------------------------------------------------ #pragma disable //停止函数 void p24(void) { sda = ; scl = ; _nop_(); _nop_(); sda = ; } //------------------------------------------------------------------------------ #pragma disable Uchar rd24(void) //从24c16读一字节数据 { ACC = 0x00; sda = ; scl = ;a7 = sda;_nop_();_nop_();_nop_();_nop_();scl = ; scl = ;a6 = sda;_nop_();_nop_();_nop_();_nop_();scl = ; scl = ;a5 = sda;_nop_();_nop_();_nop_();_nop_();scl = ; scl = ;a4 = sda;_nop_();_nop_();_nop_();_nop_();scl = ; scl = ;a3 = sda;_nop_();_nop_();_nop_();_nop_();scl = ; scl = ;a2 = sda;_nop_();_nop_();_nop_();_nop_();scl = ; scl = ;a1 = sda;_nop_();_nop_();_nop_();_nop_();scl = ; scl = ;a0 = sda;_nop_();_nop_();_nop_();_nop_();scl = ; sda = ;scl = ;_nop_();_nop_();_nop_();_nop_();scl = ; /// ///////////////24c16的一位回答位。 return(ACC); } //------------------------------------------------------------------------------ #pragma disable void wd24(Uchar dd) ////////////////向24c16写一字节数据 { sda = ; ACC = dd; sda = a7;scl = ;_nop_();_nop_();_nop_();_nop_();scl = ; sda = a6;scl = ;_nop_();_nop_();_nop_();_nop_();scl = ; sda = a5;scl = ;_nop_();_nop_();_nop_();_nop_();scl = ; sda = a4;scl = ;_nop_();_nop_();_nop_();_nop_();scl = ; sda = a3;scl = ;_nop_();_nop_();_nop_();_nop_();scl = ; sda = a2;scl = ;_nop_();_nop_();_nop_();_nop_();scl = ; sda = a1;scl = ;_nop_();_nop_();_nop_();_nop_();scl = ; sda = a0;scl = ;_nop_();_nop_();_nop_();_nop_();scl = ; sda = ;scl = ;//scl=0;(在下面程序中) } //--------------------------------------------------------------------------- #pragma disable Uchar read(Uint address) { Uchar dd; s24(); //开始条件 wd24(0xa0); //写器件地址(写命令) _nop_();_nop_();_nop_();_nop_(); scl = ; //接收器件地址确认信号 wd24(address); // 写数据地址 _nop_();_nop_();_nop_();_nop_(); scl = ; s24(); //开始条件 wd24(0xa1); //写器件地址(读命令) scl = ; dd = rd24(); //读一字节 p24(); //停止条件 return(dd); } //------------------------------------------------------------------------------ #pragma disable void write(Uint address,Uchar dd) { s24(); //开始条件 wd24(0xa0); //写器件地址; scl = ; wd24(address); //写数据地址 scl = ; wd24(dd); //写dd数据 scl = ; p24(); //停止条件 }