打印

ads1110配置字问题

[复制链接]
2247|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
woshidasha|  楼主 | 2010-3-22 08:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我写了一段程序,读取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();
}

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

55

主题

244

帖子

3

粉丝