如何在 BASCOM-AVR 中加入两个字节以创建 16 位 int 变量?
问问题
525 次
3 回答
2
部分答案:
子问题 1
如果一个字节存储在变量中BYTE1
,另一个字节存储在变量中BYTE2
,则可以将它们合并到WORD1
许多 BASICS 中WORD1 = BYTE1: WORD1 = (WORD1 SHL 8) OR BYTE2
。这使得BYTE1
进入 的高位WORD1
,并BYTE2
进入低位。
子问题 2
如果要屏蔽(或选择)字的特定位,请使用AND
运算符,将感兴趣位的位值相加 - 例如,如果您要选择第一位和第三位(将第一位计为单词的 LSB) FLAGS
,您会看到FLAGS AND 5
- 5 的值是 binary 0000000000000101
,因此您保证结果中的所有位都将为 0,除了第一个和第三个,它们将携带它们显示的任何值FLAGS
(这是“按位与”)。
于 2019-02-13T18:19:49.237 回答
1
左移/右移二进制函数:
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
于 2019-02-16T05:26:18.957 回答
0
您可以在 BASCOM 索引中找到它:
varn = MAKEINT(LSB , MSB)
等效代码是:
varn = (256 * MSB) + LSB
- Varn:将分配转换后的值的变量。
- LSB:LS 字节的变量或常数。
- MSB:与 MS 字节相关的变量或常量。
例如:
varn = MAKEINT(&B00100010,&B11101101)
结果是&B1110110100100010
。
于 2019-10-05T16:26:39.103 回答