Например TDA7294

Форум РадиоКот • Просмотр темы - Ассемблер (ASM) для AVR в вопросах и ответах
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Пн июл 28, 2025 18:26:01

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 7956 ]     ... , , , 71, , , ...  
Автор Сообщение
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Ср фев 16, 2011 12:55:44 
Модератор
Аватар пользователя

Карма: 68
Рейтинг сообщений: 424
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Сообщений: 13490
Откуда: Тамбовская обл.
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
ChipKiller
Да можно, знаю.
Ладно, хватит спорить, чей кун-фу круче :)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Ср фев 16, 2011 13:00:19 
Модератор
Аватар пользователя

Карма: 68
Рейтинг сообщений: 424
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Сообщений: 13490
Откуда: Тамбовская обл.
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Gudd-Head, не видел вашего поста. Теперь мой пост перед вашим:
Цитата:
К примеру использовать еще один регистр - уберутся условные переходы при инвертировании битов, ну и т.д.

Так что я намеренно использовал один регистр. Знал ведь - заклюёте :)))


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Ср фев 16, 2011 13:03:35 
Сверлит текстолит когтями
Аватар пользователя

Карма: 4
Рейтинг сообщений: 30
Зарегистрирован: Ср янв 05, 2011 16:25:15
Сообщений: 1163
Рейтинг сообщения: 0
.. ни каких споров - просто qmix занимается, мягко говоря, ерундой ИМХО.
ChipKiller писал(а):
ЗЫ. Вообще следует различать, когда "выгодно" применять "рассыпуху" и ПЛМ, а когда МК и не путать одно с другим.
даже на "рассыпухе" это легко решаемо и будет работать в 100 раз быстрее, чем на МК, зачем заморачиваться ????


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Ср фев 16, 2011 13:12:24 
Модератор
Аватар пользователя

Карма: 68
Рейтинг сообщений: 424
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Сообщений: 13490
Откуда: Тамбовская обл.
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Согласен, сам ему говорил, что в реальном проекте это бессмысленная затея. Но часто бывает, что человеку нужен просто кусок кода, чтоб натолкнуть на мысль. Если наши куски ему помогут - я только рад буду.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Ср фев 16, 2011 13:23:57 
Родился
Аватар пользователя

Зарегистрирован: Ср фев 16, 2011 09:01:31
Сообщений: 16
Откуда: Туапсе
Рейтинг сообщения: 0
ploop Спасибо большое за код с пояснениями, буду разбираться.
Gudd-Head Тоже спасибо, не оставлю и ваш код без внимания.
ChipKiller Без пол литры с табличным методом мне пока точно не разобраться, но все равно спасибо.
ChipKiller писал(а):
.. ни каких споров - просто qmix занимается, мягко говоря, ерундой ИМХО.
ChipKiller писал(а):
ЗЫ. Вообще следует различать, когда "выгодно" применять "рассыпуху" и ПЛМ, а когда МК и не путать одно с другим.
даже на "рассыпухе" это легко решаемо и будет работать в 100 раз быстрее, чем на МК, зачем заморачиваться ????
Согласен, что ерундой, но для меня смысл не в том, чтобы работало быстро или то, что на рассыпухе это проще. Я просто хочу научится....
ploop Куски еще как помогают.

p.s. Ушел курить инфу про ATF16v8 и WinCupl, и как можно решить эту задачу несколькими строками.
Всем спасибо, вернусь с новыми вопросами.

_________________
matrix has you/


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Ср фев 16, 2011 18:03:20 
Грызет канифоль
Аватар пользователя

Зарегистрирован: Вт фев 16, 2010 12:10:38
Сообщений: 268
Откуда: Воронеж, Россия
Рейтинг сообщения: 0
ChipKiller писал(а):
... тогда простая таблица на 256 значений
Насколько я понимаю, топик стартеру было интересно, чтобы данные лог. функции вычислил сам МК, а не дядя на бумажке с тупой (простите, механической) набивкой в таблицу. Или я что-то не так понял?


