工具/软件:Code Composer Studio
大家好、
我尝试使用 MSP430F5529连接标准 ADXL335加速计、但我卡在了。 在分享代码之前、我应该解释如何连接代码:
P3.3和 P3.4跳转到 launchpad USB 侧的 TXD/RXD 引脚。
S1旁边的5V 和 GND 引脚连接到 ADXL335 VCC 和 GND。
ADXL335的 X、Y 和 Z 引脚分别连接到 P6.0 (A0)、P6.1 (A1)和 P6.2 (A2)。
我打开了串行应用程序、并将其设置为38400波特、8位、无奇偶校验、1个停止位(当然在正确的 COM 端口上)。
我以前用这个电路板做过一些类似的串行功能、使用端子输入/输出、但是我从未尝试使用这个加速计。 我没有获得串行应用程序的任何输出。
以下是我的代码:
#include
#include
void turn off ();
void sendData ();
void UART_putchar (char);
void 初始化 eUART ();
volatile long int adval、ADCYval、ADCZval;
volatile float X、YCX3 Zoil-;
volatile float NetG;
void main (void)
{
int i;
WDTCTL = WDTPW +WDTHOLD; //停止 WDT
初始化 UART(); //为 RS-232设置 UART
P6DIR &=~(BIT0+BIT1 + BIT2); //将 P6.0、P6.1、P6.2配置为输入引脚
P6SEL |=(BIT0+BIT1 + BIT2); //将 P6.0 (X)、P6.1 (Y)和 P6.2 (Z)配置为模拟引脚
//设置计时器每100ms 向 PC 发送一次 ADC 信息
TA0CCR0 = 6554; // 6554 / 32768 Hz = 0.2s =>每秒触发5个计时器
TA0CTL = tassel_1 + MC_1; // ACLK、向上计数模式
TA0CCTL0 = CCIE; //启用中断
//设置 ADC 12.
ADC12CTL0 = ADC12ON + ADC12SHT0_6 + ADC12MSC;//配置 ADC 转换器
ADC12CTL1 = ADC12SHP+ADC12CONSEQ_1; //使用重复采样计时器
ADC12MCTL0 = ADC12INCH_3; // ADC A0引脚- X 轴
ADC12MCTL1 = ADC12INCH_4; // ADC A1引脚- Y 轴
ADC12MCTL2 = ADC12INCH_5 + ADC12EOS; // ADC A2引脚- Z 轴
// EOS -转换序列结束
ADC12IE |= 0x02; //启用 ADC12IFG.8
对于(I = 0;I < 0x3600;I++); //基准启动延迟
ADC12CTL0 |= ADC12ENC; //启用转换
_EINT();
while (1){
ADC12CTL0 |= ADC12SC; //开始转换
_bis_SR_register (LPM0_Bits + GIE);//输入 LPM0
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//用户定义的函数定义
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void UART_putchar (char c)
{
while (!(UCA0IFG&UCTXIFG)); //等待前一个字符被发送
UCA0TXBUF = c; //将字节发送到缓冲区以进行
传输}
//初始化用于传输数据的 UART 控制寄存器,以及波特率
void 初始化 UART (void)
{
P3SEL |= BIT3 + BIT4; //设置 Rx 和 Tx 位
UCA0CTL0 = 0; //设置默认 RS-232协议
UCA0CTL1 |= BIT0 + UCSSEL_2; //禁用设备,设置时钟
UCA0BR0 = 27; // 1048576 Hz / 38400 = 54.5
UCA0BR1=0;
UCA0MCTL = 0x94;
UCA0CTL1 &=~BIT0; //启动 UART 设备
}
void sendData (void)
{
int i;
XINL =((ADCXval*3.0/4095.0)-1.5)/0.3; //计算 x 的 g
YL8 =((ADCYval*3.0/4095.0)-1.5)/0.3; //计算 y 的 g
ZL8 =((ADCZval* 3.0/4095.0)-1.5)/0.3; //计算 z 的 g
NetG = sqrt (((((oirl*x)+(Yo*l)+(Zo*))+(Zo)Zo)Zo)Zo;Zo;
//通过 RS-232发送数据包
UART_putchar (0x55); //发送标头
//使用字符指针一次发送一个字节的浮点 X 和 Y 值
char *XPointer=(char *)&Xan3;
char *ypointer=(char *)&Yan3;
char *zpointer=(char *)&Z3;
//发送 x 百分比浮点一次一个字节
for (i=0;i<4;i++){
UART_putchar (XPointer[i]);
}
//发送 y 百分比浮点一次一个字节
for (i=0;i<4;i++){
UART_putchar (ypointer[i]);
}
//发送 z 百分比浮点一次一个字节
对于(i=0;i<4;i++){
UART_putchar (zpointer[i]);
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//中断服务例程
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#pragma vector=ADC12_vector
_interrupt void ADC12ISR (void)
{
ADCXval = ADC12MEM0; //移动结果,IFG 被清除
ADCYval = ADC12MEM1;
ADCZval = ADC12MEM2;
_BIC_SR_REGISTER_ON_EXIT (LPM0_BITS);//退出 LPM0
if (NetG >= 2.0)
{
P3DIR |= BIT5;//设置蜂鸣器的方向
P3SEL |= BIT5;//将蜂鸣器设置为 I/O 的特殊功能
TB0CCTL4 = OUTMOD_4;// TB0输出处于切换模式
TB0CTL = TBSSEL_2 + MC_1;// SMCLK 是时钟源、上行模式
TB0CCR0=852; //CCrO=1MHz/2 (852)
}
其他
{
P3DIR &=~BIT4;
}
}
#pragma vector = TIMERRA0_vector
__interrupt void timerA_ISR ()
{
sendData(); //将数据发送到串行应用程序
_BIC_SR_REGISTER_ON_EXIT (LPM0_BITS);//退出 LPM0
}