Ассемблер (ASM) для AVR в вопросах и ответах
- ИС-пытатель
- Вымогатель припоя
- Сообщения: 577
- Зарегистрирован: Ср июн 19, 2013 08:10:48
- Откуда: Москва, СПб, Липецк, Рязань
Re: Ассемблер (ASM) для AVR в вопросах и ответах
А вы прерывания, то разрешили, котенок?
общее которое? Читайте внимательней даташит.. параллельно с Евстифеевым
- Реклама
- Gudd-Head
- Друг Кота
- Сообщения: 20092
- Зарегистрирован: Чт сен 18, 2008 12:27:21
- Откуда: Столица Мира Санкт-Петербург
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Мikа писал(а):SEI я не забыл.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
- ИС-пытатель
- Вымогатель припоя
- Сообщения: 577
- Зарегистрирован: Ср июн 19, 2013 08:10:48
- Откуда: Москва, СПб, Липецк, Рязань
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Флаги сбрасываются записью единицы, если вы об этом.UPD:не сбрасывают в 0 значения в 0x1c. Что-то я с чем-то путаю, походу.Код: Выделить всё
ldi Temp, 0b00000000 STS EIFR, Temp
Код: Выделить всё
ldi Temp, 0b00000011
STS EIFR, TempВ таблице векторов переход на обработчик обозначили, стек проинициализировали, из обработчика по reti вышли?
- ИС-пытатель
- Вымогатель припоя
- Сообщения: 577
- Зарегистрирован: Ср июн 19, 2013 08:10:48
- Откуда: Москва, СПб, Липецк, Рязань
Re: Ассемблер (ASM) для AVR в вопросах и ответах
А вот в контроллерах с большим объемом флеш подобная конструкция уже не прокатывает (естесственно крайний адрес менялся). Студийный компилятор ругается на выход из диапазона. Не хочет через задницу заходить.Engineer_Keen писал(а):Блин, народ, не тупите![]()
Только что на меге8 даже проверилКод: Выделить всё
.org 0 START: RJMP TEST111 TEST222: RJMP PC .org 0x0FFF TEST111:RJMP TEST222
Последний раз редактировалось ИС-пытатель Ср апр 16, 2014 13:47:36, всего редактировалось 1 раз.
- Engineer_Keen
- Друг Кота
- Сообщения: 3872
- Зарегистрирован: Пт янв 29, 2010 10:27:40
- Откуда: Москва
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Да, но там RJMP по-прежнему работает как надо, просто прибавляя или отнимая 2кслова можно попасть в любое место 4ксловной памяти. А в 4килословной (16кб, мега16 например) нельзя, там можно с нулевого адреса попасть на адрес до +0х0800, а вот с 0х0800 уже можно и вверх на еще 0х0800 или вниз на 0х07FF. За этим компилятор следит.
Неправильно собранная из неисправных деталей схема нуждается в отладке и сразу не работает... (С)
- Реклама
-
Alexeyslav
- Друг Кота
- Сообщения: 4550
- Зарегистрирован: Чт май 05, 2011 21:26:34
- Откуда: Украина, Славутич
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Вообще, правило простое - сначала настраиваешь потом разрешаешь. А ты сначала разрешил прерывания а потом настроил периферию. Как она себя при этом проведет - неизвестно. Флаги прерываний сбрасываются записью "1" в соответствующие биты, это написано в даташите если внимательно читать.не работают прерывания на ногах INT0 и INT1.
Все работает, на ATMEGA48 подобный способ инициализации вполне работает. Только сначала надо тронуть EICRA, а затем EIMSK.
- ИС-пытатель
- Вымогатель припоя
- Сообщения: 577
- Зарегистрирован: Ср июн 19, 2013 08:10:48
- Откуда: Москва, СПб, Липецк, Рязань
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Да, компилятор.. Вот и странно, что я не могу как в 8-кБайтной через "обратку" пробежать на 4 кБайта.... Интересно, на уровне железа-то это поддерживается?..... пойду hex файл мучать
- Engineer_Keen
- Друг Кота
- Сообщения: 3872
- Зарегистрирован: Пт янв 29, 2010 10:27:40
- Откуда: Москва
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Не знаю как в железе (думаю что поддерживается), но в симуляторах работает.ИС-пытатель писал(а):Вот и странно, что я не могу как в 8-кБайтной через "обратку" пробежать на 4 кБайта.... Интересно, на уровне железа-то это поддерживается?
Код: Выделить всё
.org 0
.db 0xFD,0xCF ;аналог RJMP на 1 адрес вниз
.org 0x1FFE
.db 0x01,0xC0 ;аналог RJMP на 1 адрес вверх
Надо проверить в железе
Неправильно собранная из неисправных деталей схема нуждается в отладке и сразу не работает... (С)
- Gudd-Head
- Друг Кота
- Сообщения: 20092
- Зарегистрирован: Чт сен 18, 2008 12:27:21
- Откуда: Столица Мира Санкт-Петербург
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Круто. Писать в машинных кодахEngineer_Keen писал(а):Код: Выделить всё
.org 0 .db 0xFD,0xCF ;аналог RJMP на 1 адрес вниз .org 0x1FFE .db 0x01,0xC0 ;аналог RJMP на 1 адрес вверх
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
- ИС-пытатель
- Вымогатель припоя
- Сообщения: 577
- Зарегистрирован: Ср июн 19, 2013 08:10:48
- Откуда: Москва, СПб, Липецк, Рязань
Re: Ассемблер (ASM) для AVR в вопросах и ответах
симулятор в 6-й студии поддерживает, а компилятор - нет.
Работает в железе. Только что проверил. залазит с конца. Я только hex шаманил.. ))
- Engineer_Keen
- Друг Кота
- Сообщения: 3872
- Зарегистрирован: Пт янв 29, 2010 10:27:40
- Откуда: Москва
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Компилятор матерится на RJMP с недопустимым адресом? В 4-той такая же фигня, это защита от дурака
Работает в железе, ну зашибись, значит можно эту хитрость использовать для каких-нибудь хитрых трюков.
Gudd-Head
Жить захочешь - не так раскорячишься
А вообще такой стиль программирования костылей пошел со времен спектрума...
Работает в железе, ну зашибись, значит можно эту хитрость использовать для каких-нибудь хитрых трюков.
Спойлер
ОффтопGudd-Head
Жить захочешь - не так раскорячишься
А вообще такой стиль программирования костылей пошел со времен спектрума...
Неправильно собранная из неисправных деталей схема нуждается в отладке и сразу не работает... (С)
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18561
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
что касается прыжков с переподвыподвертом, то AVR-GCC в полный рост генерирует для МК код, в котором используется прыжок в обратную сторону путем прыжка вперед через границу доступной flash
сказал - сам не понял, что, но надеюсь, все поняли, что я имел ввиду 
протеус 7.2 однозначно сходил с ума от такого кода - писал, что недопустимый адрес команды, тем не менее код был абсолютно рабочий, и студия в своем симуляторе его отлично проглатывала.
протеус 7.2 однозначно сходил с ума от такого кода - писал, что недопустимый адрес команды, тем не менее код был абсолютно рабочий, и студия в своем симуляторе его отлично проглатывала.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- Engineer_Keen
- Друг Кота
- Сообщения: 3872
- Зарегистрирован: Пт янв 29, 2010 10:27:40
- Откуда: Москва
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Значит этот велосипед изобретен до нас, но я в принципе вообще никак не удивлен, раз работает - грех не воспользоваться.
Неправильно собранная из неисправных деталей схема нуждается в отладке и сразу не работает... (С)
- ИС-пытатель
- Вымогатель припоя
- Сообщения: 577
- Зарегистрирован: Ср июн 19, 2013 08:10:48
- Откуда: Москва, СПб, Липецк, Рязань
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Меня одна тема приколола в описании СИшного компилятора IARовского. они там переменные не в ОЗУ запихивают, а в неиспользуемые регистры периферии. Таким образом экономят такты. Интересно придумали.
- Engineer_Keen
- Друг Кота
- Сообщения: 3872
- Зарегистрирован: Пт янв 29, 2010 10:27:40
- Откуда: Москва
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Ну молодцы, я тоже так делаю, особенно удобно для флагов (SBI/CBI гораздо удобнее чем LDS-ORI-STS/LDS-ANDI-STS). Мысля пришла сразу как только я увидел регистры GPIOR у тинек, которые прям специально для этого и нужны.
Неправильно собранная из неисправных деталей схема нуждается в отладке и сразу не работает... (С)
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Не используемую периферию (например UBRR в USART), доступную командам SBIC, SBIS, CBI, SBI использую для флагов условий. Очень удобно. 
- Мikа
- Потрогал лапой паяльник
- Сообщения: 343
- Зарегистрирован: Пн апр 01, 2013 15:13:40
- Откуда: Москва
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Вот это вы понаписали
Изменение порядка разрешения прерываний на ногах INT и их настройка результатов не принесли
По поводу того, что там пишется в по адресу 0xc1, я уже сомневаюсь в правильности своего вопроса 
А сейчас вот что я хотел спросить. Как правильно работать с 2байтным числом?
Я резервирую себе некую переменную
А как в неё правильно записывать?
Как-то так:
Придумываем число 5638
Переводим его в 0001 0110 0000 0110
После этого
Читать также, только использовать 2 регистра под старшую и младшую часть.
Ничего не путаю?
А вот, например, чтобы увеличить или уменьшить число, как быть?
Проверять на 0 старшую часть и если она 0, то отнимать командой
от младшей части.
А если она больше 0, декреминировать старшую часть.
А если надо отнять какое-то фиксированное число?
Как-то делать через команду
Если у кого есть под рукой, можете кинуть примеры вычитаний и сложений, плз? Мне не лень покопаться, я этим, собственно, щас и занимаюсь, но просто времени много уйдёт.
Изменение порядка разрешения прерываний на ногах INT и их настройка результатов не принесли
А сейчас вот что я хотел спросить. Как правильно работать с 2байтным числом?
Я резервирую себе некую переменную
Код: Выделить всё
.dseg
c: .byte 2
Как-то так:
Придумываем число 5638
Переводим его в 0001 0110 0000 0110
После этого
Код: Выделить всё
ldi Temp0, 0b00000110 ;Загрузка в Temp0 младшего байта
STS c, Temp0 Загрузка в первый(младший) байт c Temp0
ldi Temp0, 0b00010110 ;Загрузка в Temp0 старшего байта
STS c+1, Temp0 Загрузка во второй(старший) байт c Temp0
Ничего не путаю?
А вот, например, чтобы увеличить или уменьшить число, как быть?
Проверять на 0 старшую часть и если она 0, то отнимать командой
Код: Выделить всё
dec
А если она больше 0, декреминировать старшую часть.
А если надо отнять какое-то фиксированное число?
Как-то делать через команду
Код: Выделить всё
SBC
Почему я здесь и задаю тупые вопросы?
Потому что хочу научиться.
Потому что хочу научиться.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Для операций со словами есть регистровые пары R25:R24, XH:XL, YH:YL, ZH:ZL. Лучше такие операции проводить командами ADIW R24,x (x=0...63).
Код: Выделить всё
LDI R25,HIGH(5638)
LDI R24,LOW(5638)
STS C+0,R25
STS C+1,R24
;
;
;
LDS R25,C+0
LDS R24,C+1
ADIW R24,1
Последний раз редактировалось akl Ср апр 16, 2014 17:01:53, всего редактировалось 1 раз.
- ИС-пытатель
- Вымогатель припоя
- Сообщения: 577
- Зарегистрирован: Ср июн 19, 2013 08:10:48
- Откуда: Москва, СПб, Липецк, Рязань
Re: Ассемблер (ASM) для AVR в вопросах и ответах
через флаг Carry (C) делаются такие штуки. Или вон, как сказал akl, есть специальные команды ADIW, SBIW....


