[单片机] GPIO模拟IIC

该程序实现了IIC协议中的主设备功能,包括发送启动和停止信号、读写数据以及应答机制。通过定义GPIO口模拟SDA和SCL线,对指定设备地址进行通信,支持写传感器寄存器和读取传感器数据操作。
/*
本程序是IIC作为主设备(主动发起启动信号)
*/
#define uint8_t unsigned char
#define DEV_ADDR 0x70 //需要控制的设备地址
#define ADDRESS_DEV (DEV_ADDR << 7)

int SDA = 0; // 某GPIO_DAT;如51单片机时 #define SDA P1_0
int SCL = 0; // 某GPIO_CLK;如51单片机时 #define SCL P1_1

void I2C_SendByte(uint8_t _ucByte)
{
    uint8_t i;

    IIC_Delay();
    /* 先发送字节的高位bit7 */
    for (i = 0; i < 8; i++)
    {
        if (_ucByte & 0x80)
        {
            SDA = 1;
        }
        else
        {
            SDA = 0;
        }
        IIC_Delay();
        SCL = 1;
        IIC_Delay();
        SCL = 0;
        if (i == 7)
        {
            SDA = 1;
        }
        _ucByte <<= 1; /* 左移一个bit */
        IIC_Delay();
    }
}

uint8_t I2C_ReadByte(void)
{
    uint8_t i;
    uint8_t value = 0;
    IIC_Delay();
    // 读到第1个bit为数据的bit7
    for (i = 0; i < 8; i++)
    {
        value <<= 1;
        SCL = 1;
        IIC_Delay();
        if (SDA == 1)
        {
            value++;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值