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

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
FreshMan
Друг Кота
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

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

Сообщение FreshMan »

nibiluk, я оттуда и начал учить.............., дошел вот сюда http://easyelectronics.ru/avr-uchebnyj-kurs-makroassembler.html#more-19 и начал задавать знатокам вопросы о .CSEG и .ORG address................, короче забуксовал........, там автор излагает не для тех кто в танке..........., где б найти материал в котором бы это излагалось для таких непонятливых как я.................... :dont_know: :( :dont_know:
Tell Me The Truth
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

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

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

FreshMan писал(а):начал задавать знатокам вопросы о .CSEG и .ORG address................, короче забуксовал........,

Что тут непонятного? У вас программа по умолчанию помещается начиная с нулевого адреса флэш-памяти. Если вы хотите изменить адрес — пишете .ОРГ адрес.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Аватара пользователя
IfoR
Поставщик валерьянки для Кота
Сообщения: 2029
Зарегистрирован: Сб ноя 15, 2008 10:09:56
Откуда: г. Тула
Контактная информация:

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

Сообщение IfoR »

Ну так там всё слишком просто, что бы писать целые книги об этом. :)
Вот этого вне хватило, всё расписано просто и понятно, хоть на стену перед монитором вешай:
http://dfe3300.karelia.ru/koi/posob/avr ... sm-rus.htm
А вот на счёт периферии, это я уже по даташитам конкретного микроконтроллера смотрю. Там тоже, если представляешь себе примерно ход работы данного устройства, то достаточно взглянуть на структуры настроечных регистров и писать код.

Ну ещё по поводу .xSEG-ов всяких. Тут следует учитывать, что у атмелок архитектура Гарвардская, т.е. участок памяти с кодом и с ОЗУ (и с EEPROM) полностью разделены друг от друга и не имеют общей шины (у каждого блока своя шина и, соответственно, адрес начало каждого блока равен 0) и напрямую из одного блока в другой общаться нельзя (если из FLASH в ОЗУ общаться, так тут это организовывает сам процессор, а что бы в EEPROM, то тут вообще обращение через периферию идёт). Вот .xSEG указывают с каким блоком идёт дальше работа, а .ORG устанавливает адрес конкретно в этом блоке.
Изображение
/dev/urandom - гигабайты информации.

OS: openSUSE 13.2 (x86_64)
Аватара пользователя
suslogon
Друг Кота
Сообщения: 10693
Зарегистрирован: Пн июл 14, 2008 21:28:00
Откуда: Москва
Контактная информация:

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

Сообщение suslogon »

вопрос такой: мог бы кто небесплатно разумеется (но и не очень дорого) написать программку для мега32 для термометра на дс18б20 с несколько хитрой индикацией?
Ищу тиратрон ТХИ1-2000/4, ГРИ ИН-23, ФЭУ-103; 134; 135, 138, 155, 157, лампу ИСШ-7.
Любые ГИС серий 203, 225, 233, 244, 250, 296, 801, 838 в любом состоянии. Компоненты и детали от миниатюрных твердотельных лазеров.
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

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

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

suslogon писал(а):вопрос такой: мог бы кто небесплатно разумеется (но и не очень дорого) написать программку для мега32 для термометра на дс18б20 с несколько хитрой индикацией?

Дык, это на "Из лап в лапы" попахивает :wink:
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Arlleex
Друг Кота
Сообщения: 4435
Зарегистрирован: Сб мар 07, 2009 20:44:36

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

Сообщение Arlleex »

Доброй ночи :)
Пишу для Attiny2313
Как организовать побитовый вывод регистра общего назначения в 1 выход порта микроконтроллера?
при этом свободно по своему усмотрению использовать другие биты этого же порта?
Не умеешь - не берись, но не взявшись не научишься...
Аватара пользователя
ploop
Модератор
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

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

Сообщение ploop »

Как организовать побитовый вывод регистра общего назначения в 1 выход порта микроконтроллера?

