Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
12.02.2018, 23:11
|
|
Гражданин KAZUS.RU
Регистрация: 01.02.2011
Адрес: г. Долгопрудный
Сообщений: 996
Сказал спасибо: 339
Сказали Спасибо 95 раз(а) в 91 сообщении(ях)
|
AVR, вычитание двухбайтных чисел.
Здравствуйте.
Что-то не могу придумать как вычитать 2-х байтные числа, чтобы получать модуль результата.
Т.е. в случае отрицательного ответа, чтоб не FFFE какое-нибудь получалось, а - 1 (единица).
Банальное вычитание:
PHP код:
|
sub bal_l, temp sbc bal_h, temp2
|
, при положительном ответе меня устраивает этот код, а при отрицательном, там F1ED всякие, как бы это перевести в 3600 десятичное ?
---
У меня числа максимум 20 000 будут.
Тупо поставить условие, если результать больше 32767, то вычитать полученное из FFFF ?
Как то не красиво получится, может быть есть красивые решения ?
Последний раз редактировалось putmannn; 12.02.2018 в 23:17.
|
|
|
|
12.02.2018, 23:33
|
|
Почётный гражданин KAZUS.RU
Регистрация: 20.03.2007
Адрес: "Братское кольцо враждебности", т.е. ближайшее заМКАДье.
Сообщений: 7,035
Сказал спасибо: 3,037
Сказали Спасибо 3,207 раз(а) в 2,177 сообщении(ях)
|
Re: AVR, вычитание двухбайтных чисел.
А что такое "минус единица", как не 0xFFFF?
Отделите мухи и котлеты (вычитание и взятие модуля).
Код:
|
brpl bal_h,7
rjmp positive_smth
com bal_l
com bal_h
adiw bal_l,0x01
positive_smth: |
__________________
Экзорцист 40-го уровня.
Последний раз редактировалось ForcePoint; 12.02.2018 в 23:41.
|
|
|
Сказали "Спасибо" ForcePoint
|
|
|
12.02.2018, 23:51
|
|
Гражданин KAZUS.RU
Регистрация: 01.02.2011
Адрес: г. Долгопрудный
Сообщений: 996
Сказал спасибо: 339
Сказали Спасибо 95 раз(а) в 91 сообщении(ях)
|
Re: AVR, вычитание двухбайтных чисел.
ForcePoint, спасибо, получилось.
Только не brpl bal_h,7, а brpl positive_smth.
И adiw работает только с 4-мя верхними парами регистров, а они под другие нужды уже заняты.
Сделал +1 своим способом.
Последний раз редактировалось putmannn; 13.02.2018 в 00:19.
|
|
|
|
13.02.2018, 07:30
|
|
Модератор
Регистрация: 04.08.2010
Адрес: Москва СЗАО
Сообщений: 11,257
Сказал спасибо: 11,170
Сказали Спасибо 3,858 раз(а) в 2,928 сообщении(ях)
|
Re: AVR, вычитание двухбайтных чисел.
putmannn, а сравнить перед вычитанием и махнуть местами если вычитаемое больше? Автоматом получится модуль разности. Собственно в примерах из численных методов даже где-то было…
__________________
rtfm forever должно быть основой для каждого. Альтернатива грустна, поскольку метод слепого щенка успешно работает при весьма малом числе вариантов…
|
|
|
Сказали "Спасибо" mike-y-k
|
|
|
13.02.2018, 12:53
|
|
Почётный гражданин KAZUS.RU
Регистрация: 08.10.2007
Сообщений: 2,760
Сказал спасибо: 1,105
Сказали Спасибо 1,037 раз(а) в 569 сообщении(ях)
|
Re: AVR, вычитание двухбайтных чисел.
Сообщение от putmannn
|
ForcePoint, спасибо, получилось.
|
Что значит ПОЛУЧИЛОСЬ?
Попробовал (не так - "спробывал") - получилось!
Вы наверное знаете про обучение, образование, науку? Да? Тогда, может быть, вам стоит найти учебник по ассемблеру, по реализации арифметики? А вдруг корень извлечь понадобится? Вы ведь только что, в теме про wd, сокрушались качеством советов с интернета...
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 05:35.
|
|