Регистрация | Вход

[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: demanik, ivan_fd  
Обращение к битам по индексу
Dmitry Дата: Пн, 08.02.2010, 21:47  |                                                                                                                Сообщение # 1
Группа: Пользователи
Ранг:  Могу и подсказать
Сообщений: 157
Репутация: 6   ±
Замечания:   ±
На сайте с 12.05.2009

Статус: Offline

А-а-а!! He-e-elp!!

В смысле, здравствуйте! happy

Меня сегодня протон так огорчил, так огорчил, что... ну, очень огорчил!

Есть у меня переменная
Dim Flags as Byte

а биты в этой переменной являются флагами (признаками) определенных событий
в программе. Ну и захотел я эти биты в цикле проверять,
для чего обратился к ним путем Flags.Index, где Index - тоже байтовая переменная,
счетчик цикла. И эта зараза, протон то бишь, как какой-то picbasic, тоже заявляет мне про invalid.
Ну ладно, полез в старую программу на пикбейсике, посмотреть, как я там выкручивался,
там я объявлял array типа Bit и обращался по индексу массива. И вот тут второе попадалово -
оказывается, в протоне нету массива типа bit. Извольте целый байт занимать под однобитный флаг.
Ну я так и сделал, деваться то некуда, зато теперь разгребаю проблему передачи этих
флагов по USART, планировал-то 1 байт переслать, а теперь целую кучу надо. sad

В общем суть вопроса: кто как обращается к битам в байте не явным указанием номера бита, а через
переменную?

ЯНДЕКС Дата: 08.02.2010
ADMIN Дата: Вт, 09.02.2010, 03:27  |                                                                                                                Сообщение # 2
Администратор
Группа: Администраторы
Ранг:  Специалист
Сообщений: 1086
Репутация: 32   ±
Замечания:   ±
На сайте с 20.08.2007

Статус: Offline

А может, так попробовать?
Code

Dim A As Byte
Dim B As Byte
Dim I As Byte
For I = 0 To 7
ASM
btfss _a,_i
nop
ENDASM
Next

Симулятора нет под рукой, проверить не могу...

retas Дата: Вт, 09.02.2010, 16:14  |                                                                                                                Сообщение # 3
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 445
Репутация: 11   ±
Замечания:   ±
На сайте с 10.09.2007

Статус: Offline

Если правильно понял, вам нужен оператор GetBit

Dim a as bit
Dim Flagi as byte
(Nomer - желаемый проверить номер бита)
а = GetBit Flagi , Nomer

Dmitry Дата: Ср, 10.02.2010, 02:30  |                                                                                                                Сообщение # 4
Группа: Пользователи
Ранг:  Могу и подсказать
Сообщений: 157
Репутация: 6   ±
Замечания:   ±
На сайте с 12.05.2009

Статус: Offline

Да уж. Это называется "учите матчасть".

Спасибо, retas, это как раз то что нужно. А также SetBit, ClearBit...

А то я уже вот так извращался:

flags = flags | (1 << index)

вместо

SetBit Flags, Index

А вообще странно, что через точку не сделали. Это ж так естественно...

Сообщение отредактировал Dmitry - Ср, 10.02.2010, 02:34
retas Дата: Ср, 10.02.2010, 15:56  |                                                                                                                Сообщение # 5
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 445
Репутация: 11   ±
Замечания:   ±
На сайте с 10.09.2007

Статус: Offline

Рад что не зря живу.
Мне когда надо как то поизврасчаться, я по нескольку раз просматриваю чуть ли не каждый оператор
выискивая любую зацепку, чтоб по проще написать. Пока что, наткнулся на один недостаток Бейсика
(в лице Протоновского) - невозможность управлять портами через переменную.
Удачи!
  • Страница 1 из 1
  • 1
Поиск: