Сборка из сообщений сайта и Справки Bascom.
' =======================================
' Работа с битами в переменной любого типа
' ---------------------------------------------------------------
' Работа с битами в переменной типа BIT
Объявленные переменные 1 бит занимают в памяти одного байта позиции, согласно очередности их объявления, начиная со старшего бита.
Например:
Dim A As Bit ' займет бит 7 байтовой ячейки в памяти
А000_0000
Dim B As Bit ' ...... бит 6
АВ00_0000
...и т.д.
Тогда как объявление
Dim Z As Byte
Z.0 = 1
Z.1 = 0...
... будет храниться в соответствующих ячейках (битах) одной и той же переменной Z.
' Работа с битами в переменной типа BYTE
Dim a As Byte
a = &B1111_0000
' десятичное число 240
a.0 = 1 ' Установка бита "0" переменной А в "1"
'В переменной a = &B1111_0001
' десятичное число 241
a.6 = 0 ' Установка бита "6" переменной А в "0"
'В переменной a = &B1011_0001
' десятичное число 177
‘ PS.
Данный способ можно эффективно использовать для установки различных "флагов".
Достаточно одного байта в качестве "флаговой переменной", где можно используется "сигнализаторы" на уровне одного бита.
В частности, так реализовано во многих регистрах МК.
' PPS.
‘ Аналогичные операции можно выполнять для регистров портов
PORTA.0 = 1 ' Установка пина "0" порта А в "1"
a = PINB.0 ' Чтение состояния пина "0" порта В
' ---------------------------------------------------------------
‘ Например, для переменной типа WORD
Dim a As Word
a = &B0000_1111_0000_0000
' десятичное число 3840
a.0 = 1 ' Установка бита "0" переменной А в "1"
' В переменной b = &B1000_1111_0000_0001
' десятичное число 3841
a.10 = 0 ' Установка бита "10" переменной А в "0"
' В переменной a = &B1000_1101_0000_0001
' десятичное число 2817
' ---------------------------------------------------------------
' Переменные, имеющие +/- значения
' ---------------------------------------------------------------
Dim a As Integer ‘ Для переменной типа INTEGER
a = &B0000_0000_B0000_0000
a.14 = 1
'В переменной a - &B0100_0000_B0000_0000
‘ положительное десятичное число 16384
a.15 = 1
'В переменной a - &B1100_0000_B0000_0000
‘ отрицательное десятичное число -16384
Dim a As Long ‘ Для переменной типа LONG
a = &B0000_0000_0000_0000_0000_0000_0000_0000
a.30 = 1
'В переменной a – &B0100_0000_0000_0000_0000_0000_0000_0000
‘ положительное десятичное число 1073741824
a.31 = 1
'В переменной a – &B1100_0000_0000_0000_0000_0000_0000_0000
‘ отрицательное десятичное число -1073741824
' =======================================
' Групповая работа с битами
' ---------------------------------------------------------------
Var = BITS( b1 [,bn])
‘ Установить для всех указанных битов значение 1.
Dim a As Byte
a = &B0000_0000
a = Bits(1, 7)
'В переменной a - &B1000_0010
Var = NBITS( b1 [,bn])
‘ Установить для всех битов, кроме указанных, значение 1.
Dim a As Byte
a = &B0000_1111
a = NBits(1, 7)
'В переменной a - &B0111_1101
BITS и NBITS могут быть использоваться только для байтов и регистров портов.
Допустимое количество бит в диапазоне от 0 до 7.
Отредактировано Nord (2019-07-21 20:07:42)