Перейти к содержанию

Инвертировать байт или биты в ассемблере avr


Рекомендуемые сообщения

Всем привет! Уважаемые, может кто подскажет, как инвертировать байт или биты? Начинаю только учиться и поэтому встал вот такой вопрос:-)

.include "tn2313adef.inc"    ; Присоединение файла описаний
.list                    ; Включение листинга

;------------------------- Начало программного кода

.cseg                 ; Выбор сегмента программного кода
.org     0                ; Устанеовка текущего адреса на ноль

.def    temp = r16    ; Определение главного рабочего регистра

;-------------------------- Инициализация стека
    
        ldi        temp, 0x7F    ; Выбор адреса вершины стека 
        out        SPL, temp    ; Запись его в регистр стека

;-------------------------- Инициализация Главного предделителя

        ldi        temp, 0x80  ; Записываем число $80 в регистр temp
        out        CLKPR, temp    ; Записываем в регистр CLKPR
        ldi        temp, 0        ; Записываем 0 в регистр temp
        out        CLKPR, temp    ; Записываем этот ноль в CLKPR
        
        ; Инициализация портов ВВ
        out ddrb, temp
        out portd, temp
        ldi temp, 0xff
        out portb, temp
        out ddrd, temp
main:                                                                      
        in temp, pinb
        out portd, temp                      ;---------- нужно чтобы в выходе биты были уже инвертированы
        rjmp main
 

Изменено пользователем AdamBeno
Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

Выбираем схему BMS для заряда литий-железофосфатных (LiFePO4) аккумуляторов

Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

6 часов назад, Alexeyslav сказал:

Операцию XOR сделать

main:
        in temp, pinb
        com temp
        out portd, temp
        rjmp main

Сделал так и все получилось, не знаю насколько это правильно, но работает как мне нужно.

Ссылка на комментарий
Поделиться на другие сайты

COM инвертирует все биты разом, впрочем аппаратно это алиас на операцию XOR 0xFF.
XOR же позволяет инвертировать отдельные биты не трогая остальные.

Учение - изучение правил. Опыт - изучение исключений.

Ссылка на комментарий
Поделиться на другие сайты

1 час назад, Alexeyslav сказал:

XOR же позволяет инвертировать отдельные биты не трогая остальные

Если не трудно, напиши как сделать, я пока не догоняю.

Ссылка на комментарий
Поделиться на другие сайты

main:
        in temp, pinb
        eor temp2, temp
        out portd, temp2
        rjmp main
Вот так тоже работает, ты вот это имел ввиду? я почему то не могу найти команду xor/

нет, не работает так, ошибся.

Изменено пользователем AdamBeno
Ссылка на комментарий
Поделиться на другие сайты

Только что, AdamBeno сказал:

не могу найти команду xor

eor - это оно и есть

ldi r17, 0xF0
eor r0, r17

В r0 будут инвертированы 4 младших бита, 4 старших не поменяются.

Если забанить всех, кто набрался смелости думать независимо, здорово будет на форуме - как на кладбище: тишина, птички поют...

Ссылка на комментарий
Поделиться на другие сайты

11 минуту назад, ARV сказал:

будут инвертированы 4 младших бита

Но вот так заработало, и старшими и с младшими. Подскажите, в чем разница между COM побитной инверсией и этим, ведь обе меняют биты.

.def    temp = r16    ; Определение главного рабочего регистра
.def    temp2 = r17  ;
ldi temp2, 255
;-------------------------- Инициализация стека
    
        ldi        temp, 0x7F    ; Выбор адреса вершины стека 
        out        SPL, temp    ; Запись его в регистр стека

;-------------------------- Инициализация Главного предделителя

        ldi        temp, 0x80  ; Записываем число $80 в регистр temp
        out        CLKPR, temp    ; Записываем в регистр CLKPR
        ldi        temp, 0        ; Записываем 0 в регистр temp
        out        CLKPR, temp    ; Записываем этот ноль в CLKPR
        
        ; Инициализация портов ВВ
        out ddrb, temp
        out portd, temp
        ldi temp, 0xff
        out portb, temp
        out ddrd, temp
