Ассемблер (ASM) для AVR в вопросах и ответах

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
Z_h_e
Собутыльник Кота
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение Z_h_e »

У DS температура содержится вроде в 2 байтах. Вы правильно в 1 байт конвертируете?
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Аватара пользователя
СКАЗОЧНИК
Идёт направо - песнь заводит, Налево - сказку говорит.
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение СКАЗОЧНИК »

Да, правильно. ))) Температуру показывает без проблем на индикаторе и даже сравнивает с заданной, но в приделах положительных отлично, а вот с отрицательными беда... . Я конвертирую до целых, просто откинув все десятые и т.п.
Станислав
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение WiseLord »

СКАЗОЧНИК писал(а):он выдает температуру как есть и отрицательную температуру в дополнительном коде, т.е. в старшем бите байта появляется единица.
Вообще-то, ЕМНИП, там не только в старшем байте единица (вот в датчике DHT22 - там да, только единица), а вообще там нормальный дополнительный код, т.е. все старшие разряды в единице.

Всё, что с полученным оттуда 16-битным числом нужно сделать для получения "чистой" температуры в цельсиях - это всего лишь сдвинуть его влево 4 раза (это для DS18B20, а для DS1820 - один раз). Я в ассемблере не силён, но вроде это ASR для старшего байта и LSR + заёмом из C для младшего. А потом уже этот младший байт можно и сравнивать с порогом в ZUUM
Аватара пользователя
СКАЗОЧНИК
Идёт направо - песнь заводит, Налево - сказку говорит.
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение СКАЗОЧНИК »

Вот так я вытаскиваю температуру из него:

Код: Выделить всё


.........................

                 rcall READBYTE         ; Читаем первый байт (он будет в ДАТЕ)

            mov XL, DATA      ; Закидывааем значение первого байта в младший регистр Х

      rcall READBYTE         ; Читаем второй байт (он будет в ДАТЕ)

            mov XH, DATA      ; Закидывааем значение второго байта в старший регистр Х

; ---------- ПРЕОБРАЗУЕМ И ВЫВОДИМ НА ИНДИКАТОР ----------

         swap XH               ; Переворачиваем полубайты местами
         andi XH, 0xF0         ; Накладываем маску, остаются только старшие 4 бита
         swap XL               ; Переворачиваем младшие полубайты местами
         andi XL, 0x0F         ; Накладываем маску, остаются только младшие 4 бита
         
         add XH, XL            ; Складываем, в итоге получается готовая температура в XH
      
   rcall CONVERTBYTE             ; Забиваем значения для единиц, десятков и сотен   


Все верно, отрезаем все лишнее и остается один байт температуры. Все просто.

Изображение

З.Ы. Причем в ZUUM он тоже закидывает отрицательные в таком же формате (в дополнительном коде), т.к. вывод на индикатор у них один и тот же, и отображает все корректно.
Станислав
Аватара пользователя
Z_h_e
Собутыльник Кота
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение Z_h_e »

Поставте точку останова в этом условии и поглядите какие реальные значения в регистрах, какие флаги. Может проблема в другом месте, например забыли регистра сохранить в обработчике прерывания.
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
akl
Друг Кота
Сообщения: 4444
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение akl »

СКАЗОЧНИК
Поменяйте местами операнды

Код: Выделить всё

   cp  temp1,ZUUM
;   cp  ZUUM, temp1
   brlt ENN

Из описания команды BRLT
cp r16,r1 ; Compare r16 to r1
brlt less ; Branch if r16 < r1 (signed)
...
less: nop ; Branch destination (do nothing)
Аватара пользователя
СКАЗОЧНИК
Идёт направо - песнь заводит, Налево - сказку говорит.
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение СКАЗОЧНИК »

Ура!!!! Спасибо всем.

akl писал(а):Поменяйте местами операнды

Все правильно вы сказали, так и было раньше, пока не начал эксперименты...
Поменял местами, выдрал и перетащил в более логичное место программы. Все пашет! :beer: :music:
Я в восторге!
Дай Вам всем, кто откликнулся вселенная здоровья и денег побольше. :)
Станислав
Аватара пользователя
ILYAUL
Держит паяльник хвостом
Сообщения: 906
Зарегистрирован: Ср мар 28, 2012 21:45:24
Откуда: ВО

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение ILYAUL »