Вернуться наверх
 
Распродажа паяльного оборудования ATTEN!
Паяльные станции, паяльники и аксессуары по самой выгодной цене.

По промокоду radiokot скидка 10%
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Ср фев 16, 2011 19:11:47 
Друг Кота
Аватар пользователя

Карма: 67
Рейтинг сообщений: 1060
Зарегистрирован: Чт сен 18, 2008 12:27:21
Сообщений: 19733
Откуда: Столица Мира Санкт-Петербург
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
IM1 писал(а):
Или я что-то не так понял?

Зачем же ограничиваться одним вариантом? Хорошо бы показать все способы.
Ну и поскольку у нас всего 4 входа, то в таблице будет всего 16 значений, которые можно засунуть в два байта (т.к. выход однобитный).

_________________
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Измерить нннада?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Ср фев 16, 2011 19:34:03 
Грызет канифоль
Аватар пользователя

Зарегистрирован: Вт фев 16, 2010 12:10:38
Сообщений: 268
Откуда: Воронеж, Россия
Рейтинг сообщения: 0
Gudd-Head писал(а):
Ну и поскольку у нас всего 4 входа, то в таблице будет всего 16 значений, которые можно засунуть в два байта (т.к. выход однобитный).
Засунуть то можем, а вот рассунуть! Боюсь, что проще сделать нормальную табличку (без идиотских ijmp и ret) с 16 байтами, чем писать миллион условий и сдвигов для упакованного результата. Да и время выполнения получится одинаковое для всех комбинаций, что есть хорошо :) .


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Ср фев 16, 2011 19:48:12 
Друг Кота
Аватар пользователя

Карма: 67
Рейтинг сообщений: 1060
Зарегистрирован: Чт сен 18, 2008 12:27:21
Сообщений: 19733
Откуда: Столица Мира Санкт-Петербург
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
IM1 писал(а):
проще сделать нормальную табличку (без идиотских ijmp и ret) с 16 байтами

А если входов будет... 8? Тогда таблица будет уже 256 байт. А это 12,5% памяти 2313 :)

_________________
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Измерить нннада?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Ср фев 16, 2011 20:21:32 
Грызет канифоль
Аватар пользователя

Зарегистрирован: Вт фев 16, 2010 12:10:38
Сообщений: 268
Откуда: Воронеж, Россия
Рейтинг сообщения: 0
Gudd-Head писал(а):
А если входов будет... 8? Тогда таблица будет уже 256 байт. А это 12,5% памяти 2313 :)
Ну тогда два варианта:
1. если выход 1 бит, однозначно мудрить, все таки уменьшение занятости памяти в 8 раз 256/8=32 (12,5/8=1,56%)
2. если выход >1 бит, то думать, а если байт, то однозначно 256 к исполнению.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Чт фев 17, 2011 08:36:48 
Родился
Аватар пользователя

Зарегистрирован: Ср фев 16, 2011 09:01:31
Сообщений: 16
Откуда: Туапсе
Рейтинг сообщения: 0
Кажись начинаю догонять, что такое табличный метод.. Это значит задаем массивом все возможные состояния входа, в процессе, сравнивается имеющееся значение с заданной таблицей, и в соответствии с ней выводится результат. Поправьте если неправильно.

_________________
matrix has you/


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Чт фев 17, 2011 09:48:58 
Друг Кота
Аватар пользователя

Карма: 67
Рейтинг сообщений: 1060
Зарегистрирован: Чт сен 18, 2008 12:27:21
Сообщений: 19733
Откуда: Столица Мира Санкт-Петербург
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
qmix писал(а):
в процессе, сравнивается имеющееся значение с заданной таблицей, и в соответствии с ней выводится результат. Поправьте если неправильно.

Не сравнивается, а так или иначе состояние входа указывает на адрес в таблице, где хранится результат.

_________________
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Измерить нннада?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Чт фев 17, 2011 12:25:53 
Сверлит текстолит когтями
Аватар пользователя

