Ассемблер (ASM) для AVR в вопросах и ответах
- Gudd-Head
- Друг Кота
- Сообщения: 20092
- Зарегистрирован: Чт сен 18, 2008 12:27:21
- Откуда: Столица Мира Санкт-Петербург
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Что есть "matrix"?
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Находится сегмента 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 в вопросах и ответах
stima писал(а):Находится сегмента cseg, что и является концом кода
С чего вы взяли, что в конце кода?
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Дириктива вообщето стояла. .org 81, но походу, а может быть я и не прав, я просто перебал эти 81 строк и поэтому была такая бяка. И еще пару вопросов. Как правильно реализуется частота переключения индикаторов (те преславутые 25+Гц). Я понимаю, что по прирыванию таймера, но именно по какому? И второй вопрос как правильно реализовать 1 секунду (делаю секундомер) от внешнего генератора если там прескалинг максимум на таймер 1024, через сравнение с числом (по типу прерывания по компаратору?).
- Engineer_Keen
- Друг Кота
- Сообщения: 3868
- Зарегистрирован: Пт янв 29, 2010 10:27:40
- Откуда: Москва
Re: Ассемблер (ASM) для AVR в вопросах и ответах
stima писал(а):Дириктива вообщето стояла. .org 81, но походу, а может быть я и не прав, я просто перебал эти 81 строк и поэтому была такая бяка.
Странное число 81 для cseg, ну да ладно... Если директива стояла, а код программы не налез на адрес 81 то все было бы нормально, иначе компилятор бы ругнулся. Кстати что значит "для разных компьютеров"? В чем отличие?
stima писал(а):Как правильно реализуется частота переключения индикаторов (те преславутые 25+Гц). Я понимаю, что по прирыванию таймера, но именно по какому?
Какой захотите, по такому и будет.
stima писал(а):И второй вопрос как правильно реализовать 1 секунду (делаю секундомер) от внешнего генератора если там прескалинг максимум на таймер 1024, через сравнение с числом (по типу прерывания по компаратору?).
Да, подбираете (рассчитываете) число тактов с учетом прескалера и с ним сравниваете.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Вот такой код (ниже) дает компилятор. Можно ли его уменьшить?
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
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 в вопросах и ответах
Если речь об экономии места, то 2 байта можно превратить в один заменив команду
LDI R27? $00
на
CLR R27.
Больше на ум пока ничего неприходит
LDI R27? $00
на
CLR R27.
Больше на ум пока ничего неприходит
Загружая на вход компьютера "мусор", на выходе получим "мусор^32".
PS. Не работаю с: Proteus, Multisim, EWB, Micro-Cap... не спрашивайте даже
PS. Не работаю с: Proteus, Multisim, EWB, Micro-Cap... не спрашивайте даже
- avreal
- Опытный кот
- Сообщения: 842
- Зарегистрирован: Чт дек 31, 2009 19:27:45
- Откуда: Бровари, Україна
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Ой, а что это за компилятор такой код даёт???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 в вопросах и ответах
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 в вопросах и ответах
Верно. Я вот тоже когда-то предполагал, что clr займёт меньше места, пока однажды сам всё не проверил. 
I am DX168B and this is my favourite forum on internet!
Re: Ассемблер (ASM) для AVR в вопросах и ответах
ну, правильно, как заметил avreal, при выполнении команды clr Rd, компилятор выполняет ее как команду Испключающее или регистра Rd с самим собой.
Не умеешь - не берись, но не взявшись не научишься...
Re: Ассемблер (ASM) для AVR в вопросах и ответах
avreal, спасибо за помощь.
Это код от Bascom AVR.
Адрес $0204 RJMP $-000C
Я попробовал Ваш код, но компилятор его как-то странно преобразовал:

Это значит надо выяснять особенности синтаксиса данного компилятора?
Это код от Bascom AVR.
Адрес $0204 RJMP $-000C
Я попробовал Ваш код, но компилятор его как-то странно преобразовал:

Это значит надо выяснять особенности синтаксиса данного компилятора?
- Meteor
- Друг Кота
- Сообщения: 3961
- Зарегистрирован: Пн июл 13, 2009 14:37:39
- Откуда: Московская область, наукоград.....
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Признаю, стар стал - забываю уже... 
Загружая на вход компьютера "мусор", на выходе получим "мусор^32".
PS. Не работаю с: Proteus, Multisim, EWB, Micro-Cap... не спрашивайте даже
PS. Не работаю с: Proteus, Multisim, EWB, Micro-Cap... не спрашивайте даже
Re: Ассемблер (ASM) для AVR в вопросах и ответах
мне нужен пример на ассемблере для микроконтроллера MEGA128 ну и желательно лист данных на русском.
- DX168B
- Друг Кота
- Сообщения: 4468
- Зарегистрирован: Вс янв 24, 2010 19:19:52
- Откуда: Главный Улей России (Moscow)
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
А что именно надо? Мигалка, пищалка, бзделка или другое?
I am DX168B and this is my favourite forum on internet!
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Vovan91 писал(а):мне нужен пример на ассемблере для микроконтроллера MEGA128 ну и желательно лист данных на русском.
ага, а больше ничего???
Не умеешь - не берись, но не взявшись не научишься...
- avreal
- Опытный кот
- Сообщения: 842
- Зарегистрирован: Чт дек 31, 2009 19:27:45
- Откуда: Бровари, Україна
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Да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Или это оптимизация начисто выключена?
Лень в виде мании величия: «ты гений, зачем стараться?». В виде комплекса: «всё равно не выйдет, зачем упираться?». Как логика: «если достаточно, зачем знать и уметь больше?». Цель одна: остановить. Не любит тепло работающих мышц и шум работающего мозга.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
мне всё равно какой пример, хотел просто более подробно посмотреть команды имено для этого микроконтроллера. Собираюсь сделать диодную матрицу скажем 16Х16. Меня больше всего волнует часть настройки прерываний имено для MEGA 128. DataSheet сам нашёл на русском, а вот пример найти пока не получилось
- Gudd-Head
- Друг Кота
- Сообщения: 20092
- Зарегистрирован: Чт сен 18, 2008 12:27:21
- Откуда: Столица Мира Санкт-Петербург
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Vovan91 писал(а):мне всё равно какой пример, хотел просто более подробно посмотреть команды имено для этого микроконтроллера.
Команды на АСМе общие для всех АВРов. Они приведены в конце даташита. Подробнее - в книге Евстифеева.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
-
YurkaM
- Нашел транзистор. Понюхал.
- Сообщения: 151
- Зарегистрирован: Пн сен 01, 2008 14:49:03
- Откуда: Казахстан
Re: Ассемблер (ASM) для AVR в вопросах и ответах
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