24c16连续读写不正确求助

2019-12-31 19:18发布

我的程序单字节读写都没问题,连续的就不行,代码如下,求帮忙看看
void start_iic(void)
{
TWI_SCL_HIGH();
delay_us(DELAYTIME);
TWI_SDA_HIGH();       
delay_us(DELAYTIME);
TWI_SDA_LOW();
delay_us(DELAYTIME);
TWI_SCL_LOW();
delay_us(DELAYTIME);
}

void stop_iic(void)
{
TWI_SDA_LOW();       
delay_us(DELAYTIME);
TWI_SCL_HIGH();
delay_us(DELAYTIME);
TWI_SDA_HIGH();       
delay_us(DELAYTIME);
TWI_SCL_LOW();
delay_us(DELAYTIME);
}

uint8_t readchar(void)
{
        uint8_t  i,val=0;
        TWI_SDA_INPUT();
        TWI_DELAY();
        for(i=0;i<8;i++)
        {
                val <<= 1;
                TWI_SCL_HIGH();
                delay_us(DELAYTIME);
                if (TWI_SDA_READ() == 1)
                        val |=1;
                TWI_SCL_LOW();
                delay_us(DELAYTIME);
        }
        TWI_SDA_OUTPUT();
        delay_us(DELAYTIME);
        TWI_SDA_HIGH();       
        delay_us(DELAYTIME);
        TWI_SCL_HIGH();
        delay_us(DELAYTIME);
        TWI_SCL_LOW();
        delay_us(DELAYTIME);
        return val;
}

void writedata(uint8_t  data)
{
uint8_t  i;
for(i=0;i<8;i++)
{
if(data & 0x80)  TWI_SDA_HIGH();       
else             TWI_SDA_LOW();
data=(data<<1);
TWI_SCL_HIGH();
delay_us(DELAYTIME);
TWI_SCL_LOW();
delay_us(DELAYTIME);
}
TWI_SDA_INPUT();
TWI_DELAY();
TWI_SDA_HIGH();       
delay_us(DELAYTIME);
TWI_SCL_HIGH();
delay_us(DELAYTIME);
TWI_SCL_LOW();
delay_us(DELAYTIME);
TWI_SDA_OUTPUT();
delay_us(DELAYTIME);
}

uint8_t readiic (uint8_t addrr)
{
uint8_t  val;
start_iic();
writedata(0xa0);
writedata(addrr);
start_iic();
writedata(0xa1);
val = readchar();
stop_iic();
return val;

}
void writeiic(uint8_t addrr,uint8_t data)
{
start_iic();
writedata(0xa0);
writedata(addrr);
writedata(data);
stop_iic();
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
6条回答
techbaby
1楼-- · 2019-12-31 20:55
 精彩回答 2  元偷偷看……
styleno1
2楼-- · 2019-12-31 20:56
连续不正常是多少字节以上?
andiwxz
3楼-- · 2019-12-31 21:35
我的是两个字节有一个错误的,很有规律,后来两次读写之间加点间隔就没事,可能还是时序的事,有没有连续读写的方法。
蓝蓝的恋
4楼-- · 2020-01-01 02:55
andiwxz 发表于 2014-9-3 09:34
我的是两个字节有一个错误的,很有规律,后来两次读写之间加点间隔就没事,可能还是时序的事,有没有连续读 ...

我的读写偶数位没问题,读写基数位就出错,跟楼主的差不多吧
dhtunui
5楼-- · 2020-01-01 04:13
同问,只能一个一个字节的写。
robincui
6楼-- · 2020-01-01 06:15
 精彩回答 2  元偷偷看……

一周热门 更多>