⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 i2c.c

📁 I2c实现对AT24C16写入1至8的ASCII码
💻 C
字号:
#include "I2C.h"

/**********************************************************************
*        I2C_Delay()
*        Delay
**********************************************************************/
void I2C_Delay(void)
{
_nop_();
_nop_();
_nop_();
_nop_();
}

/**********************************************************************
*        void I2C_Start(void)
*        Start the i2c device
**********************************************************************/
void I2C_Start(void)
{
    SDA=1;SCL=1;        // pull up
    I2C_Delay();

    SDA=0;
    I2C_Delay();
    SCL=0;                        // Start
}

/**********************************************************************
*        I2C_Stop()
*        Stop
**********************************************************************/
void I2C_Stop()
{
    SDA=0;SCL=1;
    I2C_Delay();

    SDA=1;
    I2C_Delay();
    SCL=0;
}

/**********************************************************************
*        I2C_ACK()
*        ACK
**********************************************************************/
void I2C_SACK()
{
    SDA=0;SCL=1;
    I2C_Delay();

    SCL=0;SDA=1;
}

/**********************************************************************
*        I2C_NACK()
*        ACK
**********************************************************************/
void I2C_SNACK()
{
    SDA=1;SCL=1;
    I2C_Delay();

    SCL=0;SDA=0;
}

/**********************************************************************
*        I2C_CACK()
*        Check ACK
**********************************************************************/
bit I2C_CACK()
{
    bit bitTemp;
    SDA=1; // wait input
    SCL=1; // 9th pulse
    I2C_Delay();
        I2C_Delay();
        if(SDA)
            bitTemp= 1;
    else
            bitTemp= 0;
    SCL=0;
    return bitTemp;
}

/**********************************************************************
**********************************************************************/
void I2C_WriteOneByte(unsigned char tData)         // first Hight Bit.
{
    unsigned char i=8;
        while(i--)
    {
            if(tData&0x80)
                {SDA=1;SCL=1;I2C_Delay();SCL=0;SDA=0;}
        else
                        {SDA=0;SCL=1;I2C_Delay();SCL=0;}
                tData<<=1;
        }
}

/**********************************************************************
**********************************************************************/
unsigned char I2C_ReadOneByte()                                // first Hight Bit
{

    unsigned char i=8,tData=0;
        while(i--)
    {
            tData<<=1;
            SDA=1;SCL=1;
            if(SDA)tData|=0x01;
        I2C_Delay();SCL=0;
        }
    return tData;
}

/**********************************************************************
*        DeviceAddr=SLA
*        ByteAddr=addr
**********************************************************************/
unsigned char I2C_ReadEEPROM_OneByte(unsigned char SLA,unsigned char addr)
{
    unsigned char tdata;
    bit bitACK=1;

    I2C_Start();
    I2C_WriteOneByte(SLA&(~(0x01)));        // Write device
    bitACK=I2C_CACK();
    I2C_WriteOneByte(addr);
    bitACK=I2C_CACK();
        I2C_Start();
        I2C_WriteOneByte(SLA|0x01);                 // read deviece
    bitACK=I2C_CACK();
        tdata=I2C_ReadOneByte();
        I2C_Stop();
        return tdata;
}

/**********************************************************************
**********************************************************************/
void I2C_WriteEEPROM_OneByte(unsigned char SLA,unsigned char addr,unsigned char tdata)
{
        bit bitACK=1;

        I2C_Start();
    I2C_WriteOneByte(SLA&(~(0x01)));        // write device
    bitACK=I2C_CACK();
    I2C_WriteOneByte(addr);
        bitACK=I2C_CACK();
        I2C_WriteOneByte(tdata);
        bitACK=I2C_CACK();
    I2C_Stop();
}
/**********************************************************************
**********************************************************************/
/*
void I2C_WriteEEPROM_OnePage(unsigned char SLA,unsigned char page,unsigned char *buff,unsigned int length)
{
;;;;;
}
*/
/**********************************************************************
**********************************************************************/

/*
void I2C_ReadEEPROM_OnePage(unsigned char SLA,unsigned char page,unsigned char *buff,unsigned int length)
{
;;;;;
}
*/


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -