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

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
Ярослав555
Поставщик валерьянки для Кота
Сообщения: 2081
Зарегистрирован: Пт май 31, 2013 17:14:38
Откуда: Украина, Винница

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

Сообщение Ярослав555 »

а если уменьшить количество условий: всегда прибавлять, только прибавлять переменную - сначала в ней 1, когда дошли до верха в неё впишем -1 (0xFF), когда спустились обратно до 0 вписали в неё снова 1, так он и будет качаться...

к юинту прибавить инт? я на асме ни строчки не написал, но боюсь что это нифига не просто.
Аватара пользователя
Ivanoff-iv
Друг Кота
Сообщения: 7077
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Откуда: Сердце Пармы

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

Сообщение Ivanoff-iv »

наверно ту тему уже порешили... я про ШИМ писал, который до 255 умеет и которому надо 0-255-0...и.т.д. , тоесть байт с байтом сложить (вычесть - некритично). если переменная в регистре - ничего сложного, если в оперативе - ну сначала вытащить придётся.
Для тех, кто не учил магию мир полон физики :)
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

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

Сообщение Alexeyslav »

Контроллер никак не различает знаковые и беззнаковые числа он с ними работает абсолютно одинаково. Разница только в том как интерпретируется результат, и для знаковых чисел есть специфические команды. Кроме того, из-за нехватки опкодов в системе команд отсутствует команда сложения с константой, вместо неё используют команда вычитания(SUBI/SBCI) с константой являющейся дополнительным кодом к слагаемому. В ЯВУ эти все особенности скрыты за 7-ю печатями.
akl
Друг Кота
Сообщения: 4444
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

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

Сообщение akl »

...А вот та же программа, что и выше, только теперь наш флаг хранится в GPIOR...Объем этого кусочка кода эквивалентен предыдущему варианту
На практике все работает)
В качестве пятничной развлекухи, код работающий только по переполнению таймера. Счетчик работает в режиме качания.
Спойлер

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

;04.05.2018

.include "tn2313def.inc"

.def   count   =R17

.cseg
.org   0x00

   rjmp   init

.org   0x06
   RETI   ;(0х06) Переполнение таймера/счетчика Т0

INIT:
   ldi   R22,RAMEND
   out   SPL,R22

   SBI   ACSR,ACD

   SER   ZH

   out   DDRB,ZH            ;порты на выход 0
   out   DDRD,ZH
   OUT   DDRA,ZH

   LDI   R22,1<<SE
   OUT   MCUCR,R22      ; SLEEP IDLE

;НАСТРОЙКА ТАЙМЕРА/СЧЕТЧИКА Т0
   ldi   count,0x01            ;Задаем начальное значение
   out   OCR0A,count
   out   OCR0B,count

   ldi   R22,(1<<COM0A1 | 0<<COM0A0 | 1<<COM0B1 | 1<<COM0B0 | 1<<WGM00)
   out   TCCR0A,R22            ;Выводы изм. сост. инверсным способом
     
   ldi   R22,1<<CS00 ;1<<CS02 1/256 (в работе делитель такой, в отладке 1/1)
   out   TCCR0B,R22
     
   ldi   R22,1<<TOIE0
;   ldi      temp,1<<OCIE0A ;| 0<<TOIE0  | 1<<OCIE0A)
   out   TIMSK,R22
   out   TIFR,R22

   sei
MAIN:
   SLEEP

   LDI   R23,1      ;суммирование счетчика
   SBIC   PIND,6   ;признак вычитание/суммирование
   LDI   R23,-1      ;вычитание счетчика

   ADD   count,R23
   BRNE   TTT
   SBI   PIND,6      ;переключить признак
   SUB   count,R23   ;вернуть счетчик в диапазон
TTT:
   OUT   OCR0A,count
   OUT   OCR0B,count

   rjmp   MAIN
;*************************************************
.exit
dumbass
Встал на лапы
Сообщения: 89
Зарегистрирован: Вт мар 31, 2015 01:12:46

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

Сообщение dumbass »

