ADXL345数据读出主程序(二)
0赞
发表于 2/25/2012 9:08:58 AM
阅读(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; }