Зарегистрирован: Сб июл 11, 2009 18:42:21
Сообщений: 1135
Откуда: Украина, г.Николаев
Рейтинг сообщения: 0
qmix
Нагуглите что значит косвенная адресация и всё станет ясно :)

_________________
Успех - императив!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Чт фев 17, 2011 21:07:01 
Грызет канифоль
Аватар пользователя

Зарегистрирован: Вт фев 16, 2010 12:10:38
Сообщений: 268
Откуда: Воронеж, Россия
Рейтинг сообщения: 0
qmix писал(а):
Кажись начинаю догонять, что такое табличный метод..
Вот Вам кусочек кода на примере знакогенератора, все очень просто.
Код:
;*********конвертация данных************
; вход in_dat, выход out_dat
conv:
ldi    zh,high(tab1*2)
ldi    zl,low(tab1*2)
add    zl, in_dat
brcc   conv1
inc    zh
conv1:
lpm    out_dat, z
ret
;*******end конвертация данных***********

; таблица кодировки символов
tab1:
.db 0xfc, 0x60, 0xda, 0xf2, 0x66, 0xb6, 0xbe, 0xe0 ; 0-7
.db 0xfe, 0xf6, 0xee, 0x3e, 0x9c, 0x7a, 0x9e, 0x8e ; 8-f
Во входном байте in_dat содержится номер байта таблицы (от 0 до 15 в данном случае), а уж в саму таблицу пишете то, что Вам необходимо. В данном примере используется регистр косвенной адресации z=r31:r30, который совместно с командой lpm позволяет загружать данные из программной памяти.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Чт фев 17, 2011 22:00:46 
Модератор
Аватар пользователя

Карма: 68
Рейтинг сообщений: 424
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Сообщений: 13490
Откуда: Тамбовская обл.
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Хм... Интересный вариант сложения двухбайтного числа с однобайтным. Я обычно делаю так:
Код:
ldi temp,0
ldi ZH,High(tab1*2)
ldi ZL,Low(tab1*2) 
add ZL,in_dat
adc ZH,temp               
lpm out_dat,Z


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Чт фев 17, 2011 23:44:49 
Опытный кот
Аватар пользователя

Карма: 7
Рейтинг сообщений: 52
Зарегистрирован: Чт дек 31, 2009 19:27:45
Сообщений: 842
Откуда: Бровари, Україна
Рейтинг сообщения: 0
А я - так:
Код:
        mov     ZL, in_dat
        clr     ZH
        subi    ZL, Low( -(tab1*2) )
        sbci    ZH, High( -(tab1*2) )
        lpm     out_dat, Z

_________________
Лень в виде мании величия: «ты гений, зачем стараться?». В виде комплекса: «всё равно не выйдет, зачем упираться?». Как логика: «если достаточно, зачем знать и уметь больше?». Цель одна: остановить. Не любит тепло работающих мышц и шум работающего мозга.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Чт фев 17, 2011 23:49:25 
Друг Кота
Аватар пользователя

