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

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
Zwanzig
Нашел транзистор. Понюхал.
Сообщения: 190
Зарегистрирован: Вт янв 26, 2010 21:49:41
Откуда: モスクワ

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

Сообщение Zwanzig »

Serhio, такой команды в AVRASM вообще нет. Скорее всего, sbi 0x27, 3. Очевидно адресация прямая.
Реклама
eufs
Опытный кот
Сообщения: 772
Зарегистрирован: Вс апр 10, 2011 02:24:06
Откуда: г.Северодонецк

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

Сообщение eufs »

Serhio писал(а):Подскажите пожалуйста: SETB P1.3; (P1)=27H; (PC)=127H
Команда производит запись 1 в бит. Какая используется адресация для операнда-источника и операнда-приемника? и что чему будет равно?

Непосредственная(прямая). Это команда для 51 семейства.
C0FFEE=‭12648430‬
Реклама
Аватара пользователя
IfoR
Поставщик валерьянки для Кота
Сообщения: 2029
Зарегистрирован: Сб ноя 15, 2008 10:09:56
Откуда: г. Тула
Контактная информация:

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

Сообщение IfoR »

Вот столкнулся с одной проблемой.
Есть код для управления дисплеем, но суть не в этом. В этом коде я использую C-шные команды препроцессора для определения всяких параметров. И вот проблема.
Например есть объявление:
#define size_x 12

Задача: Записать это число в символьном виде в flash, т. е. после развёртывания в коде должна получиться такая конструкция:
.db "12",0

Как сделать?
.db "size_x",0 не катит.

Была идея создать макрос вида
#define _s(a) #a
а затем
.db _s(size_x),0
но не тут-то было - макрос _s() не обрабатывает препроцессором параметр a перед закавычинием, т.е. в результате после развёртывания получается вс ё тот же
.db "size_x",0
Изображение
/dev/urandom - гигабайты информации.

OS: openSUSE 13.2 (x86_64)
Аватара пользователя
coredumped
Опытный кот
Сообщения: 838
Зарегистрирован: Вт апр 12, 2011 18:38:19
Откуда: с Земли

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

Сообщение coredumped »

IfoR писал(а):#define size_x 12

Задача: Записать это число в символьном виде в flash, т. е. после развёртывания в коде должна получиться такая конструкция:
.db "12",0

Как сделать?

Например, так

.db size_x/10+0x30, size_x%10+0x30, 0

Ку? :))
Все будет только лучше, в крайнем случае - хуже.
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
avreal
Опытный кот
Сообщения: 842
Зарегистрирован: Чт дек 31, 2009 19:27:45
Откуда: Бровари, Україна
Контактная информация:

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

Сообщение avreal »

Это постоянно то там, то сям пробегает. Нужна двойная проброска.

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

#define size_x 12

#define __s(a) #a
#define _s(a) __s(a)

  .db _s(size_x),0

В результате первого разворачивания из _s(size_x) будет получено __s(12), а уже оно даст нужную строку.
Лень в виде мании величия: «ты гений, зачем стараться?». В виде комплекса: «всё равно не выйдет, зачем упираться?». Как логика: «если достаточно, зачем знать и уметь больше?». Цель одна: остановить. Не любит тепло работающих мышц и шум работающего мозга.
Реклама
Аватара пользователя
IfoR
Поставщик валерьянки для Кота
Сообщения: 2029
Зарегистрирован: Сб ноя 15, 2008 10:09:56
Откуда: г. Тула
Контактная информация:

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

Сообщение IfoR »

coredumped, ну, ф-фпринципе то можно с учётом текущих обстоятельств...
avreal, спасибо! Не догадался.
Изображение
/dev/urandom - гигабайты информации.

OS: openSUSE 13.2 (x86_64)
Реклама
Аватара пользователя
IfoR
Поставщик валерьянки для Кота
Сообщения: 2029
Зарегистрирован: Сб ноя 15, 2008 10:09:56
Откуда: г. Тула
Контактная информация:

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

Сообщение IfoR »

Ньда, только сейчас проверил: двойная проброска не помогает. Получается тоже самое. :(

В общем пока сделал как coredumped сказал с дополнительными костылями.
Изображение
/dev/urandom - гигабайты информации.

OS: openSUSE 13.2 (x86_64)
Аватара пользователя
avreal
Опытный кот
Сообщения: 842
Зарегистрирован: Чт дек 31, 2009 19:27:45
Откуда: Бровари, Україна
Контактная информация:

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

Сообщение avreal »

Ну что тут сказать... Значит, в используемом Вами ассемблере С-шный препроцессор поддержан формально. Как бы и обрабатывает макросы, но по упрощённой технологии.

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

#define STR_(a) #a
#define STR(a) STR_(a)

#define size_x 12

        .text
        .asciz STR(size_x)
        .asciz STR_(size_x)

        .end
avr-gcc -Wa,-alm=tst.lst -c tst.S
cat tst.lst

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

GAS LISTING /tmp/ccaOIlQd.s          page 1


   1                  # 1 "tst.S"
   1                  
   0                  
   0                  
   2                  #define STR_(a) #a
   3                  #define STR(a) STR_(a)
   4                  
   5                  #define size_x 12
   6                  
   7                     .text
   8 0000 3132 00         .asciz STR(size_x)
   9 0003 7369 7A65       .asciz STR_(size_x)
   9      5F78 00
  10                  
  11                     .end
Лень в виде мании величия: «ты гений, зачем стараться?». В виде комплекса: «всё равно не выйдет, зачем упираться?». Как логика: «если достаточно, зачем знать и уметь больше?». Цель одна: остановить. Не любит тепло работающих мышц и шум работающего мозга.
Аватара пользователя
Switch
Открыл глаза
Сообщения: 48
Зарегистрирован: Пн фев 07, 2011 00:42:25
Откуда: Из затерянного мира.

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

Сообщение Switch »

Есть вопрос.
Имеем число в одном регистре.
Как можно на ассемблере разделить единицы, десятки и сотни этого числа по трём разным регистрам? МК - MEGA8.
Число целое, со знаком (signed).
Аватара пользователя
ploop
Модератор
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

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

Сообщение ploop »

Делить на 10, остатки забирать. Следующий вопрос будет - где взять деление. А нигде, написать :) И воспользоваться поиском по форуму, неоднократно обсуждалось (емнип, даже в этой теме)
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

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

