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

Обсуждаем контроллеры компании Atmel.
Ответить
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2022
Зарегистрирован: Вт фев 09, 2010 02:04:53
Откуда: Санкт-Петербург

Сообщение Гефестион »

[uquote="Ivanoff-iv",url="/forum/viewtopic.php?p=3469987#p3469987"]конечно... если даже в простых схемах/программах костыли, то что же будет дальше?[/uquote]
Я не думаю, что это программная ошибка. Скорее всего, это прилетает помеха от импульсного преобразователя (у меня на этой плате стоит повышающий DC-DC) и от этого TWI глючит.

Добавлено after 50 seconds:
[uquote="BOB51",url="/forum/viewtopic.php?p=3470016#p3470016"]От длительного зависона WDT спасает и без дополнительных счетчиков...
:roll:[/uquote] Вот да, щас как раз думаю в этом направлении.
Фак, кот грызёт провод! Сейчас его ударит либо током, либо тапком! ))
Реклама
Друг Кота
Аватара пользователя
Сообщения: 15797
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

Корректную программу на ассемблере может вышибить в "глюк" только искровой разряд с зажигалки для газплиты в шину питания устройства. И то... не во всех случаях...
8)
Реклама
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич

Сообщение Alexeyslav »

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

Сообщение Vaha »

Здравствуете.
У кого установлена 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", выставляет флаг переполнения и т.д. ...?). Если и у Вас так-же - наверно глюк студии, если нет - буду копать дальше - переустанавливать винду и т.д. ...
В Протеусе все работает.
В AVR Studio 5.1 - отладка проходит правильно, но не могу при отладке регистры периминовать, так, как они в программе обозваны директивой ".def" -? Может кто знает как при отладке можно регистры переименовывать в AVR Studio 5.1?
Вложения
Fast-PWM.rar
(48.03 КБ) 238 скачиваний
Реклама
Эиком - электронные компоненты и радиодетали
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2022
Зарегистрирован: Вт фев 09, 2010 02:04:53
Откуда: Санкт-Петербург

Сообщение Гефестион »

[uquote="Alexeyslav",url="/forum/viewtopic.php?p=3471178#p3471178"]Ждать что-то в прерывании - вот самый большой глюк. Не надо ничего ждать в прерывании, это изначально порочная практика.
Почему бы информацию не считывать в основном потоке, а в прерывании только выставить флаг что "пора читать".[/uquote] Согласен, я практически всё делаю в прерываниях, а в основной программе лишь "заглушка" rjmp PC. Тогда такой вопрос. Мне нужно, чтобы некоторый кусок кода в основной программе выполнялся не в замкнутом цикле, а только после выхода из прерывания. Т.е. выполнили однократно этот кусок кода и ждём прерывания. Вышли из прерывания и снова однократно выполнили этот код. Т.е. можно ли как-то из прерывания выйти не туда, откуда оно было вызвано? Или у меня в принципе подход неверный?
Фак, кот грызёт провод! Сейчас его ударит либо током, либо тапком! ))
Реклама
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич

Сообщение Alexeyslav »

Это в принципе подход неверный. Прерывание должно вернуть управление ровно туда откуда было вызвано и точка. Максимум что можно сделать - в прерывании выставить флаг в отдельной переменной а в основном потоке тупо пасти его и делать какое-то действие если он возникнет, не забыв сбросить.

Даже сразу наборчик макросов для этих целей припасён.
СпойлерДолжен быть объявлен регистр с "флагами" под символическим именем именем flags.

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

.macro set_flag
  SET
  BLD   flags, @0
.endmacro

.macro clr_flag
  CLT
  BLD   flags, @0
.endmacro

.macro go_if_flag
  BST    flags, @0
  BRTS   @1
.endmacro

.macro go_if_noflag
  BST    flags, @0
  BRTC   @1
.endmacro
Контактная информация:
Реклама
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2022
Зарегистрирован: Вт фев 09, 2010 02:04:53
Откуда: Санкт-Петербург

Сообщение Гефестион »

Хорошая идея с флагом Т :beer: Я про него забыл :oops:
Фак, кот грызёт провод! Сейчас его ударит либо током, либо тапком! ))
akl
Друг Кота
Сообщения: 4474
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

Сообщение 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 КБ) 867 скачиваний
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич

Сообщение Alexeyslav »

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

Сообщение BOB51 »

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

Сообщение Alexeyslav »

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

Сообщение 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
Друг Кота
Сообщения: 4474
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

Сообщение akl »

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

Сообщение BOB51 »

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

Сообщение IvanDurak »

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

Сообщение Z_h_e »

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

Сообщение IvanDurak »

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

Сообщение WiseLord »

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

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

Сообщение Alexeyslav »

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

Сообщение Vaha »

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

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