//********************************设计说明********************************//
//因为此传感器的速度远高于单片机,所以没有使用任何延时,就能准确读写数据了//
//在16g量程、13位精度下,比例系数0.0039,单位:g(地球重力加速度) //
//Xa:X轴重力(十进制补码) //
//Ya:Y轴重力(十进制补码) //
//Za:Z轴重力(十进制补码) //
//采样周期,由定时器控制,推荐测试采样频率100Hz //
//********************************设计说明********************************//
#include <ioCC2430.h>
#define SDO P0_0
#define SDI P0_1
#define SCLK P0_2
#define CS P0_3
#define uchar unsigned char
#define uint unsigned int
#define SET_DQ P0_4=1
#define CL_DQ P0_4=0
#define A P1_4
int temp = 0,i;
uint strm ;
void SPI_Wrt(uint addr,int data);
int SPI_Read(uint addr);
float Xa();
float Ya();
float Za();
void main (void)
{
P0SEL = 0x00; //通用IO
P0DIR = 0xFD; //输出IO
//P0INP = 0xff; //采用默认0x00
P1SEL = 0x00; //通用IO
P1DIR = 0xFF; //P1_1为输入其余为输出
//P1INP = 0xff; //采用默认0x00
P2SEL = 0x00; //通用IO
P2DIR = 0xFF; //输出
//P2INP = 0xff; //采用默认0x00
//****************************ADXL345初始化设置****************************//
SPI_Wrt(0x31,0x2B); //数据通信格式;设置为自检功能禁用,4线制SPI接口,低电平中断输出,13位全分辨率,输出数据右对齐,16g量程
SPI_Wrt(0x1E,0x00); //X轴误差补偿; (15.6mg/LSB)
SPI_Wrt(0x1F,0x00); //Y轴误差补偿; (15.6mg/LSB)
SPI_Wrt(0x20,0x00); //Z轴误差补偿; (15.6mg/LSB)
SPI_Wrt(0x21,0x00); //敲击延时0:禁用; (1.25ms/LSB)
SPI_Wrt(0x22,0x00); //检测第一次敲击后的延时0:禁用; (1.25ms/LSB)
SPI_Wrt(0x23,0x00); //敲击窗口0:禁用; (1.25ms/LSB)
SPI_Wrt(0x24,0x01); //保存检测活动阀值; (62.5mg/LSB)
SPI_Wrt(0x25,0x01); //保存检测静止阀值; (62.5mg/LSB)
SPI_Wrt(0x26,0x2B); //检测活动时间阀值; (1s/LSB)
SPI_Wrt(0x27,0x00); //
SPI_Wrt(0x28,0x09); //自由落体检测推荐阀值; (62.5mg/LSB)
SPI_Wrt(0x29,0xFF); //自由落体检测时间阀值,设置为最大时间; (5ms/LSB)
SPI_Wrt(0x2A,0x80); //
//SPI_Read(0x2B); //只读寄存器,状态读取
SPI_Wrt(0x2C,0x0A); //
SPI_Wrt(0x2D,0x28); //开启Link,测量功能;关闭自动休眠,休眠,唤醒功能
SPI_Wrt(0x2E,0x00); //所有均关闭
SPI_Wrt(0x2F,0x00); //中断功能设定,不使用中断
//SPI_Read(0x30); //只读寄存器,状态读取
SPI_Wrt(0x38,0x9F); //FIFO模式设定,Stream模式,触发连接INT1,31级样本缓冲
//SPI_Read(0x39); //只读寄存器,状态读取
//****************************ADXL345初始化设置****************************//
while(1)
{
P1DIR|=0x10;
A=0;
A=!A;
for(i=10000;i>0;i--)
{
for(i=10000;i>0;i--);
for(i=10000;i>0;i--);
for(i=10000;i>0;i--);
for(i=10000;i>0;i--);
}
if((Za())<0)//Z轴加速度低八位值测试
{
// P1DIR|=0x10;
CL_DQ;
/* for(i=10000;i>0;i--)
{
for(i=10000;i>0;i--);
for(i=10000;i>0;i--);
for(i=10000;i>0;i--);
for(i=10000;i>0;i--);
} */
// SET_DQ;
}
// SET_DQ;
P2 = SPI_Read(0x37); //Z轴加速度高八位值测试
}
}
void SPI_Wrt(uint addr,int data) //地址格式:0xFF 数据格式:0xFF
{
strm = (addr << 8) + data;
CS = 0;
for(uint i = 1;i <= 16;i++){SCLK = 0;SDO = (strm / 32768) % 2;strm <<= 1;SCLK = 1;}
CS = 1;
}
int SPI_Read(uint addr) //地址格式:0xFF 数据格式:0xFF
{
strm = (addr << 8) + 0x8000;
CS = 0;
for(uint i = 1;i <= 8;i++){SCLK = 0;SDO = (strm / 32768) % 2;strm <<= 1;SCLK = 1;}
for(uint i = 1;i <= 8;i++){SCLK = 0;strm <<= 1;strm += SDI;SCLK = 1;}
CS = 1;
return strm;
}
float Xa()
{
temp = SPI_Read(0x32) + (SPI_Read(0x33) << 8);
return temp * 0.0039;
}
float Ya()
{
temp = SPI_Read(0x34) + (SPI_Read(0x35) << 8);
return temp * 0.0039;
}
float Za()
{
temp = SPI_Read(0x36) + (SPI_Read(0x37) << 8);
return temp * 0.0039;
}
ADXL345在CC2430中应用的程序工程包
5星 · 超过95%的资源 需积分: 10 29 浏览量
2011-10-18
15:19:02
上传
评论 1
收藏 40KB RAR 举报
zslsky007
- 粉丝: 0
- 资源: 6
最新资源
- lcd1602 功能函数封装lcd1602-master.zip
- lcd1602基本驱动函数lcd1602-master.zip
- 2016-2018负荷天气data-quanzhou.xls
- FANUC机器人初始化系统的基本方法和步骤.docx
- 液体混合控制123.smart
- tcp/ip 实验,临时上传
- 艾默生PAC System3i PLC系列与其它设备TCP/IP通讯教程(不用其它网关,直接通讯,实用)
- 电力场景遥感数电杆塔检测数据集VOC+YOLO格式400张1类别.7z
- 九宫格数独游戏入门初级高级骨灰级完美.docx
- 网件 WG111 V3 网卡Windows10 /11 64位驱动
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
- 1
- 2
- 3
前往页