Код: Выделить всё

         swap XH               ; Переворачиваем полубайты местами
         andi XH, 0xF0         ; Накладываем маску, остаются только старшие 4 бита
         swap XL               ; Переворачиваем младшие полубайты местами
         andi XL, 0x0F         ; Накладываем маску, остаются только младшие 4 бита
         
         add XH, XL            ; Складываем, в итоге получается готовая температура в XH


Код: Выделить всё

   andi   rab,0xF0             // В rab младшее значение
      or      temp1,rab             // Складываем со старшим
      swap   temp1                // Меняем местами


К тому же

Код: Выделить всё

add XH, XL            ; Складываем, в итоге получается готовая температура в XH
может как бы не взначай добавить 1 к старшей тетраде
Аватара пользователя
СКАЗОЧНИК
Идёт направо - песнь заводит, Налево - сказку говорит.
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение СКАЗОЧНИК »

Почти понял, но не понял...
Вы предлагаете альтернативный вариант, как выделить один байт...
Я почему-то всегда думал, что add не складывает реально, а просто объединяет две половинки... :dont_know: :facepalm: :)
Станислав
Аватара пользователя
ILYAUL
Держит паяльник хвостом
Сообщения: 906
Зарегистрирован: Ср мар 28, 2012 21:45:24
Откуда: ВО

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение ILYAUL »

Ну да , вспомните как записываются байты получаемые с DS или просто посмотрите. Т.ч трех команд достаточно. Чтобы выделить температуру.
ПТУ-шник
Нашел транзистор. Понюхал.
Сообщения: 167
Зарегистрирован: Чт янв 01, 2015 16:34:55

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение ПТУ-шник »

Помогите начинающему! Скачал ASM Editor как советуют в книжке Ревича, накатил туда компилятор с AVR Studio 4. Но не как не могу получить .hex файл! Он за место них .obj выдаёт. Помогите! Что делать? В книжке об этом ничего не написано. На AVR Studio программировать не хочу, слишком много лишнего.

П.С. Компилятор пишет No errors, просто создаёт .obj заместо .hex
Demiurg
Это не хвост, это антенна
Сообщения: 1480
Зарегистрирован: Ср июн 25, 2008 15:19:44
Контактная информация:

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение Demiurg »

Если вы сейчас собираетесь писать на асме, лучше AVR-Studio 4.19 ничего нет. Я с AVR уже почти 10 лет работаю, так что поверьте мне. Есть еще одна альтернатива. IAR. Но в IAR на асме я программы не писал, только на си.
ПТУ-шник
Нашел транзистор. Понюхал.
Сообщения: 167
Зарегистрирован: Чт янв 01, 2015 16:34:55

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение ПТУ-шник »

Мне очень сильно избыточен функционал AVR Studio. Пробывал писать в ASM Editor и сразу понравился его минимализм, всё просто и понятно - создал файлик, написал, скомпилировал и всё. А в AVR Studio куча непонятных окошек, каких то настроек, симуляторов. Создать проект и скомпилировать код тот ещё квест. Мне не нужна вся эта мишура, я просто хочу помигать светодиодом :)

Может существует такие же IDE как ASM Editor для AVR? Чтоб можно было просто код писать, как в блокноте но с нумерацией строк и без всяких лишних окошечек чья функция для меня загадка. А лучше с ASM Editor помогите разобратся...
Demiurg
Это не хвост, это антенна
Сообщения: 1480
Зарегистрирован: Ср июн 25, 2008 15:19:44
Контактная информация:

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение Demiurg »

ПТУ-шник писал(а):...

О какой избыточности вы говорите? В студии есть все, что требуется. И ничего лишнего. И редактор и симулятор. Ну и так далее. Никакого квеста. Необходимый набор инструментов. Вы хотите в один файлик? Это только если светодиодиком поморгать. Как только пойдут более-менее серьезные проекты, вам придется научиться модульности программ.
Не надо ничего усложнять. AVR-Studio 4.19 проста как рубанок.
Последний раз редактировалось Demiurg Чт ноя 26, 2015 21:18:07, всего редактировалось 1 раз.
Аватара пользователя
Jack_A
Друг Кота
Сообщения: 6307
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение Jack_A »

