Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Работа с битами в массиве.
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
add
Прошу помощи-совета. unsure.gif

//Есть массив:
.dseg
massiv: .byte 64
//Есть адрес бита в массиве (от начала массива)
//к примеру:
.equ adr_bit=314
//вопрос:как установить или сбросить этот бит?
Можно поделить "adr_bit" на 8, получить адрес байта,
остаток-бит в байте. (тогда возникает вопрос как поделить на 8, это наверное отдельная тема...)
Может можно как-то попроще с битами работать?
_Bill
Можно поделить "adr_bit" на 8, получить адрес байта,
остаток-бит в байте. (тогда возникает вопрос как поделить на 8, это наверное отдельная тема...)
Может можно как-то попроще с битами работать?

Деление на 8 эквивалентно сдвигу вправо на 3.
add
Цитата
Деление на 8 эквивалентно сдвигу вправо на 3.

Пасиба !
Да все так :-) . т.о. посление 3 бита в адресе собственно и есть бит в байте..как-то сразу недотумкал...осталось перевести из значение остатка в маску для установки/сброса бита и все ок.
Old1
Цитата(add @ Apr 18 2006, 14:16) *
Да все так :-) . т.о. посление 3 бита в адресе собственно и есть бит в байте..как-то сразу недотумкал...осталось перевести из значение остатка в маску для установки/сброса бита и все ок.

Один из вариантов: зашить в СРАМ или ФЛЭШ таблицу:
0->1
1->2
2->4
3->8
4->16
5->32
6->64
7->128
и по ней остаток в маску и переводить.
add
Ага так и сделаю ("зашить в СРАМ или ФЛЭШ таблицу"). Всем спасиба за участие smile.gif
defunct
Цитата
осталось перевести из значение остатка в маску для установки/сброса бита и все ок.


Есть также чудесные команды bst/bld для работы с битами. Загрузка и выгрузка бита в/из флага T.
единственный минус - номер бита задается константой...
add
Цитата
Есть также чудесные команды bst/bld для работы с битами

Да, есть. Пока правда не совсем понимаю их "чудесность" smile.gif в данном применении.
Вначале "зашить в СРАМ или ФЛЭШ таблицу.." потом определить бит и соотеветственно не менее "чудесными" командами sbr и cbr установить в регистре необходимый бит. потом записать этот байт о в massiv.

(вообще чесно говоря давно непользовался битом Т и несовсем понимаю для чего он нужен?! ведь можно взять регистр (>=R16) и работать с его битами(ипользуя к примеру для флагов)?! )
vet
По опыту, его удобно пользовать для организации битовых переменных в нижних регистрах.

Загрузка единицы в 5 бит регистра R2:
set
bld r2,5

Загрузка нуля:
clt
bld r2,5

Копирование бита в Т:
bst r2,5

Ветвление:
sbrs r2,5
rjmp label

Плюс: не портится верхний регистр для загрузки константы с последующим and/or/eor.
Минус: bld/bst занимают 2 такта против 1-тактовой ldi.
add
Цитата
По опыту, его удобно пользовать для организации битовых переменных в нижних регистрах

ага, согласен.

Цитата
не портится верхний регистр для загрузки константы с последующим and/or/eor

да, если есть катастрофическая нехватка регистров smile.gif..
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.