////////////////////////////////////////////////////////////////
//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();                           //停止条件
}
05-04 00:58