Карма: 25
Рейтинг сообщений: 99
Зарегистрирован: Вс янв 24, 2010 19:19:52
Сообщений: 4468
Откуда: Главный Улей России (Moscow)
Рейтинг сообщения: 0
Парсер для конверсии кодировки ASCII в формат для дисплея:
Код:
PARSER:
ldi            ZH,            High(SYMBOLS_CYR_TABLE*2)
ldi            ZL,            Low(SYMBOLS_CYR_TABLE*2)
;----------
cpi            temp0,         'А'
breq         RET_1
adiw         Z,            5
cpi            temp0,         'Б'
breq         RET_1
adiw         Z,            5
cpi            temp0,         'В'
breq         RET_1
adiw         Z,            5
cpi            temp0,         'Г'
breq         RET_1
adiw         Z,            5
cpi            temp0,         'Д'
breq         RET_1
adiw         Z,            5
..................
.........
RET_1: ret
;----------
;Таблица символов. Расположение символов в массиве должно совпадать с порядком поиска символов в парсере!
SYMBOLS_CYR_TABLE:
.db 0x83, 0xF5, 0xF6, 0xF6, 0x80, /*А*/ 0x80, 0xB6, 0xB6, 0xB6, 0xCE  // Б
.db 0x80, 0xB6, 0xB6, 0xB1, 0xCF, /*В*/ 0x80, 0xFE, 0xFE, 0xFE, 0xFE  // Г
.db 0xBF, 0x83, 0xBD, 0x80, 0xBF, /*Д*/ 0x80, 0xB6, 0xB6, 0xB6, 0xBE  // Е
.db 0x8C, 0xF3, 0x80, 0xF3, 0x8C, /*Ж*/ 0xDD, 0xBE, 0xB6, 0xB6, 0xC9  // З
.db 0x80, 0xDF, 0xEF, 0xF7, 0x80, /*И*/ 0x80, 0xF7, 0xEB, 0xDD, 0xBE  // К
.db 0x83, 0xFD, 0xFE, 0xFE, 0x80, /*Л*/ 0x80, 0xFD, 0xFB, 0xFD, 0x80  // М
.db 0x80, 0xF7, 0xF7, 0xF7, 0x80, /*Н*/ 0xC1, 0xBE, 0xBE, 0xBE, 0xC1  // О
.db 0x80, 0xFE, 0xFE, 0xFE, 0x80, /*П*/ 0x80, 0xF6, 0xF6, 0xF6, 0xF9  // Р
.db 0xC1, 0xBE, 0xBE, 0xBE, 0xDD, /*С*/ 0xFE, 0xFE, 0x80, 0xFE, 0xFE  // Т
.db 0xD8, 0xB7, 0xB7, 0xB7, 0xC0, /*У*/ 0xF9, 0xF6, 0x80, 0xF6, 0xF9  // Ф
.db 0x9C, 0xEB, 0xF7, 0xEB, 0x9C, /*Х*/ 0x80, 0xBF, 0xBF, 0x80, 0xBF  // Ц
.db 0xF8, 0xF7, 0xF7, 0xF7, 0x80, /*Ч*/ 0x80, 0xBF, 0x80, 0xBF, 0x80  // Ш
.db 0xC0, 0xDF, 0xC0, 0xDF, 0x80, /*Щ*/ 0xFE, 0x80, 0xB7, 0xB7, 0xCF  // Ъ
.db 0x80, 0xB7, 0xCF, 0xFF, 0x80, /*Ы*/ 0x80, 0xB7, 0xB7, 0xB7, 0xCF  // Ь
.db 0xDD, 0xBE, 0xB6, 0xB6, 0xC1, /*Э*/ 0x80, 0xF7, 0xC1, 0xBE, 0xC1  // Ю
.db 0xB9, 0xD6, 0xE6, 0xF6, 0x80, /*Я*/ 0xFF, 0xBD, 0x80, 0xBF, 0xFF  // 1
.db 0xBD, 0x9E, 0xAE, 0xB6, 0x99, /*2*/ 0xDF, 0xBD, 0xBE, 0xB6, 0xC9  // 3
.db 0xE7, 0xEB, 0xED, 0x80, 0xEF, /*4*/ 0xB0, 0xBA, 0xBA, 0xBA, 0xC6  // 5
.db 0xC1, 0xB6, 0xB6, 0xB6, 0xCD, /*6*/ 0x9C, 0xEE, 0xF6, 0xFA, 0xFC  // 7
.db 0xC9, 0xB6, 0xB6, 0xB6, 0xC9, /*8*/ 0xD9, 0xB6, 0xB6, 0xB6, 0xC1  // 9
.db 0xC1, 0x9E, 0xA2, 0xBC, 0xC1, /*0*/ 0xFF, 0xFF, 0xA0, 0xFF, 0xFF  // !
.db 0xFF, 0xBF, 0xFF, 0xFF, 0xFF, /*.*/ 0xBF, 0xDF, 0xFF, 0xFF, 0xFF  // ,
.db 0xFD, 0xFE, 0xAE, 0xF6, 0xF9, /*?*/ 0x9F, 0xEF, 0xF7, 0xFB, 0xFC  // /
.db 0xBE, 0xDD, 0xE3, 0xFF, 0xFF, /*)*/ 0xFF, 0xFF, 0xE3, 0xDD, 0xBE  // (
.db 0xFF, 0xFC, 0xFF, 0xFC, 0xFF, /*"*/ 0xFF, 0xFF, 0xFC, 0xFF, 0xFF  // '
.db 0xFF, 0xFF, 0xDB, 0xFF, 0xFF, /*:*/ 0xFF, 0xBF, 0xDB, 0xFF, 0xFF  // ;
.db 0xED, 0xF3, 0xC0, 0xF3, 0xED, /***/ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF  //  пробел


