【发布时间】:2019-02-13 17:59:07
【问题描述】:
如何在 BASCOM-AVR 中连接两个字节以生成 16 位 int 变量?
【问题讨论】:
-
你使用的是什么 BASIC 实现?
-
将 2 个字节移动到一个单词尝试:Word1 = Byte1 * &H100 + Byte2
-
我正在使用 BASCOM-AVR.(visual basic)
如何在 BASCOM-AVR 中连接两个字节以生成 16 位 int 变量?
【问题讨论】:
如果一个字节存储在变量BYTE1 中,而另一个字节存储在变量BYTE2 中,则可以在许多BASICS 中使用WORD1 = BYTE1: WORD1 = (WORD1 SHL 8) OR BYTE2 将它们合并为WORD1。这使得BYTE1 成为WORD1 的高位,BYTE2 成为低位。
如果您想屏蔽(或选择)一个字的特定位,请使用AND 运算符,将感兴趣位的位值相加 - 例如,如果您想选择第一位和第三位 (将变量 FLAGS 的第一位作为单词的 LSB 计算,您将查看 FLAGS AND 5 的值 - 5 是二进制 0000000000000101,因此您保证结果中的所有位都将为 0,除了对于第一个和第三个,它们将携带它们在FLAGS 中显示的任何值(这是“按位与”)。
【讨论】:
SHL 不可用,则将(WORD1 SHL 8) OR BYTE2 替换为(WORD1 * 256) OR BYTE2。
二进制左移/右移功能:
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
【讨论】:
您可以在 BASCOM 索引中找到它:
varn = MAKEINT(LSB , MSB)
等效代码为:
varn = (256 * MSB) + LSB
例如:
varn = MAKEINT(&B00100010,&B11101101)
结果是&B1110110100100010。
【讨论】: