×
单片机 > 单片机程序设计 > 详情

C51 GPIO口模拟IIC读写24CXX

发布时间:2020-08-31 发布时间:
|

#include

#define delayNOP() {_nop_(); _nop_(); _nop_(); _nop_();}


//IIC 开始信号

void iic_start(void)

{

    SDA = 1;

    SCL = 1;

    delayNOP();

    SDA = 0;

    delayNOP();

    SCL = 0;

}

//IIC 停止信号

void iic_stop(void)

{

    SDA = 0;

    delayNOP();

    SCL = 1;

    delayNOP();

    SDA = 1;

}


//IIC 写字节

bit iic_write(u8 dat)

{

    bit ack;

    int i=0;

    SCL = 0;

    for(i=0; i<8; i++)

    {

        SDA = (bit)((dat<

        _nop_();

        SCL = 1;

        delayNOP();

        SCL = 0;

    }

    SDA = 1;//释放SDA

    delayNOP();

    SCL = 1;

    delayNOP();

    ack = SDA;  //读取应答位 从器件应答

    SCL = 0;

    return ack;

}


//IIC读字节  

u8 iic_read(void)

{

    u8 i, read_dat=0;

    for (i=0; i<8; i++)

    {

        SCL = 1;

        read_dat <<= 1;

        read_dat |= SDA;

        SCL = 0;

    }

    return read_dat;

}


void write_byte(u8 addr, u8 dat)

{

    iic_start();

    iic_write(0xa0);

    iic_write(0x00);  //20C64  双地址 H L

    iic_write(addr);

    iic_write(dat);

    iic_stop();

    mdelay(10);

}


u8 read_byte(u8 addr)

{

    u8 dat;

    iic_start();

    iic_write(0xa0);

    iic_write(0x00); //20C64  双地址 H L

    iic_write(addr);

    iic_start();

    iic_write(0xa1);

    dat = iic_read();

    iic_stop();

    return dat;

}




『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
TQ210天嵌开发板S5PV210 LED闪烁程序C语言代码记录