ПТУ-шник писал(а): На AVR Studio программировать не хочу, слишком много лишнего.

Никто и не заставляет использовать "лишнее" - ни Студиевский редактор, ни замечательный его симулятор . Написал в своем любимом редакторе исходник, парой кликов мышью создал проект - и вы уже в Хопре :) - компилируй, получай и hex, и obj, и lst - в зависимости от настроек. Создать файл данных для записи в EEPROM - да сколько угодно. А если прога чуть сложнее 'помигать диодами' - отладка в Студии - прямо сказка. И Про Те Усы можно не вспоминать.
В общем, не надо бояться человека с ружьем АВР-Студии - она очень хорошая и доброжелательная даже к новичкам :)
Изображение
Pnjom-Penb
Мучитель микросхем
Сообщения: 469
Зарегистрирован: Вс авг 30, 2015 03:52:59

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение Pnjom-Penb »

Есть еще один аргумент против ASM Editor'а - как видно из последних постов, количество пользователей этого редактора намного меньше, чем той же студии, или IAR'а, а значит и подсказку получить труднее.
ПТУ-шник
Нашел транзистор. Понюхал.
Сообщения: 167
Зарегистрирован: Чт янв 01, 2015 16:34:55

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение ПТУ-шник »

Проблему ASM Editora решил, там в батнике не тот параметр стоял. Поправил и всё заработало.

Возникли вопросы про работу программы на ассемблере. Вот код:

Код: Выделить всё

.include "C:\avrtools\Appnotes\tn13def.inc" ; Библиотека для Тини13
SBI DDRB, 1 ; Настройка порта
SBIC PINB, 0 ; Если пин 0 порта В в лог. единице, то выполняем следующую команду. Если лог. нуле то пропускаем.
SBI PORTB, 1 ; пин 1 установка
SBIS PINB, 0 ; если на пине 0 нет сигнала то пин 1 в ноль
CBI PORTB,1


Программа гасит и зажигает светодиод по кнопке. Всё прекрасно работает.

Вопросы:
1) Почему она зациклина? Получается когда счётчик команд в мк доходит до конца помяти то он прыгает в начало т.е. аппаратно находится в цикле? Думал что программа дойдёт до последней команды и остановится, а не прыгнет обратно на первую.
2) Почему этот код вообще работает? :)) Тут нет векторов прерываний в начале, не установлен начальный адрес. Просто сразу идёт код.
3) Что за дериктива .device? Что именно она делает? А то в inc файлах уже покапался, а с device непонятно.
Аватара пользователя
СКАЗОЧНИК
Идёт направо - песнь заводит, Налево - сказку говорит.
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение СКАЗОЧНИК »

"Прекрасно" работает в протеусе или железе?
Станислав
ПТУ-шник
Нашел транзистор. Понюхал.
Сообщения: 167
Зарегистрирован: Чт янв 01, 2015 16:34:55

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение ПТУ-шник »

СКАЗОЧНИК писал(а):"Прекрасно" работает в протеусе или железе?

В железе. Симуляторы не люблю.
Аватара пользователя
СКАЗОЧНИК
Идёт направо - песнь заводит, Налево - сказку говорит.
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение СКАЗОЧНИК »

DEVICE - Определить устройство для которого компилируется программа
Директива DEVICE позволяет указать для какого устройства компилируется программа. При использовании данной директивы компилятор выдаст предупреждение, если будет найдена инструкция, которую не поддерживает данный микроконтроллер. Также будет выдано предупреждение, если программный сегмент, либо сегмент EEPROM превысят размер допускаемый устройством. Если же директива не используется то все инструкции считаются допустимыми, и отсутствуют ограничения на размер сегментов.

Если прерывания не используются, то допустимо их не указывать.

По первому вопросу не могу ниче вразумительного сказать. Вообще-то так не принято. Все делают бесконечный цикл. Может ваш компилятор посчитал, что его надо вставить и сделал это сам. Может так и есть, если дошел до конца памяти, то прыгает на начало (или сбрасывается, что скорее всего). Однако, это сильно криво, так делать. :dont_know:

Да и в железе, если даже по умолчанию стоит у МК 1 МГц тактовая, все равно на кнопку реагировать должна как попало.
Станислав
Ответить

Вернуться в «AVR»