Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Флаги в регистрах (установка-сброс)
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > MCS51, AVR, PIC, STM8, 8bit
C.S.
Подскажите идиоту пожалуйста, под ночь туплю. Как бы красивее ставить-скидывать всякие флаги в регистрах? Я пишу в лоб:
Код
IN        ACC, MCUCR
;Скинем два младших бита
ANDI    ACC, 0b11111100
;Ставим нужные флаги
ORI        ACC, 0b00000010    ;по спаду!
OUT        MCUCR, ACC

Здесь ACC - определение для регистра (типа аккумулятор). Я знаю, можно заранее записать в регистр общий байт - сразу все флаги. А как быть, если их надо по одному во время работы программы скидывать-ставить?
Научите, как делать грамотно и аккуратно (чтобы хороший стиль написания был)
DRUID3
Цитата(C.S. @ Aug 14 2009, 22:25) *
А как быть, если их надо по одному во время работы программы скидывать-ставить?

наложить маску...
C.S.
То-есть, красивого решения нет - и остаётся обычное: прочли, поменяли что надо, записали?
x736C
«Некрасивое» решение заверните в макрос, и будет красиво.
Код
    stbr Flags,DoRcv
    clbr Flags,RcvErr
adc
Цитата(C.S. @ Aug 14 2009, 23:25) *
пишу в лоб:
Код
IN        ACC, MCUCR
;Скинем два младших бита
ANDI    ACC, 0b11111100
;Ставим нужные флаги
ORI        ACC, 0b00000010;по спаду!
OUT        MCUCR, ACC

Можно так:
Код
IN ACC, MCUCR
cbr ACC,(1<<0)|(1<<1)
OUT MCUCR, ACC

или так:
Код
IN ACC, MCUCR
sbr ACC,(1<<0)|(1<<1)
OUT MCUCR, ACC
C.S.
Цитата(adc @ Aug 15 2009, 00:18) *
Можно так:
Код
IN ACC, MCUCR
cbr ACC,(1<<0)|(1<<1)
OUT MCUCR, ACC

или так:
Код
IN ACC, MCUCR
sbr ACC,(1<<0)|(1<<1)
OUT MCUCR, ACC

О! Большой респект) проглядел команды! Так нагляднее (если имена битов использовать)! Спасибо вам!
defunct
Цитата(C.S. @ Aug 14 2009, 22:25) *
если их надо по одному во время работы программы скидывать-ставить?

Есть еще чудесные команды
BST - загрузка любого бита регистра фо флаг T
BLD - запись флага T в бит регистра.

BRTS переход если T установлен
BRTC переход если T сброшен.
ну и
SET установка T
CLT сброс флага T непосредственно.

пример
IN R16, PINB
BST R16, PB0
BRTS <Label_PB0_установлен>

Понимаю что это не совсем то о чем Вы спрашивали, но тем не менее эти команды часто дают очень большой выигрыш в битовых операциях. Особенно при организации программных флагов.
C.S.
Спасибо! В копилку пойдёт!
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.