ATmega16 读写FM24C04 问题
程序在接收数据的地方有问题while(!(TWCR & (1<<TWINT)))
{
if(--err==0) ////读数据
{
return 6;
}
}
//初始话
void TWI_FM24_INIT(void)
{
TWBR=0X00;
TWCR=TWCR|(1<<TWEN);//TWCR_TWEN=1//wzh
}
//------------------------------------------------------------------------------------------------
u8 I2C_Write(u8 addr,u8 udata)
{
u16 err;
TWCR = (1<<TWINT)|(1<<TWSTA)|(1<<TWEN); //发出STATA信号
err = 1000;
while((!(TWCR & (1<<TWINT))))
{
if(--err==0)
{
return 1;
}
}
TWDR = sLOVADDR|WRITE; //从器件地址
TWCR = (1<<TWINT)|(1<<TWEN);
err = 1000;
while((!(TWCR & (1<<TWINT))))
{
if(--err==0)
{
return 2;
}
}
TWDR = addr; //字节地址
TWCR = (1<<TWINT)|(1<<TWEN);
err = 1000;
while((!(TWCR & (1<<TWINT))))
{
if(--err==0)
{
return 3;
}
}
TWDR = udata; //发送数据
TWCR = (1<<TWINT)|(1<<TWEN);
err = 1000;
while((!(TWCR & (1<<TWINT))))
{
if(--err==0)
{
return 4;
}
}
TWCR = (1<<TWINT)|(1<<TWSTO)|(1<<TWEN); ////发出STOP信号
return 0;
}
/****************读*********************/
u8 I2C_Read(u8 addr)
{
//u8 udata=0;
u16 err;
TWCR = (1<<TWINT)|(1<<TWSTA)|(1<<TWEN); //发出STATA信号
err = 1000;
while(!(TWCR & (1<<TWINT))) //等待 TWINT置位, TWINT置位表示START信号已发出
{
if(--err==0)
{
return 1;
}
}
TWDR = sLOVADDR|WRITE; //从器件地址
TWCR = (1<<TWINT)|(1<<TWEN);
err = 1000;
while(!(TWCR & (1<<TWINT)))
{
if(--err==0)
{
return 2;
}
}
TWDR = addr; //字节地址
TWCR = (1<<TWINT)|(1<<TWEN);
err = 1000;
while(!(TWCR & (1<<TWINT)))
{
if(--err==0)
{
return 3;
}
}
TWCR = (1<<TWINT)|(1<<TWSTA)|(1<<TWEN); //发出STATA信号
err = 1000;
while(!(TWCR & (1<<TWINT)))
{
if(--err==0)
{
return 4;
}
}
//wzh---------------------
//TWCR=(1<<TWINT)|(1<<TWSTA)|(1<<TWEN); //发出Restart信号
// while(!(TWCR&(1<<TWINT))); //等待TWINT置位
//----------------
TWDR = sLOVADDR|READ; //从器件地址-读数据
TWCR = (1<<TWINT)|(1<<TWEN);
err = 1000;
while(!(TWCR & (1<<TWINT)))
{
if(--err==0)
{
return 5;
}
}
TWCR = (1<<TWINT)|(1<<TWEN);//|(1<<TWEA);
// delay_us(5);
//TWCR =TWCR|~0x80;
err = 10000;
while(!(TWCR & (1<<TWINT)))
{
if(--err==0) ////读数据
{
return 6;
}
}
ReveValue_g = TWDR;
TWCR = (1<<TWINT)|(1<<TWSTO)|(1<<TWEN); ////发出STOP信号
return 0;
}
试了几个程序都有问题
高手问看看 没有人用过? 没人搞过?
来自:amoBBS 阿莫电子论坛 Android客户端 问题解决,FM24C04的工作电压是5V.程序是好用的
页:
[1]