Сообщение Gudd-Head »

Switch писал(а):Имеем число в одном регистре.
Как можно на ассемблере разделить единицы, десятки и сотни этого числа по трём разным регистрам? МК - MEGA8.
Число целое, со знаком (signed).

Искать апнот про BCD арифметику. Но там вроде без знака.
ploop писал(а):Делить на 10, остатки забирать. Следующий вопрос будет - где взять деление. А нигде, написать :)

Вычитать сначала сотни, потом десятки, потом единицы, включив при этом три счётчика :)
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Аватара пользователя
ploop
Модератор
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

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

Сообщение ploop »

Вычитать сначала сотни, потом десятки, потом единицы, включив при этом три счётчика

Ну да. Когда сам столкнулся с этой проблемой, искать не стал, просто взял и написал :)
Аватара пользователя
Jack_A
Друг Кота
Сообщения: 6307
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

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

Сообщение Jack_A »

ploop писал(а):
Вычитать сначала сотни, потом десятки, потом единицы, включив при этом три счётчика

Ну да. Когда сам столкнулся с этой проблемой, искать не стал, просто взял и написал :)

Советы все хорошие, но не совсем по делу.
Во-первых, у человека signed. Значит первым делом надо расщепить на знак и абс. величину. И знак где-то хранить.
Во-вторых : Gudd-Head, зачем три счетчика ? Когда вычли сотни и десятки, остаток уже содержит единицы.
Если бы я был преподом, у меня ответивший по билету для получения "отл." прямо за столом должен был бы написать эту подпрограммку секунд за 40. Хорошо, что я не препод :) Да и билетов сейчас, наверное, нет - рефераты, тестирование... Дебилизм.
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

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

Сообщение Gudd-Head »

Jack_A писал(а): Во-вторых : Gudd-Head, зачем три счетчика ? Когда вычли сотни и десятки, остаток уже содержит единицы.
... должен был бы написать эту подпрограммку секунд за 40.

Дык, я тоже ответ писал секунд 40, потому и не стал особо мозги напрягать :)
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Аватара пользователя
ploop
Модератор
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

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

Сообщение ploop »

Если бы я был преподом, у меня ответивший по билету для получения "отл." прямо за столом должен был бы написать эту подпрограммку секунд за 40.

Если бы вы так же хорошо преподавали, как спрашивали - нет проблем. А то сейчас преподаватели пошли, как бы помягче сказать, тоже не айс...
Аватара пользователя
Switch
Открыл глаза
Сообщения: 48
Зарегистрирован: Пн фев 07, 2011 00:42:25
Откуда: Из затерянного мира.

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

Сообщение Switch »

Мдаа.... Холивар устроили, но не помогли. :)))
На счёт деления - спрашивать не буду, так как гугл знает ответ на этот вопрос а вот запрос на разложение числа он не понимает.
Вообще, у меня этот вопрос возник при написании программы для термодатчика DS18B20
Вообще мне надо всего 2 числа достать из двух регистров (t LSB и t MSB) и оформить их так, чтобы можно было направить их в дешифраторы 4>10. А знак нужно отобразить отдельно. Десятые и сотые доли мне ненужны. Датчик настроен на минимальную точность.
Обмен 1Wire организовал, а вот это - даже в голову не приходит ничего.

ЗЫ:
И причём тут преподы? Я самоучка по электронике и МК и делаю для себя. :)
Никаких дипломных работ. :)
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

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

Сообщение Gudd-Head »

Switch писал(а):Вообще, у меня этот вопрос возник при написании программы для термодатчика DS18B20.

Ё-моё, так бы сразу и сказали. А то "число со знаком"...
Берёте 7 бит с датчика (2^6 ... 2^0), включаете счётчкик и начинаете вычитать по 10. Как только результат станет отрицательным, прибавляете 10. В счётчике получаете десятки, в результате - единицы.
Switch писал(а):Мдаа.... Холивар устроили, но не помогли.

См. вложение, если настолько тяжело усваивается информация.
Вложения
BCD Conversion.asm
(12.29 КБ) 208 скачиваний
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Аватара пользователя
Switch
Открыл глаза
Сообщения: 48
Зарегистрирован: Пн фев 07, 2011 00:42:25
Откуда: Из затерянного мира.

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

Сообщение Switch »

Спасибо. :beer: Отпишусь, что понял из этого.
Аватара пользователя
Engineer_Keen
Друг Кота
Сообщения: 3868
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

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

Сообщение Engineer_Keen »

Нашел еще тему, правда без знака, да и опоздал немного :oops:
Аватара пользователя
Switch
Открыл глаза
Сообщения: 48
Зарегистрирован: Пн фев 07, 2011 00:42:25
Откуда: Из затерянного мира.

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

Сообщение Switch »

Вдогонку помогла мне ещё и статья ARV. Теперь понятнее стало. Попробую доделать свою программу. Если будут конкретные вопросы, обращусь.
Ответить

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