51单片机I2C总线


#include 

sbit I2C_SCL = P2^1;
sbit I2C_SDA = P2^0;

void I2C_Start()        //I2C×ÜÏ߯ôÓÃ
{
    I2C_SCL = 1;
    I2C_SDA = 1;
    I2C_SDA = 0;
    I2C_SCL = 0;
}
void I2C_Stop()            //I2C×ÜÏß½áÊø
{
    I2C_SDA = 0;
    I2C_SCL = 1;
    I2C_SDA = 1;
}

void I2C_SendByte(unsigned char Byte)//·¢ËÍһλ
{
    unsigned char i;
    for (i = 0; i < 8; i++)
    {
        I2C_SDA = Byte&(0x80>>i);
        I2C_SCL = 1;
        I2C_SCL = 0;
    }
}
unsigned char I2C_ReceveByte(void)//½ÓÊÕһλ
{
    unsigned char i;
    unsigned char Byte = 0x00;
    I2C_SDA = 1;
    for (i = 0; i < 8; i++)
    {
        I2C_SCL = 1;
        if(I2C_SDA){Byte|=(0x80>>i);}
        I2C_SCL = 0; 
    }
    return Byte;
}

void I2C_SendAck(unsigned char Ack)//·¢ËÍУÑéÂë
{
    I2C_SDA = Ack;
    I2C_SCL = 1;
    I2C_SCL = 0;
}
unsigned char I2C_ReceiceAck(void)//½ÓÊÜУÑéÂë
{
    unsigned char AckBit;
    I2C_SDA = 1;
    I2C_SCL = 1;
    AckBit = I2C_SDA;
    I2C_SCL = 0;
    return AckBit;
{

报错:I2C.c(58): error C141: syntax error near ''

根据代码,第58行缺少一个右括号,这可能会导致编译器在第58行附近出现语法错误。请尝试将第58行的代码修改为:

return AckBit;
}

并重新编译代码。

应该是左右类型不一致的问题,修改第57行为 AckBit = (unsigned char)I2C_SDA;