Анализировать крайний бит РОН (левый или правый, смотря с какой стороны выводить), в зависимости от его состояния устанавливать или сбрасывать бит порта, затем сдвигать содержимое РОН влево/вправо

при этом свободно по своему усмотрению использовать другие биты этого же порта?

А при чём тут они? Как их настроите, так и будут работать.

----------

Во, даже отрыл пример вывода 6 байт из памяти на сдвиговый регистр:

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

print:
ldi XH,high(display_buf+6)
ldi XL,low(display_buf+6)
ldi rx1,6 ; выводим 6 байт с конца

print_0:
  ld rx3,-X ; в rx3 - выводимый байт
  ldi rx2,8 ; в rx2 - счётчик до 8
  print_1:  ; data_port,data_bit - куда выводим
    sbrc rx3,0
    sbi data_port,data_bit
    sbrs rx3,0
    cbi data_port,data_bit
    push_imp
    lsr rx3
    dec rx2
    brne print_1
  dec rx1
  brne print_0
ret
Аватара пользователя
Jack_A
Друг Кота
Сообщения: 6307
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

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

Сообщение Jack_A »

ploop писал(а):
Как организовать побитовый вывод регистра общего назначения в 1 выход порта микроконтроллера?

Анализировать крайний бит РОН (левый или правый, смотря с какой стороны выводить), в зависимости от его состояния устанавливать или сбрасывать бит порта, затем сдвигать содержимое РОН влево/вправо


Т.е. преобразовать параллельный код в последовательный. Можно закинуть его в регистр данных SPI, и он сделает это автоматически. Конечно, SPI должен быть настроен и ничем другим не занят.
Arlleex
Друг Кота
Сообщения: 4435
Зарегистрирован: Сб мар 07, 2009 20:44:36

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

Сообщение Arlleex »

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

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

Сообщение ploop »

копирует младший бит регистра в бит Т SREG, а потом сдвигаем содержимое регистра, вставляем этот бит в другой регистр - надеваем на него маску - и выводим на порт:)

Можно и так, но посчитай количество тактов на один проход :) Самым оптимальным (что я смог придумать) оказалось это:

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

    sbrc Rx,0
    sbi port,bit
    sbrs Rx,0
    cbi port,bit
Аватара пользователя
Jack_A
Друг Кота
Сообщения: 6307
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

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

Сообщение Jack_A »

Arlleex писал(а):Вчера еще организовал так:
копирует младший бит регистра в бит Т SREG, а потом сдвигаем содержимое регистра, вставляем этот бит в другой регистр - надеваем на него маску - и выводим на порт:)


Бит Т может обмениваться содержимым не только с младшим, но с любым битом РОН. Правда, если речь идет о передаче всех битов РОН, то вышесказанное в цикле не катит. Остается решить - что важнее: быстродействие или затраты памяти. В первом случае -- повторить эту пару команд BST - BLD 8 раз :)
Аватара пользователя
FreshMan
Друг Кота
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

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

Сообщение FreshMan »

вопрос:
какая разница между инструкцией и директивой ? :dont_know:
раньше я думал что это синонимы............. :tea:
Tell Me The Truth
SII
Вымогатель припоя
Сообщения: 635
Зарегистрирован: Пт янв 30, 2009 14:50:35
Откуда: Солнечногорск

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

Сообщение SII »

Директива -- это приказ транслятору что-то там сделать (выделить память под переменную, установить адрес, с которого будет размещаться следующий код и т.д.). А инструкция или команда -- то, что будет выполняться процессором при работе программы.
Аватара пользователя
john_rise
Встал на лапы
Сообщения: 136
Зарегистрирован: Пн дек 17, 2007 13:15:43

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

Сообщение john_rise »

Господа. Прошу вашей помощи в вопросе который давно не даёт покоя.

Имеет некоторую, байтовую переменную, которую необходимо просуммировать с регистровой парой:

.def r14 = indx

add XL,indx
clr r16
adc XH,r16

или:

.def r14 = indx

clr r16
add XL,indx
adc XH,r16

