ads1115的程序,不知道问题出在哪里,一直读出数据都是0。大佬们帮忙看看,感激不尽

ads1115的程序,不知道问题出在哪里,一直读出数据都是0。大佬们帮忙看看,感激不尽

#include 
#include 
#include 
#define uint unsigned int 
#define uchar unsigned char
bit ack;						//应答标志位 0:ack 1:nak
sbit scl = P3^4;		//IIC时钟引脚定义
sbit sda = P3^5;		//IIC数据引脚定义
sbit beep= P2^3;		//蜂鸣器
uchar table[4];
void delay_ms(int count) //1MS延时子程序 
{ 
	uchar i,j;
	for(;count>0;count--) 
		for(i=2;i>0;i--) 
			for(j=248;j>0;j--); 
}
/***********i2c基本协议*****************************/
void I2C_start(void)	//启始信号
{
	sda = 1;
	scl = 1;
	_nop_();_nop_();
	sda = 0;
	_nop_();_nop_();
	_nop_();_nop_();_nop_();
	scl = 0;
}

void I2C_stop()	//停止信号
{
	sda = 0;
	scl = 1;
	_nop_();_nop_();
	_nop_();_nop_();
	sda = 1;
	_nop_();_nop_();
}
void I2C_send(uchar Data)	//发送8位数据
{
	uchar i=0;
	ack=1;
	scl=0;
	for(;i<8;i++)
	{
		Data <<= 1;
		sda = CY;
		scl = 1;
		_nop_();_nop_();
		_nop_();_nop_();
		scl = 0;}
	//下面是接收从设备发回的应答信号
	sda = 1;
	scl = 1;
	
	while(sda&&i<200)i++;
	ack=0;
	/*if(ack)
	{
		beep=0;		//printf("error!");  不应答则蜂鸣器响 
		delay_ms(100);
		beep=1;
	}*/
	scl = 0;
	sda = 1;
	_nop_();_nop_();
	
}

uchar I2C_get(bit _ack)	//接收8位数据
{
	uchar i = 0,Data = 0;
	scl = 0;
	for(;i<8;i++)
	{
		Data <<= 1;
		scl = 1;
		_nop_();_nop_();
		_nop_();_nop_();
		Data |= sda;	//接收数据
		scl = 0;
		_nop_();
	}
	//下面时主控器发送ACK或则NAK
	sda = _ack;	//ack或者nak
	scl = 1;	//拉高时钟产生第9个时钟
	_nop_();_nop_();
	_nop_();_nop_();
	scl = 0;	//拉底时钟
	sda = 1;	//释放总线
	_nop_();
	return Data;
}

/*************配置ads1115**********/
void Confige1115()
{
	uchar i;
	table[0] = 0x90; //CMD_Write
	table[1] = 0x01; //指向配置寄存器
	table[2] = 0xc2; //设置配置寄存器的高八位1100 0010,即AINp=AIN0,AINn=GND;满量程FS=+-4.096;连续转换模式
	table[3] = 0x95; //设置配置寄存器的低八位1001 0101,即转换速率128SPS
	I2C_start(); //发送起始信号
	for(i=0;i<4;i++)
	{
		I2C_send(table[i]); //将table里面的数写入ads1115
		delay_ms(15);
	}
	
	
	I2C_stop(); //发送停止信号
}
//指向ADS1115指针寄存器用于准备读取数据
void PointRegister (void)
{
	uchar i;
	table[0] = 0x90;//写指令
	table[1] = 0x00;//指针指向转换寄存器
	I2C_start();//发送起始信号
	for(i=0;i<2;i++)
	{
		I2C_send(table[i]);//将table里面的数写入ads1115
		delay_ms(15);
	}
	I2C_stop();//发送停止信号
}
//读转换寄存器里面的值
uint read()
{
	uint result,resulth,resultl;
	I2C_start();
	delay_ms(10);
	I2C_send(0x91); //读指令
	resulth = I2C_get(0); //高八位赋给resulth
	resultl = I2C_get(1); //底八位赋给resultl
	I2C_stop();
	printf("h=%d\n",&resulth);
	printf("l=%d\n",&resultl);
	result=(resulth)<<8|resultl;//高八位右移8与上底八位组成16位result
	return result;
}

void main()
{
	//uchar i;
	uint temp=1;
	uart_Init();
	Confige1115();
	delay_ms(20);
	
	
	//delay_ms(1000);
	while(1)
	{
		PointRegister();
		delay_ms(20);
		temp=read();
		printf("ADC=%d\n",&temp);
		delay_ms(300);
	}
	
	
}

你可能感兴趣的:(ads1115)