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

Обсуждаем контроллеры компании Atmel.
akl
Друг Кота
Сообщения: 4444
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

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

Сообщение akl »

[uquote="Vaha",url="/forum/viewtopic.php?p=3472988#p3472988"]Здравствуете.
У кого установлена AVR Studio версии 4.19 и ниже, уделите минут пять, погоняйте код (приложеный)
Таймер/счетчик-1 запрограммирован "Fast PWM" 8-бит. При отладке в AVR Studio (пробовал версии 4, 4.13, 4.18, 4.19) Т/С-1 ведет себя как "Phase correct PWM" (TCNT - счетный регистр должен при "Fast PWM" от "0" досчитать до "FF", выставить флаг переполнения, сброситься в "0" и опять до "FF"... , у меня при отладке "TCNT" от "0" считает до "FF", после от "FF" считает до "0", выставляет флаг переполнения и т.д. ...?). Если и у Вас так-же - наверно глюк студии, если нет - буду копать дальше - переустанавливать винду и т.д.[/uquote]
Включите simulator 2 https://radiokot.ru/forum/viewtopic.php ... 6#p3468756
Изображение

Добавлено after 1 hour 2 minutes 43 seconds:
T-флаг замечателен тем, что его обслуживают целый набор команд. В вышеприведенных макросах выделен регистр, хотя в данном случае проще, по мне, сразу писать
Спойлер

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

;Регистр FLAGS объявляется в старшей части регистрового файла R16...R31 для доступности команд SBR CBR
;..............
;..............
 BRNE   PC+2
 SBR   FLAGS,1<<BIT0_FLAG
 RETI

;..............
;..............
;..............
;..............
 CLR   FLAGS
 SEI
WAIT_FLAG:
 SLEEP
 SBRC  FLAGS, BIT0_FLAG
 RCALL   GO_FLAG0
 SBRC  FLAGS, BIT1_FLAG
 RCALL   GO_FLAG1
 SBRC  FLAGS, BIT2_FLAG
 RCALL   GO_FLAG2
; итд
 RJMP   WAIT_FLAG
GO_FLAG0:
;обработка флага 0
 CBR   FLAGS,1<<BIT0_FLAG
 RET

Вариант использования T-флага
Спойлер

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

;...............
;...............

 BRNE   PC+2
 SET
 RETI
;...............
;...............

SET_ISR_T:
 CLT
 SEI
WAIT_T:
 SLEEP
 BRTC WAIT_T
; обработка события
 CLT
 RJMP   SET_ISR_T
Вложения
simulator2.png
(65.48 КБ) 842 скачивания
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

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

Сообщение Alexeyslav »

Можно и сразу его задействовать, но обычно нужен не один флаг, а Т он один на весь контроллер. Если вдруг где-то добавишь код который его использует и туши свет - будешь долго искать причину непонятных сбоев.
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15546
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

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

Сообщение BOB51 »

Как альтернатива "наложений" - делаем обязательный "быстрый стек" для SREG в регистровом файле.
push shadow
in shadow,sreg = push sreg
.........
out sreg,shadow
pop shadow = pop sreg
и такой фрагмент добавляем для всех подпрограмм/прерываний
ессно ежли Т используется как транспортный между различными подпрограммами такое решение непригодно.
:roll:
В принципе.. Т не флаг как таковой а вариант замены "битового акумулятора" по подобию флага С у mcs51 - собственно в том подобии его и следует использовать.
8)
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

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

Сообщение Alexeyslav »

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

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

Сообщение BOB51 »

