首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 单片机 >

msp430数据的读取。解决方法

2012-04-15 
msp430数据的读取。我现在用p2口来读取一个时变的量,这个量是个32位整形量。所以需要分三次把它给拿进来。定

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没有初始化,不解释。

热点排行