main:
        in temp, pinb
        eor temp, temp2
        out portd, temp
        rjmp main

Ссылка на комментарий
Поделиться на другие сайты

Только что, AdamBeno сказал:

Подскажите, в чем разница между COM побитной инверсией и этим, ведь обе меняют биты.

Ну ведь вы видите сами, что COM инвертирует ВСЕ БИТЫ в ОДНОМ регистре, а EOR меняет те биты в ПЕРВОМ РЕГИСТРЕ, которые установлены в 1 ВО ВТОРОМ.

То есть как минимум CОM однооперандная команда, а EOR - двухоперандная.

Изменено пользователем ARV

Если забанить всех, кто набрался смелости думать независимо, здорово будет на форуме - как на кладбище: тишина, птички поют...

Ссылка на комментарий
Поделиться на другие сайты

6 минут назад, ARV сказал:

Ну ведь вы видите сами

Пока что плохо вижу, точнее не могу почувствовать практическое преимущество одного над другим:) может когда продвинусь дальше, то глаза откроются.

Ссылка на комментарий
Поделиться на другие сайты

Попробуйте при помощи СОМ инвертировать только старший бит в числе, сразу увидите практическое преимущество EOR. 

Преимущество СОМ заключается в отсутствии необходимости во втором регистре для одного частного случая инвертирования всех битов.

Вот и вся разница

Если забанить всех, кто набрался смелости думать независимо, здорово будет на форуме - как на кладбище: тишина, птички поют...

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы публикуете как гость. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
  • Сообщения

    • Какие доводы имеете против принципа разумной достаточности? Михайло Василич на сей предмет сказал бы: "В электронику уже затем вникать следует, чтобы легче было без неё обходиться"
    • Во-первых, усилитель от нагрузки 48 Ом может возбудиться, во-вторых звук будет искаженный за счет высокого сопротивления источника. Надо такую схемку применить (если усилитель рассчитан на нагрузку 4 Ом:
    • Постараюсь не сильно. Но пнуть в нужном направлении надо. Такое безобразие надо срочно исправлять.   В таком виде - разве что любителям головоломок и ребусов. Вы более запутанно и небрежно схемы не пробовали рисовать?  Вот на такой "схеме" и то лучше видно, что с чем соединено: На схемах электрических принципиальных все элементы обозначаются в виде УГО (Условных Графических Изображений). И схема рисуется как минимум с соблюдением основных правил, чтобы всем понятно было. Ну ладно, ГОСТы - это сложно. Но хотя бы что-то популярное на эту тему почитайте (ссылка).
    • для автогенераторов? У Амелиных речь идет об усилителях, подаче на их  вход сигнала синусоиды и т.д. Про автогенераторы что-то ничего не нашел. Книга 2013 г. Может, можно нагрузить источник sine на какой-нибудь резистор, никуда к автогенератору не подключать (общим будет только общий провод) и далее смотреть анализ искажений? Покажет ли Microcap правду после такого обмана? 
    • Доброй ночи. Столкнулся с неожиданной трудностью.  Косой мост.  На затворе транзистора такая картинка( синий- напряжение на коллекторе, желтый- напряжение на затворе), в момент включения ключа.  Предположительно, на полке Миллера, так быть не должно. RC цепи между истоком и стоком не помогают, в затворной цепи, так же. Верхний ключ немного сильнее греется нижнего, при этом осциллограммы на затворах идентичные. Подскажите пож., куда смотреть? STW26nm60n.pdf     KosoyR50.asc
    • Для этого надо как минимум схему схему приложить.  Без неё все ваши изыскания не имеют никакой практической ценности. Мало ли какая хрень с какими ошибками у вас собрана. Можно только догадываться, что у вас сетевой полумост. Но вообще-то и это не факт...
×
×
  • Создать...