在 BASCOM-AVR 中连接两个字节
Join two bytes in BASCOM-AVR
如何在 BASCOM-AVR 中连接两个字节以生成 16 位 int 变量?
部分答案:
子问题 1
如果一个字节存储在变量BYTE1
中,另一个字节存储在变量BYTE2
中,您可以将它们合并到WORD1
中,在许多BASICS中使用WORD1 = BYTE1: WORD1 = (WORD1 SHL 8) OR BYTE2
.这使得BYTE1
成为WORD1
的高位,BYTE2
成为低位。
子问题 2
如果你想屏蔽(或select)一个词的特定位,使用AND
运算符,总结感兴趣的位的位值 - 例如,如果你想到select变量FLAGS
的第一位和第三位(将第一位算作字的LSB),你会看到FLAGS AND 5
的值 - 5是二进制的0000000000000101
,所以你保证结果中的所有位都为 0,除了第一位和第三位,它们将携带它们在 FLAGS
中显示的任何值(这是 'bitwise AND')。
shift-left/right 二进制函数:
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:将被赋予转换值的变量。
- LSB:变量或常量,LS Byte。
- MSB:具有 MS 字节的变量或常量。
例如:
varn = MAKEINT(&B00100010,&B11101101)
结果是&B1110110100100010
。
如何在 BASCOM-AVR 中连接两个字节以生成 16 位 int 变量?
部分答案:
子问题 1
如果一个字节存储在变量BYTE1
中,另一个字节存储在变量BYTE2
中,您可以将它们合并到WORD1
中,在许多BASICS中使用WORD1 = BYTE1: WORD1 = (WORD1 SHL 8) OR BYTE2
.这使得BYTE1
成为WORD1
的高位,BYTE2
成为低位。
子问题 2
如果你想屏蔽(或select)一个词的特定位,使用AND
运算符,总结感兴趣的位的位值 - 例如,如果你想到select变量FLAGS
的第一位和第三位(将第一位算作字的LSB),你会看到FLAGS AND 5
的值 - 5是二进制的0000000000000101
,所以你保证结果中的所有位都为 0,除了第一位和第三位,它们将携带它们在 FLAGS
中显示的任何值(这是 'bitwise AND')。
shift-left/right 二进制函数:
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:将被赋予转换值的变量。
- LSB:变量或常量,LS Byte。
- MSB:具有 MS 字节的变量或常量。
例如:
varn = MAKEINT(&B00100010,&B11101101)
结果是&B1110110100100010
。