Я имел ввиду не размещение, а функционал.
У 51-х это не только флаг переноса, но и основа команд "битового процессора"
orl c,bit
anl c,bit,
mov c,bit
mov bit,c
orl c,/bit
anl c,/bit
помимо общераспространенных: установка, сброс, инверсия флага Сy (аналогичные помимо того есть и и для любого из прямоадресуемых бит)
8)
У АВРок только
bld = mov bit,c
bst = mov c,bit
и проверка статуса с переходом
brbc t,rel
brbs t,rel
непосредственный сброс/установка
clt
set
да простые условные переходы
brts
brtc
:(
Потому и сказал про АНАЛОГИЮ, а не СООТВЕТСТВИЕ...
:roll:
akl
Друг Кота
Сообщения: 4444
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

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

Сообщение akl »

Специальный пользовательский T-флаг, наряду с имеющимся типовым C-флагом никак не делает AVR ущербным.
Достоинства и недостатки MCS 51 лучше обсуждать не в этой теме.
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15546
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

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

Сообщение BOB51 »

Речь совершенно не о "ущербности", а о назначении данного флага.
Я всего лишь объяснил Alexeyslav, почему назвал его "подобным" по свойствам и назначению.
8)
Если сравнительный анализ возможностей применения есть "КРАМОЛА" - приношу извенения...
:dont_know:
IvanDurak
Встал на лапы
Сообщения: 98
Зарегистрирован: Вт янв 25, 2011 14:31:17
Откуда: Казахстан Костанай
Контактная информация:

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

Сообщение IvanDurak »

Здравствуйте, помогите скомпилировать проект на Atmega 8515 в HEX или в BIN
Вложения
1-420_program.rar
(17.89 КБ) 147 скачиваний
Последний раз редактировалось IvanDurak Пт окт 19, 2018 16:10:57, всего редактировалось 1 раз.
Аватара пользователя
Z_h_e
Собутыльник Кота
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

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

Сообщение Z_h_e »

В чем нужна помощь? Сделать за Вас? Так это не помогите называется.
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
IvanDurak
Встал на лапы
Сообщения: 98
Зарегистрирован: Вт янв 25, 2011 14:31:17
Откуда: Казахстан Костанай
Контактная информация:

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

Сообщение IvanDurak »

НЕ сделать а скомпилировать
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

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

Сообщение WiseLord »

Программа на C (похоже, codevision, хотя я в сортах г-на не особо разбираюсь). Ветка про ассемблер.

И в чём, собственно, проблема? Никаких сообщений об ошибках не приведено, откуда нам понять, что имено там не комплируется?
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

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

Сообщение Alexeyslav »

Предположу, что у него нет компилятора и желания разбираться каким компилятором и как надо компилировать. Исходник где-то надыбал, а прошить его в микросхему не выходит... надо скомпилировать, оказывается.
Vaha
Первый раз сказал Мяу!
Сообщения: 21
Зарегистрирован: Пт окт 11, 2013 20:43:07
Откуда: с. Муравлёвка Измаильский р-н.

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

Сообщение Vaha »

Здравствуйте.
akl - спасибо, в симуляторе2 действительно корректно проходила отладка.
(первую подсказку за симулятор2 я почему то пропустил мимо ус-шей)
теперь следущая засада:
Пробую освоить АЦП. "Наваял" программку, простенькую - запускается АЦП, после - содержимое регистров на ЛСД, и так по кругу...
В протеусе, при первом проходе, напряжение измеряется, выводится на ЛСД, при следущих - при изменении напряжения, показания не меняются. хотя программа исправно запускает АЦП и после уходит на прерывание.
Не получается в цикле запустить замер напряжения - не заводится.
... я уже и пыль протер, и за руль подержался - ни в какую.
может кто знает где здесь бензин заливается? ...
Вложения
voltmetr_m8_2.rar
(100.74 КБ) 150 скачиваний
akl
Друг Кота
Сообщения: 4444
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

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

Сообщение akl »

Правильнее запоминать в обработчике состояние SREG и, при выходе, восстанавливать. По коду. Довольно объёмный и с ходу не вкуриш. Лучше "съесть слона по частям".

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

;----------
service_ADCC: ;прерывание от АЦП
 IN R0,SREG

; В даном случае, прерывание от АЦП обрабатывается в фоновом режиме
; по сему - устанавливаем флаг, что АЦП преобразование закончено
; и разрешена фоновая обработка, и выходим

   sbr r_flag_r25, (1<<int_acp); описание регистра (set_&_def.inc) ; !!!!!!!!!!!!! эта команда трогает флаги

