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

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

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

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

Что есть "matrix"?
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
stima
Первый раз сказал Мяу!
Сообщения: 29
Зарегистрирован: Сб ноя 13, 2010 16:16:45

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

Сообщение stima »

Находится сегмента cseg, что и является концом кода

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

matrix:
                 ;     76543210   76543210
      ;      gfedcba    gfedcba
     .db 0b00111111,0b00000110 ;0,1
     .db 0b01011011,0b01001111 ;2,3
     .db 0b01100110,0b01101101 ;4,5
     .db 0b01111101,0b00000111 ;6,7
     .db 0b01111111,0b01101111 ;8,9
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

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

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

stima писал(а):Находится сегмента cseg, что и является концом кода

С чего вы взяли, что в конце кода? :) Вот я что-то не вижу директивы компилятора .ORG, которая явно указывала бы куда засунуть ваш матрикс.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
stima
Первый раз сказал Мяу!
Сообщения: 29
Зарегистрирован: Сб ноя 13, 2010 16:16:45

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

Сообщение stima »

Дириктива вообщето стояла. .org 81, но походу, а может быть я и не прав, я просто перебал эти 81 строк и поэтому была такая бяка. И еще пару вопросов. Как правильно реализуется частота переключения индикаторов (те преславутые 25+Гц). Я понимаю, что по прирыванию таймера, но именно по какому? И второй вопрос как правильно реализовать 1 секунду (делаю секундомер) от внешнего генератора если там прескалинг максимум на таймер 1024, через сравнение с числом (по типу прерывания по компаратору?).
Аватара пользователя
Engineer_Keen
Друг Кота
Сообщения: 3868
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

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

Сообщение Engineer_Keen »

stima писал(а):Дириктива вообщето стояла. .org 81, но походу, а может быть я и не прав, я просто перебал эти 81 строк и поэтому была такая бяка.

Странное число 81 для cseg, ну да ладно... Если директива стояла, а код программы не налез на адрес 81 то все было бы нормально, иначе компилятор бы ругнулся. Кстати что значит "для разных компьютеров"? В чем отличие?
stima писал(а):Как правильно реализуется частота переключения индикаторов (те преславутые 25+Гц). Я понимаю, что по прирыванию таймера, но именно по какому?

Какой захотите, по такому и будет.
stima писал(а):И второй вопрос как правильно реализовать 1 секунду (делаю секундомер) от внешнего генератора если там прескалинг максимум на таймер 1024, через сравнение с числом (по типу прерывания по компаратору?).

Да, подбираете (рассчитываете) число тактов с учетом прескалера и с ним сравниваете.
Civil
Встал на лапы
Сообщения: 138
Зарегистрирован: Вс май 16, 2010 01:13:39

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

Сообщение Civil »

Вот такой код (ниже) дает компилятор. Можно ли его уменьшить?

Inputpin Alias Pind.4
...
While Inputpin = 0 : Wend
----

LDI R26,$30
LDI R27,$00
LD R16,X
BST R16,4
BRTC $0204
RJMP $+0004
RJMP $-000C
Аватара пользователя
Meteor
Друг Кота
Сообщения: 3961
Зарегистрирован: Пн июл 13, 2009 14:37:39
Откуда: Московская область, наукоград.....
Контактная информация:

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

Сообщение Meteor »

Если речь об экономии места, то 2 байта можно превратить в один заменив команду
LDI R27? $00
на
CLR R27.
Больше на ум пока ничего неприходит
Загружая на вход компьютера "мусор", на выходе получим "мусор^32".
PS. Не работаю с: Proteus, Multisim, EWB, Micro-Cap... не спрашивайте даже
Аватара пользователя
avreal
Опытный кот
Сообщения: 842
Зарегистрирован: Чт дек 31, 2009 19:27:45
Откуда: Бровари, Україна
Контактная информация:

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

Сообщение avreal »

Civil писал(а):LDI R26,$30
LDI R27,$00
LD R16,X
BST R16,4
BRTC $0204
RJMP $+0004
RJMP $-000C
Ой, а что это за компилятор такой код даёт???
И адрес $0204 - от какой команды?

Civil писал(а):Inputpin Alias Pind.4
...
While Inputpin = 0 : Wend
Если я правильно понимаю, это эквивалентно С-шному

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

while( (PIND & (1<<4)) == 0 ) ;
и компилируется даже С-компилятором, а не только головой знакомого с ассемблером, в

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

.L2:
   sbis 48-32,4
   rjmp .L2
Т.е. должно было быть что-то в духе

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

    SBIS  $10, 4
    RJMP $-0002
Последний раз редактировалось avreal Пн янв 03, 2011 23:18:51, всего редактировалось 1 раз.
Лень в виде мании величия: «ты гений, зачем стараться?». В виде комплекса: «всё равно не выйдет, зачем упираться?». Как логика: «если достаточно, зачем знать и уметь больше?». Цель одна: остановить. Не любит тепло работающих мышц и шум работающего мозга.
Аватара пользователя
avreal
Опытный кот
Сообщения: 842
Зарегистрирован: Чт дек 31, 2009 19:27:45
Откуда: Бровари, Україна
Контактная информация:

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

Сообщение avreal »

Meteor писал(а):LDI R27? $00
на
CLR R27.

