请问我这段IIC底层代码有什么问题,为什么写不进去数据。

#include"intrins.h"
#include"iic.h"

sbit SCL = P2^0;
sbit SDA = P2^1;

//#define SCL P20
//#define SDA P21

void IIC_Start()
{
     SCL = 1;
     SDA = 1;
     delay2us();
     SDA = 0;
     delay2us();
     SCL = 0;
}

void IIC_Stop()
{

    SDA = 0;
    SCL = 1;

    delay2us();
    SDA = 1;
    delay2us();
}
void Write_IIC(unsigned char dat)
{
    unsigned char i;

    EA = 0;
    for(i=0; i<8; i++)
    {
        SCL = 0;
        delay2us();
        if(dat & 0x80)
        {    SDA = 1;   }
        else
        {    SDA = 0;   }
        delay2us();
        SCL = 1;
        delay2us();
        dat <<= 1;
        delay2us();
    }
    EA = 1;
    SCL = 1;
}
unsigned char Read_Iic()
{
    unsigned char i,dat;
    EA = 0;               
    for(i=0; i<8; i++)
    {
        SCL = 1;        
        delay2us();
        dat <<= 1;
        if(SDA)        
            dat |= 0x01;
        //delay2us();
        SCL = 0;    
        delay2us();
    }
    EA = 1;
    return dat;
}
void IIC_SendAck(unsigned char ack)
{
    SCL = 0;
    SDA = ack; delay2us();
    SCL = 1; delay2us();
    SCL = 0;
    SDA = 1;
    delay2us();
}
unsigned char IICRead_Byte(unsigned char add)
{
    unsigned char dat;
    IIC_Start();
    Write_IIC(0xA0);
    IIC_Ack();
    Write_IIC(add);
    IIC_Ack();
    IIC_Start();
    Write_IIC(0xA1);
    IIC_Ack();
    dat = Read_Iic();
    IIC_SendAck(0);
    IIC_Stop();
    return dat;
}
void IICWrite_Byte(unsigned char add, unsigned char dat)
{    
    IIC_Start();
    Write_IIC(0xA0);
    IIC_Ack();
    Write_IIC(add);
    IIC_Ack();
    Write_IIC(dat);
    IIC_Ack();
    IIC_Stop();
    delay2us();delay2us();delay2us();delay2us();delay2us();delay2us();delay2us();delay2us();
}
unsigned char IIC_Ack()
{
    unsigned char count;    
    SCL = 1;delay2us();
    count = SDA;
    SCL = 0;delay2us();
    return count;
}

void delay2us()
{
    unsigned char i = 5;
    do
    {
        _nop_();_nop_();_nop_();_nop_();_nop_();
        _nop_();_nop_();_nop_();_nop_();_nop_();
        _nop_();_nop_();_nop_();_nop_();_nop_();        
    }
    while(i--);
}
 

你好,我是有问必答小助手,非常抱歉,本次您提出的有问必答问题,技术专家团超时未为您做出解答

本次提问扣除的有问必答次数,将会以问答VIP体验卡(1次有问必答机会、商城购买实体图书享受95折优惠)的形式为您补发到账户。

​​​​因为有问必答VIP体验卡有效期仅有1天,您在需要使用的时候【私信】联系我,我会为您补发。