Интересные у Вас пятничные развлечения))
Несколько вопросов по коду (если можно, ответьте по пунктам пожалуйста):
1 Вы отключили аналоговый компаратор, полагаю для экономии энергии в спящем режиме, так ли это?
Насколько важно перед отключением аналогового компаратора сделать такие действия: «Для выключения компаратора бит ACD следует установить в 1. Перед изменением состояния этого бита прерывание от компаратора следует запретить во избежание случайной генерации прерывания.»?
2 out TIFR,R22 – эта строка сбрасывает флаг прерыв. по переполнению Т0. Для чего это необходимо делать, если таймер явно не успеет переполнится?
Далее все понятно, логика работы интересная. Спасибо, очень познавательно!
akl
Друг Кота
Сообщения: 4444
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

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

Сообщение akl »

У меня это типовая инициализация состояния контроллера. Как правило, периодически, после выполнения какого-то цикла программа возвращается в начало, подтверждая инициализацию.
-1 Если компаратор не используется, логично его отключить, чтобы он всегда не потреблял свой ~1мА.
-2 TOV0 может срабатывать не только по переполнению, а ещё и в зависимости от режима работы. Например, установив режим WGM2...0=1, флаг устанавливается при TCNT0=0.
dumbass
Встал на лапы
Сообщения: 89
Зарегистрирован: Вт мар 31, 2015 01:12:46

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

Сообщение dumbass »

Всем доброго времени суток!
Есть интересный вопрос по сторожевому таймеру (далее ст.т.)
Какую частоту имеет сторожевой таймер в режиме отладки в АВР_Студии 4.19?
Из моих наблюдений: ст.т. настроен на период тайм-аута -- 64мс. В режиме отладки программа показала 524,29мс. Тогда,
период одного такта = 524,29/8192(колв тактов, указано в справочнике)=0,064мс
Частота работы ст.т. = 1/0,064мс=15619Гц
При настройки ст.т. на 16мс частота почти такая же.
Что скажите по этому поводу?
Спасибо!
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

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

Сообщение ARV »

мои сведения о студии остались на уровне версии 4.18, а эта версия некорректно симулирует WDT, об этом написано в хелпе. Протеус в этом плане лучше.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Feruz
Открыл глаза
Сообщения: 55
Зарегистрирован: Вс май 03, 2015 15:05:58

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

Сообщение Feruz »

Кто-нибудь в курсе почему при генерации .lst файла (студия 4.19) исходник съезжает на одну строку вниз относительно расставленных адресов команд?
Все это время "до" ругался на протеус - мол это он компанует исходник со сдвигом. Потом заметил что это таки студия корень проблемы.
Исследуя вопрос заметил что встречающийся в коде макрос, исправляет ситуацию.
Баг AVRASM2?
Вложения
lst.JPG
(83.98 КБ) 544 скачивания
mac.JPG
(64.31 КБ) 407 скачиваний
akl
Друг Кота
Сообщения: 4444
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

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

Сообщение akl »

Валить на студию 4.19 build 730 пока рано. Пример для ATmega8 как его видит редактор FAR
Спойлер

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

                    .CSEG
                 
                    .ORG   $00
                 RESET:
000000 27ff         CLR   ZH
000001 bffe         OUT   SPH,ZH
000002 ef4f         SER   R20
000003 bf4d         OUT   SPL,R20
                 
000004 c00d         RJMP   GO
                 
                    .ORG   $0009
                 TIM0_OVF: ; Timer0 Overflow Handler
000009 5071         SUBI   R23,1
00000a 4060         SBCI   R22,0
00000b f409         BRNE   PC+2
00000c 98c4         CBI      PORTB,4
00000d 5031         SUBI   R19,1
00000e 4020         SBCI   R18,0
00000f f409         BRNE   TIM0_OUT
                 ;   SET
000010 9508         RET
                 TIM0_OUT:
000011 9518         RETI
                 ;***************************************************************************
                 GO:
000012 ef07         LDI   R16,0b11110111
000013 bb07         OUT   DDRB,R16
                    
000014 9ac3         SBI   PORTB,3   ; кнопки
                 
000015 bff3         OUT   TCCR0,ZH
000016 bff2         OUT   TCNT0,ZH
                 
                 WAIT_KEY:
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15541
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

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

Сообщение BOB51 »

...
Ну и просмотр ессно или в самой АВРстудио (открываем соответствующий файл, появившийся в папке output после компиляции в окне проекта) или в нормальном редакторе.
:wink:

