当前位置: 代码迷 >> 单片机 >> msp430数据的读取。解决方法
  详细解决方案

msp430数据的读取。解决方法

热度:71   发布时间:2016-04-28 16:01:59.0
msp430数据的读取。
我现在用p2口来读取一个时变的量,这个量是个32位整形量。所以需要分三次把它给拿进来。定义了一个读取的函数。
如下:INT32 ReadMotorPos(void)
{
INT32 res;
BYTE* cur_byte;
cur_byte = (BYTE*)(&res);

// DisableInterrupt();
P2OUT &= (~BIT7); // nOE
P3OUT |= BIT2; // update
P3OUT &= ~(BIT0 | BIT1 | BIT2);
NOP();
*(cur_byte+3) = CNTRPORTIN; // byte 0
P3OUT |= BIT0;
*(cur_byte+2) = CNTRPORTIN; // byte 1
P3OUT &= ~(BIT0 | BIT1);
P3OUT |= BIT1;
*(cur_byte+1) = CNTRPORTIN;
P3OUT |= BIT0;
*(cur_byte) = CNTRPORTIN;
// EnableInterrupt();
P2OUT |= (BIT7);
return res;
}
BYTE *pPara, pPara1;
INT32 a, b, c;
pPara=(BYTE*)(&a);
pPara1=(BYTE*)(&b);
*((INT32*)(pPara)) = ReadMotorPos();
delay 1s
*((INT32*)(pPara1)) = ReadMotorPos();
c=b-a;
最终通过串口发到电脑上来调试这个c结果发现a, b显示正确,但是c的结果却怎么都不正确呢。因为比如b-a应该等于3的时候
c却得到的结果是一个32位的,而且各位数字都不为零的数字,这有点太夸张了吧。一个3串口顶多得到00 00 00 03吧,最终却得到了一个几万的数字。

------解决方案--------------------
探讨
我现在用p2口来读取一个时变的量,这个量是个32位整形量。所以需要分三次把它给拿进来。定义了一个读取的函数。
如下:INT32 ReadMotorPos(void)
{
INT32 res;
BYTE* cur_byte;
cur_byte = (BYTE*)(&res);

// DisableInterrupt();
P2OUT &= (~BIT7); // ……

------解决方案--------------------
你这个程序相当于b没有初始化,不解释。
  相关解决方案