Но вот раздражает необходимость чистить вспомогательный регистр, в данном случае r16 для того что-бы выполнить сложение со знаком переноса (carry).

Конечно можно организовать регистр который будет всегда равен "0x00":
.def r13 = zero
И далее сложение с переносом делать с этим самым регистром:

add XL,indx
adc XH,zero

Ну вот регистра жалко :)

Можно сделать и так:

com XH
add XL,indx
sbci XH,low(0x00)
com XH

Или при помощи инструкций типа BRxx, но здесь растёт число инструкций, что тоже не греет душу.

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

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

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

john_rise писал(а):Эдакая задачка для эрудиции

Собсно, где задача?
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Аватара пользователя
john_rise
Встал на лапы
Сообщения: 136
Зарегистрирован: Пн дек 17, 2007 13:15:43

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

Сообщение john_rise »

Задача отмахнуться минимумом строк и желательно не прибегать к дополнительному регистру.

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

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

Сообщение avreal »

Вариант с занулённым регистром может быть оптимальным. Регистров довольно много, а при частых операциях var16 += var8 экономия одной команды может быть существенной.

john_rise писал(а):Или при помощи инструкций типа BRxx, но здесь растёт число инструкций, что тоже не греет душу.
Не сильно и растёт

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

    add XL,indx
    brcc noinc
    inc XH
noinc:
Ни по словам, ни по тактам не длиннее

john_rise писал(а):

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

    add XL,indx
    clr r16
    adc XH,r16

А ещё вопрос -- откуда взялись значения XL, XH. Если они только что загрузились константами, то, как я уже писал в этой теме несколько страниц назад, лучше всего не так

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

    ldi XL, low(table)
    ldi XH, high(table)
    add XL,indx
    clr r16
    adc XH,r16
или так

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

    ldi XL, low(table)
    ldi XH, high(table)
    add XL,indx
    adc XH, ZERO_REG

а так:

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

    mov XL,indx
    clr XH
    subi XL, low( -table)
    sbci XH, high( -table)
По длине как второй вариант, но не требует постоянно выделенного доп. регистра.
По сравнению с первым вариантом и короче, и даже временно не требует доп регистра.
Лень в виде мании величия: «ты гений, зачем стараться?». В виде комплекса: «всё равно не выйдет, зачем упираться?». Как логика: «если достаточно, зачем знать и уметь больше?». Цель одна: остановить. Не любит тепло работающих мышц и шум работающего мозга.
Аватара пользователя
IM1
Грызет канифоль
Сообщения: 268
Зарегистрирован: Вт фев 16, 2010 12:10:38
Откуда: Воронеж, Россия

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

Сообщение IM1 »

avreal , полностью согласен, только писать надо не table, а (table*2), как например здесь viewtopic.php?f=20&t=5931&start=1600
Аватара пользователя
GP1
Поставщик валерьянки для Кота
Сообщения: 2401
Зарегистрирован: Пт май 23, 2008 19:32:22
Откуда: Россия, Волгоград
Контактная информация:

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

Сообщение GP1 »

IM1 писал(а):avreal , полностью согласен, только писать надо не table, а (table*2)

справедливо если table расположено во флеше, а вот если в EEPROMе или RAMе...
Чем дальше, тем больше становлюсь занудой...
Изображение
Аватара пользователя
Jack_A
Друг Кота
Сообщения: 6307
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

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

Сообщение Jack_A »

GP1 писал(а):справедливо если table расположено во флеше, а вот если в EEPROMе или RAMе...


При этом надо учитывать, конечно, что в случае EEPROM это решает только часть проблемы - ставит указатель на нужный адрес, а достучаться до этого адреса все равно только с помощью установленного ритуала, а не просто ld, st.
Интересно, что в очень примитивном МК ST6260 ( от STM ) доступ к EEPROM был намного проще : там было окно, в которое настройкой битов в регистре можно было "высунуть" то ли часть ОЗУ, то ли EEPROM, и можно было адресоваться как к обычному ОЗУ.
Ответить

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