кстати....
Такой "снос" за все время работы с разными компиляторами НИКОГДА НЕ НАБЛЮДАЛ.
8)
Feruz
Открыл глаза
Сообщения: 55
Зарегистрирован: Вс май 03, 2015 15:05:58

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

Сообщение Feruz »

Предыдущие скрины были из Notepad++
Привожу скрин из самой студии сразу после компиляции.
А у меня за много лет работы такой "снос" возникал не единожды, как на работе (вин 7) так и на домашнем ПК (вин 10). Причем зачастую происходит так: я создаю проект, постепенно наполняю его кодом и все идет нормально. Но в какой-то момент происходит "сдвиг", и что характерно - если из такого проекта удалить практически все оставив только таблицу векторов прерываний и инициализацию стека "сдвиг" все равно остается.
Вложения
studio.JPG
(123.33 КБ) 564 скачивания
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15541
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

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

Сообщение BOB51 »

Открой и скомпилируй для пробы вот этот тест - проектик
extdi_2313.zip
(49.79 КБ) 205 скачиваний

да поглядямс чего будет (ибо ни семерки ни десятки в наличии нету).
8)
Feruz
Открыл глаза
Сообщения: 55
Зарегистрирован: Вс май 03, 2015 15:05:58

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

Сообщение Feruz »

Проверил на работе, компиляция без ошибок, "сдвига" нет
Вечером проверю на домашнем компе.

Закралась мысль, а что если проблема в стилях комментариев? Я вижу у Вас используется классика ";", в то время как я использую сишную нотацию "//" или блоками "/* */".
Demiurg
Это не хвост, это антенна
Сообщения: 1480
Зарегистрирован: Ср июн 25, 2008 15:19:44
Контактная информация:

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

Сообщение Demiurg »

.org 0 в твоем случае бессмыслен.
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15541
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

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

Сообщение BOB51 »

avrasm2 допускает Сишную нотацию.
НО нужно указать в проекте, что используется именно он -
projekt -> assembler option -> version2
:roll:
Feruz
Открыл глаза
Сообщения: 55
Зарегистрирован: Вс май 03, 2015 15:05:58

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

Сообщение Feruz »

Открой и скомпилируй для пробы вот этот тест - проектик
extdi_2313.zip

да поглядямс чего будет (ибо ни семерки ни десятки в наличии нету).
8)


Дома проверил, тоже все нормально.
Опция "Version 2" включена.

Начал искать проблему методом исключения, удаляя участки кода и проверяя не пропал ли "сдвиг".
Оказалось что проблема была в длинном (325 символов) комментарии записанном в одну строку :shock:
Вот вам, блин, и недостаток монитора 27' - можно писать ооочень длиинные комментарии :facepalm: сижу ржу :))

Экспериментально установил что макс длина строки 264 символа. В хелпе бегло не нашел информации по ограничению.
Благодарю всех принявших участие, в особенности BOB51. :write:
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15541
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

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

Сообщение BOB51 »

При написания исходника (с возможностью последующей распечатки) нужно всегда ограничиваться форматом стандартного листа.
Обычно это сразу заметно по "уходу за границы разметки" окна текущего текстового редактора.
Автоперенос в ассемблере уже есть косвенный показатель некорректности длины строки.
Потому и превышение длины строки да еще под ассемблером это штука РЕДЧАЙШАЯ.
Как внешний редактор весьма удобно использовать DPAD (однако это лично мои предпочтения).
Жаль только, что на сегодня этот проект закрыт...
Кому интересно будет - могу через почтовик скинуть (там порядка 5 мегабайт с инсталятором и портабле вариантами).
8)
dumbass
Встал на лапы
Сообщения: 89
Зарегистрирован: Вт мар 31, 2015 01:12:46

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

Сообщение dumbass »

Добрый день!
Как правильно настроить вывод ICP МК (тн2313), если в МК-ре т/с Т1 настроен в режиме захвата?
В книге написано что на вход. А с подключенным подтягивающем резистором или вывод должен "висеть в воздухе"?
По-идее разницы быть не должно...да и на практике, вроде бы, ничего не изменилось. Но все же как правильно?
Спасибо!
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15541
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

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

Сообщение BOB51 »

Определяется текущей внешней схемотехникой формирования импульса для данного вывода.
8)
Ответить

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