unsigned char i2cMasterReceiveNI(unsigned char deviceAddr, unsigned char length, unsigned char *data)
{
unsigned char retval = I2C_OK
// 关I2C中断
TWCR&=~(1<<TWIE)
//发送开始条件
i2cSendStart()
i2cWaitForComplete()
// 发送器件读地址
i2cSendByte( deviceAddr | 0x01 )
i2cWaitForComplete()
// 检查器件是否可用
if( TWSR == TW_MR_SLA_ACK){
// 接收数据并回应
while(length >1){
i2cReceiveByte(TRUE)
i2cWaitForComplete()
*data++ = i2cGetReceivedByte()
length--
}
// 接收数据无回应 (末位信号)
i2cReceiveByte(FALSE)
i2cWaitForComplete()
*data++ = i2cGetReceivedByte()
}else{
// 如未回应器件地址,停止发送,返回错误
retval = I2C_ERROR_NODEV
}
// 发送停止条件,保持TWEA以便从接收
i2cSendStop()
// 开I2C中断
TWCR|=TWIE
return retval
}
AT的没有具体去看他的daatsheep一般的 24都是允许一次性全部读出的只要你的时序没有问题
另外ack信号迟一点发送 不会影响读写的
你可以仔细看一下 at的 daatsheep看有没有256字节的限制.
普通的24是01-128字节 02=256字节...16=2047字节..
超过部分..器件会自动回到0地址处理,
/////////////////////////////////////////////
看了一下你,后面添加的程序.
如果你这样写.那么read_all那边就不需要用参数了.
因为如果读取,一般都是从0开始读取的..
另外x24c08_read如果是单字节读写函数.而且是正确的话
那么用
for (ii=0ii<4ii++)
{
for (iii=0iii<256iii++)
{
c=x24c08_read(ii,(uchar)iii)
SBUF=c
while (!TI)
这种方式的读取一定是没有问题.
有问题就是你的代码..或者你的eep本身坏了.
如果你感觉时许地上对的话..不妨看一下.
//////////////////////////////////
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)