Страница 338 из 400
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Пт окт 05, 2018 02:37:06
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
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Пт окт 05, 2018 05:45:33
Alexeyslav
Можно и сразу его задействовать, но обычно нужен не один флаг, а Т он один на весь контроллер. Если вдруг где-то добавишь код который его использует и туши свет - будешь долго искать причину непонятных сбоев.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Сб окт 06, 2018 06:56:40
BOB51
Как альтернатива "наложений" - делаем обязательный "быстрый стек" для SREG в регистровом файле.
push shadow
in shadow,sreg = push sreg
.........
out sreg,shadow
pop shadow = pop sreg
и такой фрагмент добавляем для всех подпрограмм/прерываний
ессно ежли Т используется как транспортный между различными подпрограммами такое решение непригодно.

В принципе.. Т не флаг как таковой а вариант замены "битового акумулятора" по подобию флага С у mcs51 - собственно в том подобии его и следует использовать.

Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Сб окт 06, 2018 09:21:14
Alexeyslav
Подобии? Так это и есть бит из регистра статуса...
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Сб окт 06, 2018 14:04:05
BOB51
Я имел ввиду не размещение, а функционал.
У 51-х это не только флаг переноса, но и основа команд "битового процессора"
orl c,bit
anl c,bit,
mov c,bit
mov bit,c
orl c,/bit
anl c,/bit
помимо общераспространенных: установка, сброс, инверсия флага Сy (аналогичные помимо того есть и и для любого из прямоадресуемых бит)
У АВРок только
bld = mov bit,c
bst = mov c,bit
и проверка статуса с переходом
brbc t,rel
brbs t,rel
непосредственный сброс/установка
clt
set
да простые условные переходы
brts
brtc
Потому и сказал про АНАЛОГИЮ, а не СООТВЕТСТВИЕ...

Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Сб окт 06, 2018 17:27:24
akl
Специальный пользовательский T-флаг, наряду с имеющимся типовым C-флагом никак не делает AVR ущербным.
Достоинства и недостатки MCS 51 лучше обсуждать не в этой теме.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Сб окт 06, 2018 17:41:02
BOB51
Речь совершенно не о "ущербности", а о назначении данного флага.
Я всего лишь объяснил
Alexeyslav, почему назвал его "подобным" по свойствам и назначению.
Если сравнительный анализ возможностей применения есть "КРАМОЛА" - приношу извенения...

Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Пт окт 19, 2018 15:29:49
IvanDurak
Здравствуйте, помогите скомпилировать проект на Atmega 8515 в HEX или в BIN
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Пт окт 19, 2018 15:51:34
Z_h_e
В чем нужна помощь? Сделать за Вас? Так это не помогите называется.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Пт окт 19, 2018 16:09:41
IvanDurak
НЕ сделать а скомпилировать
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Пт окт 19, 2018 19:08:37
WiseLord
Программа на C (похоже, codevision, хотя я в сортах г-на не особо разбираюсь). Ветка про ассемблер.
И в чём, собственно, проблема? Никаких сообщений об ошибках не приведено, откуда нам понять, что имено там не комплируется?
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Сб окт 20, 2018 01:18:38
Alexeyslav
Предположу, что у него нет компилятора и желания разбираться каким компилятором и как надо компилировать. Исходник где-то надыбал, а прошить его в микросхему не выходит... надо скомпилировать, оказывается.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Пт ноя 02, 2018 07:18:17
Vaha
Здравствуйте.
akl - спасибо, в симуляторе2 действительно корректно проходила отладка.
(первую подсказку за симулятор2 я почему то пропустил мимо ус-шей)
теперь следущая засада:
Пробую освоить АЦП. "Наваял" программку, простенькую - запускается АЦП, после - содержимое регистров на ЛСД, и так по кругу...
В протеусе, при первом проходе, напряжение измеряется, выводится на ЛСД, при следущих - при изменении напряжения, показания не меняются. хотя программа исправно запускает АЦП и после уходит на прерывание.
Не получается в цикле запустить замер напряжения - не заводится.
... я уже и пыль протер, и за руль подержался - ни в какую.
может кто знает где здесь бензин заливается? ...
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Пт ноя 02, 2018 17:11:54
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 ----
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Сб ноя 03, 2018 10:46:04
Vaha
Здравствуйте.
Спасибо всем за участие, проблема решена - не правильная последовательность обращения к регистрам ADCH и ADCL.
Цытата из "Микроконтроллеры AVR семейства Mega. Евстифеев А.В. (2007)" (стр 415, параграф 9.3, третий обзац): -
" Обращение к регистрам ADCH и ADCL для получения результата
преобразования должно выполняться в определенной последовательности:
сначала необходимо прочитать регистр ADCL, а затем ADCH. Это
требование связано с тем, что после обращения к регистру ADCL процессор
блокирует доступ к регистрам данных со стороны АЦП до тех пор, пока не
будет прочитан регистр ADCH. ..."
akl - спасибо, ценное замичание, что команды "CBR" и "SBR" изменяют "SREG".
(и уже раз вылавливал глюки из-за не сохраненного "SREG" - все = мимо ус-шей)
Во влложении - исправленый код (с протеусом).
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вс ноя 04, 2018 07:41:11
BOB51
Я R0 и R1 заложил как "для особого случая" - это регистры с "двойным дном" - используются в составе других команд.
Для сверхоперативного стека лучше с R2 начинать (предварительно впихнув его содержимое в обычный стек).

Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вс ноя 04, 2018 09:38:21
Vaha
BOB51 - Ваша правда, R1 и R0 - подобие аккумулятору, в них записываются результаты умножения, и их стараюсь держать особняком, но как-то так вырвалось...

, и вообще (сугубо мое мнение), если есть время и место нужно уходить в "SRAM"

(ОЗУ) - меньше возни с пушами и попами

.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вс ноя 04, 2018 09:52:14
trofim2
Команды LDS и STS ни чем не отличаются (по быстродействию) от POP и PUSH. Для экономии времени входа и выхода в/из прерывания логичнее использовать сохранение SREG и используемых регистров верхней половины в зарезервированных r2..r15.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Пн ноя 05, 2018 08:38:27
BOB51
Разве что размером в ПЗУ (4 байта против двух)
Vaha
Сброс в ОЗУ для SREG это единственно возможный вариант "быстрого сохранения" (то ли командой IN/OUT, то ли через "отображение РСФ на память").
Однако помимо прочего есть еще и куча возможных наложений при достаточно солидной программе.
Посему лучше создать область "теневого стека", которая при необходимости дублируется в штатном стеке.
В тот "теневой стек" можно и иные регистры копипастить, а не только SREG - на то есть две вкусняшки - MOV r,r и MOW r,r .

Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Пн ноя 05, 2018 08:46:54
dgrett
Если сунули в стек, то и вынуть придётся ДО RET, RETI. А если сунули в SRAM или в регистры - вынимайте когда вздумается, можете и вовсе не вынимать.