首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >了解MSB LSB

了解MSB LSB
EN

Stack Overflow用户
提问于 2013-03-03 15:41:47
回答 1查看 3.8K关注 0票数 3

我正在致力于转换一个在特定微控制器上运行的程序,并将其调整为在覆盆子pi上运行。我已经能够成功地从我一直使用的传感器中提取值,但现在我遇到了一个问题,我认为这是由我理解困难的几行代码引起的。我已经了解了它们是什么,但仍在挠头。我相信下面的代码应该是用来修改存储在X,Y,Z变量中的数字的,但是我认为在我当前的程序中并没有发生这种情况。此外,我还必须将byte更改为INT,以使程序编译时不会出现错误。这是我转换的原始代码中未经修改的代码。有没有人能告诉我这是不是在修改数字?

代码语言:javascript
复制
void getGyroValues () {
  byte MSB, LSB;

  MSB = readI2C(0x29);
  LSB = readI2C(0x28);
  x = ((MSB << 8) | LSB);

  MSB = readI2C(0x2B);
  LSB = readI2C(0x2A);
  y = ((MSB << 8) | LSB);

  MSB = readI2C(0x2D);
  LSB = readI2C(0x2C);
  z = ((MSB << 8) | LSB);
}

以下是原始的readI2C函数:

代码语言:javascript
复制
int readI2C (byte regAddr) {
    Wire.beginTransmission(Addr);
    Wire.write(regAddr);                // Register address to read
    Wire.endTransmission();             // Terminate request
    Wire.requestFrom(Addr, 1);          // Read a byte
    while(!Wire.available()) { };       // Wait for receipt
    return(Wire.read());                // Get result
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-03-03 15:56:35

I2C是一种用于与低速外围设备通信的双线协议。

传感器应通过I2C总线连接到中央处理器。您正在从传感器读取3个值- x、y和z。这些值可以作为6 x 8-bit寄存器从传感器访问。

代码语言:javascript
复制
x - Addresses 0x28, 0x29
y - Addresses 0x2A, 0x2B
z - Addresses 0x2C, 0x2D

顾名思义,ReadI2C()从传感器的给定地址读取一个字节的数据,然后返回正在读取的数据。ReadI2C()中的代码取决于设备的I2C控制器的设置方式。

一个字节是8位数据。最低有效位(Most-Significant-Byte)和最低有效位(Least-Significant-Byte)分别表示通过I2C读取的8位。看起来你对16位数据感兴趣(对于x,y和z)。要从这两段8位数据构造16位数据,需要将MSB左移8位,然后对LSB执行逻辑或操作。

例如:

让我们假设: MSB = 0x45 LSB = 0x89

MSB << 8= 0x4500

(MSB << 8) | LSB = 0x4589

也可以看看我的内联评论:

代码语言:javascript
复制
void getGyroValues () {
  byte MSB, LSB;

  MSB = readI2C(0x29);
  LSB = readI2C(0x28);
  // Shift the value in MSB left by 8 bits and OR with the 8-bits of LSB
  // And store this result in x
  x = ((MSB << 8) | LSB);

  MSB = readI2C(0x2B);
  LSB = readI2C(0x2A);
  // Do the same as above, but store the value in y
  y = ((MSB << 8) | LSB);

  MSB = readI2C(0x2D);
  LSB = readI2C(0x2C);
  // Do the same as above, but store the value in z
  z = ((MSB << 8) | LSB);
}
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15183530

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档