【问题标题】:Join two bytes in BASCOM-AVR在 BASCOM-AVR 中加入两个字节
【发布时间】:2019-02-13 17:59:07
【问题描述】:

如何在 BASCOM-AVR 中连接两个字节以生成 16 位 int 变量?

【问题讨论】:

  • 你使用的是什么 BASIC 实现?
  • 将 2 个字节移动到一个单词尝试:Word1 = Byte1 * &H100 + Byte2
  • 我正在使用 BASCOM-AVR.(visual basic)

标签: basic bascom


【解决方案1】:

部分答案:

子问题 1

如果一个字节存储在变量BYTE1 中,而另一个字节存储在变量BYTE2 中,则可以在许多BASICS 中使用WORD1 = BYTE1: WORD1 = (WORD1 SHL 8) OR BYTE2 将它们合并为WORD1。这使得BYTE1 成为WORD1 的高位,BYTE2 成为低位。

子问题 2

如果您想屏蔽(或选择)一个字的特定位,请使用AND 运算符,将感兴趣位的位值相加 - 例如,如果您想选择第一位和第三位 (将变量 FLAGS 的第一位作为单词的 LSB 计算,您将查看 FLAGS AND 5 的值 - 5 是二进制 0000000000000101,因此您保证结果中的所有位都将为 0,除了对于第一个和第三个,它们将携带它们在FLAGS 中显示的任何值(这是“按位与”)。

【讨论】:

  • QB 没有 SHL 关键字!
  • @eoredson - 我会发誓的;我确实记得有那个关键字的 BASIC。如果SHL 不可用,则将(WORD1 SHL 8) OR BYTE2 替换为(WORD1 * 256) OR BYTE2
  • 它没有。这就是为什么我在下面的代码中添加了 SHL/SHR 函数:
【解决方案2】:

二进制左移/右移功能:

Byte1# = 255
PRINT HEX$(Byte1#)
Byte1# = SHL(Byte1#, 8) ' shift-left 8 bits
PRINT HEX$(Byte1#)
END
' function to shift-left binary bits
FUNCTION SHL (V#, X)
    SHL = V# * 2 ^ X
END FUNCTION
' function to shift-right binary bits
FUNCTION SHR (V#, X)
    SHR = V# / 2 ^ X
END FUNCTION

【讨论】:

    【解决方案3】:

    您可以在 BASCOM 索引中找到它:

    varn = MAKEINT(LSB , MSB)
    

    等效代码为:

    varn = (256 * MSB) + LSB
    
    • Varn:将分配转换后的值的变量。
    • LSB:LS 字节的变量或常量。
    • MSB:MS 字节的变量或常量。

    例如:

    varn = MAKEINT(&B00100010,&B11101101)
    

    结果是&B1110110100100010

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多