freedomhit

ADXL345数据读出主程序(二)

0
阅读(13914)

下面把第二个程序给大家:

#include
#include"IIC.h"
#define slave 0xA6
#define  time  10000
#define count 3

int i		 ;
unsigned int Aspeedx[];

void delay(int lengh)
{
	while(lengh>0)
	lengh--;
}
void write(unsigned char slvadd,unsigned char subadd,char data)
{
	I2C1MTX=subadd;						  //		装载子地址
	I2C1ADR=slvadd;							//		装载从机地址
	while((I2C1FSTA&0X30)!=0X00){}			//		等待FIFO发送成功
							//
	I2C1MTX=data;							//		向子地址中装载数据
	while((I2C1FSTA&0X30)!=0X00){}			//		等待FIFO发送完成
	delay(time);							 //
	I2C1CCNT=0X80;							  //	 停止信号
}
void read(unsigned char slvadd,unsigned char subadd)
{
	I2C1MTX=subadd;							 //		   装载子地址
	I2C1ADR=slvadd;							  //	   装载从机地址
	while((I2C1FSTA&0X30)!=0X00){}			  //	   等待FIFO发送成功
	delay(4000);							  //	   长延时
	I2C1CNT=count;							  //	   在从机中一次读出的字节数   (默认值为0,表示一个字节)
	I2C1ADR=slvadd+1;						  //	   装载从机地址(LSB=1,主机读)
//	while((I2C1FSTA&0XC0)!=0X80){}			  //	   等待数据接收完成
//	I2C1CCNT=0X80;							  //		停止信号
}
void Init_ADXL345()
{
   write(slave,0x31,0x0B);   //测量范围,正负16g,13位模式
   write(slave,0x2C,0x08);   //速率设定为12.5 参考pdf13页
   write(slave,0x2D,0x08);   //选择电源模式   参考pdf24页
   write(slave,0x2E,0x80);   //使能 DATA_READY 中断
   write(slave,0x1E,0x00);   //X 偏移量 根据测试传感器的状态写入pdf29页
   write(slave,0x1F,0x00);   //Y 偏移量 根据测试传感器的状态写入pdf29页
   write(slave,0x20,0x05);   //Z 偏移量 根据测试传感器的状态写入pdf29页
} 
void Init_IIC(void)
{
	GP1CON=0X2200; //配置P1.2,P1.3 为SCL和SDA;
	I2C1DIV=0XCFCF;//配置串行时钟的速率为100kHz
	I2C1CFG=0X82;//使能主机并且使能主机时钟	
	Init_ADXL345();
}
int Value_ADXL345()

{	 
	int k;
	float temp;
	 delay(10000);
    read(slave,0x32); 
	for(i=0;i<2;i++)
	{
		while((I2C1FSTA&0XC0)!=0X80){}
		Aspeedx[i]=I2C1MRX;	
		delay(400);
	}   
	 k=((Aspeedx[1]<<8)+Aspeedx[0])*3	; 
	 
/*	 if(k>0)
	 {

	 GP4DAT=0X01000000;
	 delay(600000) ;
	  GP4DAT=0X01010000;
	 }
	 if(k<0)
	 {
	 	GP4DAT=0X04000000;
		delay(600000) ;
	    GP4DAT=0X04040000;
	 }
	  
	   	GP4DAT=0X04000000;
//	}   */
	  return k;
}