Если есть метод попроще, то можете подсказать.

Табличный вызов подпрограмм:
Код:
LOOP:
ldi   r16,   0x0X ;(0-3)
ldi           ZL,               Low(HANDLERS*2)
ldi           ZH,               High(HANDLERS*2)
lsl           r16
clr           r17
add           ZL,               r16
adc           ZH,               r17
lpm           r16,              Z
adiw          Z,                0x01
lpm           r17,              Z
mov           ZL,               r16
mov           ZH,               r17
icall
rjmp          LOOP
;----------
PRG0:
;Отрабатывается при r16=0x00
ret
;----------
PRG1:
;Отрабатывается при r16=0x01
ret
;----------
PRG2:
;отрабатывается при r16=0x02
ret
;----------
PRG3:
;Отрабатывается при r16=0x03
ret
;----------
HANDLERS:
.dw PRG0, PRG1, PRG2, PRG3

_________________
I am DX168B and this is my favourite forum on internet!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Чт фев 17, 2011 23:52:00 
Грызет канифоль
Аватар пользователя

Зарегистрирован: Вт фев 16, 2010 12:10:38
Сообщений: 268
Откуда: Воронеж, Россия
Рейтинг сообщения: 0
ploop писал(а):
Хм... Интересный вариант сложения двухбайтного числа с однобайтным. Я обычно делаю так:
Код:
ldi temp,0
ldi ZH,High(tab1*2)
ldi ZL,Low(tab1*2) 
add ZL,in_dat
adc ZH,temp               
lpm out_dat,Z
Можно и так, но не всегда имеется лишний регистр, где можно хранить 0. Можно еще вот так:
Код:
ldi ZH,High(tab1*2)
ldi ZL,Low(tab1*2)
add ZL,in_dat
clr in_dat
adc ZH,in_dat               
lpm out_dat,Z
Один фиг, длина кода такая же.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Пт фев 18, 2011 00:00:33 
Грызет канифоль
Аватар пользователя

Зарегистрирован: Вт фев 16, 2010 12:10:38
Сообщений: 268
Откуда: Воронеж, Россия
Рейтинг сообщения: 0
avreal писал(а):
А я - так:
Код:
        mov     ZL, in_dat
        clr     ZH
        subi    ZL, Low( -(tab1*2) )
        sbci    ZH, High( -(tab1*2) )
        lpm     out_dat, Z
Класс :beer: !
Беру на вооружение :kill: .


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Пт фев 18, 2011 00:02:53 
Друг Кота
Аватар пользователя

Карма: 25
Рейтинг сообщений: 99
Зарегистрирован: Вс янв 24, 2010 19:19:52
Сообщений: 4468
Откуда: Главный Улей России (Moscow)
Рейтинг сообщения: 0
avreal писал(а):
А я - так:
Код:
        mov     ZL, in_dat
        clr     ZH
        subi    ZL, Low( -(tab1*2) )
        sbci    ZH, High( -(tab1*2) )
        lpm     out_dat, Z

А чё, неплохо. :) Принимается в копилку.... :beer:

_________________
I am DX168B and this is my favourite forum on internet!


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 7956 ]     ... , , , 71, , , ...  

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 44


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y