我写了一段程序,读取ads1110,配置的是1001 1100,也就是0x9C,能够读出AD值,但是读取出来的配置字却是0xFF。程序如下,单片机是mega128,11.0592M晶振,使用TWI读取。
void write_ads1110(unsigned char data)
{
/*设置波特率*/
TWBR = 15;//15;
/*发出START信号*/
TWCR=(1<<TWINT)|(1<<TWSTA)|(1<<TWEN);
/*等待TWINT置位,TWINT置位表示START信号已发出*/
while (!(TWCR & (1 << TWINT)));
/*检验TWI状态寄存器,屏蔽预分频位*/
if ((TWSR & 0xF8) != 0x08)
{
//error(TWSR);
//return 0;
}
/*SLA_W 芯片地址*/
TWDR = 0x90;
/*TWINT位清零,启动发送地址*/
TWCR = (1 << TWINT) | (1 << TWEN);
/*等待TWINT置位,TWINT置位表示总线命令SLA+W已发出*/
while (!(TWCR & (1 << TWINT)));
/*检验TWI状态寄存器,屏蔽预分频位*/
if ((TWSR & 0xF8) != 0x18)
{
//error(TWSR);
//return 0;
}
/*data 控制字*/
TWDR = data;
/*TWINT位清零,启动发送数据*/
TWCR = (1 << TWINT) | (1 << TWEN);
/*等待TWINT置位,TWINT置位表示总线数据已发送*/
while (!(TWCR & (1 << TWINT)));
/*检验TWI状态寄存器,屏蔽预分频位*/
if ((TWSR & 0xF8) != 0x28)
{
//error(TWSR);
//return 0;
}
/*发出STOP信号*/
TWCR = (1 << TWINT) | (1 << TWEN) | (1 << TWSTO);
}
/**********************************************
* 函数名称:I2C总线单字节读取函数 *
* 时间:2008年01月23号 *
* 入口参数:addr->读取地址,data->数据指针 *
* 出口参数:无 *
***********************************************/
void read_ads1110(void)
{
//write_ads1110(0x94);
// delay_ms(10);
/*设置波特率*/
TWBR = 15;//15;
/*发出START信号*/
TWCR=(1<<TWINT)|(1<<TWSTA)|(1<<TWEN);
while(!(TWCR&(1<<TWINT)));
/*if ((TWSR & 0xF8) != 0x08)
{
//error(TWSR);
//return 0;
}
/****************************************************/
/*SLA_W 芯片地址*/
TWDR = 0x91;
TWCR = (1 << TWINT) | (1 << TWEN);
while (!(TWCR & (1 << TWINT)));
if ((TWSR & 0xF8) != 0x18)
{
//error(TWSR);
//return 0;
}
/*读取数据*/
/*读取ad高8位*/
TWCR = (1 << TWINT) | (1 << TWEN);
/******************************************/
while (!(TWCR & (1 << TWINT)));
/*if ((TWSR & 0xF8) != 0x58)
{
error(TWSR);
return 0;
}*/
adc[adc_count][1]=TWDR;
/*读取ad低8位*/
TWCR = (1 << TWINT) | (1 << TWEN);
while (!(TWCR & (1 << TWINT)));
adc[adc_count][0]=TWDR;
/*读取状态位*/
TWCR = (1 << TWINT) | (1 << TWEN);
while (!(TWCR & (1 << TWINT)));
rdata = TWDR;
/*发出STOP信号*/
TWCR = (1 << TWINT) | (1 << TWSTO) | (1 << TWEN);
//return 1;
//return rdata;
// SEI();
} |