CLR R27 - это псевдоинструкция (встроенный макрос, если хотите), компилирующаяся в EOR R27, R27 и занимает те же два байта, что и LDI R27, 0, только ещё и флаги задевающая.
Однобайтовых команд у AVR нет вообще. Все по два или по четрыре.
Лень в виде мании величия: «ты гений, зачем стараться?». В виде комплекса: «всё равно не выйдет, зачем упираться?». Как логика: «если достаточно, зачем знать и уметь больше?». Цель одна: остановить. Не любит тепло работающих мышц и шум работающего мозга.
Аватара пользователя
DX168B
Друг Кота
Сообщения: 4468
Зарегистрирован: Вс янв 24, 2010 19:19:52
Откуда: Главный Улей России (Moscow)
Контактная информация:

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

Сообщение DX168B »

Верно. Я вот тоже когда-то предполагал, что clr займёт меньше места, пока однажды сам всё не проверил. :)
I am DX168B and this is my favourite forum on internet!
Arlleex
Друг Кота
Сообщения: 4435
Зарегистрирован: Сб мар 07, 2009 20:44:36

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

Сообщение Arlleex »

ну, правильно, как заметил avreal, при выполнении команды clr Rd, компилятор выполняет ее как команду Испключающее или регистра Rd с самим собой.
Не умеешь - не берись, но не взявшись не научишься...
Civil
Встал на лапы
Сообщения: 138
Зарегистрирован: Вс май 16, 2010 01:13:39

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

Сообщение Civil »

avreal, спасибо за помощь.

Это код от Bascom AVR.
Адрес $0204 RJMP $-000C

Я попробовал Ваш код, но компилятор его как-то странно преобразовал:
Изображение

Это значит надо выяснять особенности синтаксиса данного компилятора?
Аватара пользователя
Meteor
Друг Кота
Сообщения: 3961
Зарегистрирован: Пн июл 13, 2009 14:37:39
Откуда: Московская область, наукоград.....
Контактная информация:

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

Сообщение Meteor »

Признаю, стар стал - забываю уже... :cry:
Загружая на вход компьютера "мусор", на выходе получим "мусор^32".
PS. Не работаю с: Proteus, Multisim, EWB, Micro-Cap... не спрашивайте даже
Vovan91
Родился
Сообщения: 8
Зарегистрирован: Ср янв 05, 2011 12:59:13

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

Сообщение Vovan91 »

мне нужен пример на ассемблере для микроконтроллера MEGA128 ну и желательно лист данных на русском.
Аватара пользователя
DX168B
Друг Кота
Сообщения: 4468
Зарегистрирован: Вс янв 24, 2010 19:19:52
Откуда: Главный Улей России (Moscow)
Контактная информация:

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

Сообщение DX168B »

А что именно надо? Мигалка, пищалка, бзделка или другое?
I am DX168B and this is my favourite forum on internet!
Arlleex
Друг Кота
Сообщения: 4435
Зарегистрирован: Сб мар 07, 2009 20:44:36

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

Сообщение Arlleex »

Vovan91 писал(а):мне нужен пример на ассемблере для микроконтроллера MEGA128 ну и желательно лист данных на русском.

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

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

Сообщение avreal »

Civil писал(а):Это значит надо выяснять особенности синтаксиса данного компилятора?
Да :)
Кстати, глядя на это место в его коде, которое даже без SBIC/SBIS можно сократить с

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

    LDI R26,$30
    LDI R27,$00
    LD R16,X
    BST R16,4
    BRTC $0204
    RJMP $+0004
    RJMP $-000C
до

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

    LDI R26,$30
    LDI R27,$00
label:
    LD R16,X
    BST R16,4
    BRTC label
Может пора сказать "ну его" и перейти на С ?
Или это оптимизация начисто выключена?
Лень в виде мании величия: «ты гений, зачем стараться?». В виде комплекса: «всё равно не выйдет, зачем упираться?». Как логика: «если достаточно, зачем знать и уметь больше?». Цель одна: остановить. Не любит тепло работающих мышц и шум работающего мозга.
Vovan91
Родился
Сообщения: 8
Зарегистрирован: Ср янв 05, 2011 12:59:13

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

Сообщение Vovan91 »

мне всё равно какой пример, хотел просто более подробно посмотреть команды имено для этого микроконтроллера. Собираюсь сделать диодную матрицу скажем 16Х16. Меня больше всего волнует часть настройки прерываний имено для MEGA 128. DataSheet сам нашёл на русском, а вот пример найти пока не получилось
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

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

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

Vovan91 писал(а):мне всё равно какой пример, хотел просто более подробно посмотреть команды имено для этого микроконтроллера.

Команды на АСМе общие для всех АВРов. Они приведены в конце даташита. Подробнее - в книге Евстифеева.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
YurkaM
Нашел транзистор. Понюхал.
Сообщения: 151
Зарегистрирован: Пн сен 01, 2008 14:49:03
Откуда: Казахстан

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

Сообщение YurkaM »

avreal писал(а):...даже без SBIC/SBIS можно сократить с

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

    LDI R26,$30
    LDI R27,$00
    LD R16,X
    BST R16,4
    BRTC $0204
    RJMP $+0004
    RJMP $-000C
до

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

    LDI R26,$30
    LDI R27,$00
label:
    LD R16,X
    BST R16,4
    BRTC label
Может пора сказать "ну его" и перейти на С ?
Или это оптимизация начисто выключена?

Более того, это можно ещё сократить до:

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

label:
    LDS R16,$0030
    BST R16,4
    BRTC label
Ответить

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