Обсуждаем контроллеры компании Atmel.
Ответить

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

Пт окт 05, 2018 02:37:06

Здравствуете.
У кого установлена 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", выставляет флаг переполнения и т.д. ...?). Если и у Вас так-же - наверно глюк студии, если нет - буду копать дальше - переустанавливать винду и т.д.

Включите 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 KiB) Скачиваний: 805

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

Пт окт 05, 2018 05:45:33

Можно и сразу его задействовать, но обычно нужен не один флаг, а Т он один на весь контроллер. Если вдруг где-то добавишь код который его использует и туши свет - будешь долго искать причину непонятных сбоев.

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

Сб окт 06, 2018 06:56:40

Как альтернатива "наложений" - делаем обязательный "быстрый стек" для SREG в регистровом файле.
push shadow
in shadow,sreg = push sreg
.........
out sreg,shadow
pop shadow = pop sreg
и такой фрагмент добавляем для всех подпрограмм/прерываний
ессно ежли Т используется как транспортный между различными подпрограммами такое решение непригодно.
:roll:
В принципе.. Т не флаг как таковой а вариант замены "битового акумулятора" по подобию флага С у mcs51 - собственно в том подобии его и следует использовать.
8)

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

Сб окт 06, 2018 09:21:14

Подобии? Так это и есть бит из регистра статуса...

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

Сб окт 06, 2018 14:04:05

Я имел ввиду не размещение, а функционал.
У 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:

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

Сб окт 06, 2018 17:27:24

Специальный пользовательский T-флаг, наряду с имеющимся типовым C-флагом никак не делает AVR ущербным.
Достоинства и недостатки MCS 51 лучше обсуждать не в этой теме.

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

Сб окт 06, 2018 17:41:02

Речь совершенно не о "ущербности", а о назначении данного флага.
Я всего лишь объяснил Alexeyslav, почему назвал его "подобным" по свойствам и назначению.
8)
Если сравнительный анализ возможностей применения есть "КРАМОЛА" - приношу извенения...
:dont_know:

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

Пт окт 19, 2018 15:29:49

Здравствуйте, помогите скомпилировать проект на Atmega 8515 в HEX или в BIN
Вложения
1-420_program.rar
(17.89 KiB) Скачиваний: 126
Последний раз редактировалось IvanDurak Пт окт 19, 2018 16:10:57, всего редактировалось 1 раз.

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

Пт окт 19, 2018 15:51:34

В чем нужна помощь? Сделать за Вас? Так это не помогите называется.

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

Пт окт 19, 2018 16:09:41

НЕ сделать а скомпилировать

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

Пт окт 19, 2018 19:08:37

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

И в чём, собственно, проблема? Никаких сообщений об ошибках не приведено, откуда нам понять, что имено там не комплируется?

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

Сб окт 20, 2018 01:18:38

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

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

Пт ноя 02, 2018 07:18:17

Здравствуйте.
akl - спасибо, в симуляторе2 действительно корректно проходила отладка.
(первую подсказку за симулятор2 я почему то пропустил мимо ус-шей)
теперь следущая засада:
Пробую освоить АЦП. "Наваял" программку, простенькую - запускается АЦП, после - содержимое регистров на ЛСД, и так по кругу...
В протеусе, при первом проходе, напряжение измеряется, выводится на ЛСД, при следущих - при изменении напряжения, показания не меняются. хотя программа исправно запускает АЦП и после уходит на прерывание.
Не получается в цикле запустить замер напряжения - не заводится.
... я уже и пыль протер, и за руль подержался - ни в какую.
может кто знает где здесь бензин заливается? ...
Вложения
voltmetr_m8_2.rar
(100.74 KiB) Скачиваний: 134

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

Пт ноя 02, 2018 17:11:54

Правильнее запоминать в обработчике состояние 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

Здравствуйте.
Спасибо всем за участие, проблема решена - не правильная последовательность обращения к регистрам 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 KiB) Скачиваний: 125

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

Вс ноя 04, 2018 07:41:11

Я R0 и R1 заложил как "для особого случая" - это регистры с "двойным дном" - используются в составе других команд.
Для сверхоперативного стека лучше с R2 начинать (предварительно впихнув его содержимое в обычный стек).
:roll:

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

Вс ноя 04, 2018 09:38:21

BOB51 - Ваша правда, R1 и R0 - подобие аккумулятору, в них записываются результаты умножения, и их стараюсь держать особняком, но как-то так вырвалось... :dont_know: , и вообще (сугубо мое мнение), если есть время и место нужно уходить в "SRAM" :oops: (ОЗУ) - меньше возни с пушами и попами :-) .

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

Вс ноя 04, 2018 09:52:14

Команды LDS и STS ни чем не отличаются (по быстродействию) от POP и PUSH. Для экономии времени входа и выхода в/из прерывания логичнее использовать сохранение SREG и используемых регистров верхней половины в зарезервированных r2..r15.

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

Пн ноя 05, 2018 08:38:27

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

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

Пн ноя 05, 2018 08:46:54

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