; для отладки - что сдесь заходили - инвертируем пин порта
    sbic pinb,3;  пропустить если пин  = 0
    rjmp m_msh3
    sbi portb,3 ; установить пин в 1
    rjmp m_mshe3
m_msh3:
    cbi portb,3  ;сбросить пин в 0
m_mshe3:
 OUT SREG,R0
    reti

; end --- service_ADCC ----
Vaha
Первый раз сказал Мяу!
Сообщения: 21
Зарегистрирован: Пт окт 11, 2013 20:43:07
Откуда: с. Муравлёвка Измаильский р-н.

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

Сообщение Vaha »

Здравствуйте.
Спасибо всем за участие, проблема решена - не правильная последовательность обращения к регистрам ADCH и ADCL.
Цытата из "Микроконтроллеры AVR семейства Mega. Евстифеев А.В. (2007)" (стр 415, параграф 9.3, третий обзац): -
" Обращение к регистрам ADCH и ADCL для получения результата
преобразования должно выполняться в определенной последовательности:
сначала необходимо прочитать регистр ADCL, а затем ADCH. Это
требование связано с тем, что после обращения к регистру ADCL процессор
блокирует доступ к регистрам данных со стороны АЦП до тех пор, пока не
будет прочитан регистр ADCH. ..."

akl - спасибо, ценное замичание, что команды "CBR" и "SBR" изменяют "SREG".
(и уже раз вылавливал глюки из-за не сохраненного "SREG" - все = мимо ус-шей)

Во влложении - исправленый код (с протеусом).
Вложения
voltmetr_m8_3.rar
(59.74 КБ) 146 скачиваний
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15546
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

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

Сообщение BOB51 »

Я R0 и R1 заложил как "для особого случая" - это регистры с "двойным дном" - используются в составе других команд.
Для сверхоперативного стека лучше с R2 начинать (предварительно впихнув его содержимое в обычный стек).
:roll:
Vaha
Первый раз сказал Мяу!
Сообщения: 21
Зарегистрирован: Пт окт 11, 2013 20:43:07
Откуда: с. Муравлёвка Измаильский р-н.

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

Сообщение Vaha »

BOB51 - Ваша правда, R1 и R0 - подобие аккумулятору, в них записываются результаты умножения, и их стараюсь держать особняком, но как-то так вырвалось... :dont_know: , и вообще (сугубо мое мнение), если есть время и место нужно уходить в "SRAM" :oops: (ОЗУ) - меньше возни с пушами и попами :-) .
trofim2
Встал на лапы
Сообщения: 106
Зарегистрирован: Чт сен 10, 2015 06:59:03
Откуда: Гродно, BY

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

Сообщение trofim2 »

Команды LDS и STS ни чем не отличаются (по быстродействию) от POP и PUSH. Для экономии времени входа и выхода в/из прерывания логичнее использовать сохранение SREG и используемых регистров верхней половины в зарезервированных r2..r15.
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15546
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

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

Сообщение BOB51 »

Разве что размером в ПЗУ (4 байта против двух)
:wink:
Vaha
Сброс в ОЗУ для SREG это единственно возможный вариант "быстрого сохранения" (то ли командой IN/OUT, то ли через "отображение РСФ на память").
Однако помимо прочего есть еще и куча возможных наложений при достаточно солидной программе.
Посему лучше создать область "теневого стека", которая при необходимости дублируется в штатном стеке.
В тот "теневой стек" можно и иные регистры копипастить, а не только SREG - на то есть две вкусняшки - MOV r,r и MOW r,r .
8)
Последний раз редактировалось BOB51 Пн ноя 05, 2018 08:49:26, всего редактировалось 1 раз.
dgrett
Вымогатель припоя
Сообщения: 615
Зарегистрирован: Вс дек 28, 2014 21:54:05

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

Сообщение dgrett »

Если сунули в стек, то и вынуть придётся ДО RET, RETI. А если сунули в SRAM или в регистры - вынимайте когда вздумается, можете и вовсе не вынимать.
Я всё-всё узнAю и стану профессором.
Ответить

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