Перейти к содержанию

Вопросы от начинающих по МК


Рекомендуемые сообщения

Это макроассемблер. Подобные конструкции исполняются на этапе компиляции, а не на этапе выполнения программы. По этому, там может быть что угодно, а не только ассемблерные команды.

Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

  • Ответов
  • Создана
  • Последний ответ

Топ авторов темы

Понял, Alexeyslav прописал макрос а if else похоже заменил некоторые ассемблерные команды для наглядности. слегка меня запутал) и с этой @

В общем я просто с макросами не имел дело)

Изменено пользователем MillyVolt2
Ссылка на комментарий
Поделиться на другие сайты

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

Я с АВРами не работал, но если немного приглядеться в код, то "@" наводит на мысль, что это - взятие аргумента макроса с порядковым номером.

Ссылка на комментарий
Поделиться на другие сайты

Особенности хранения литиевых аккумуляторов и батареек

Потеря емкости аккумулятора напрямую зависит от условий хранения и эксплуатации. При неправильном хранении даже самый лучший литиевый источник тока с превосходными характеристиками может не оправдать ожиданий. Технология, основанная на рекомендациях таких известных производителей литиевых источников тока, как компании FANSO и EVE Energy, поможет организовать правильный процесс хранения батареек и аккумуляторов. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Можно и так сказать, если не обращать внимания на то, что команда OUT выполняется за 1 машинный цикл и занимает 1 слово (2 байта), в то время, как STS - 2 цикла и занимает 2 слова (4 байта).

В остальном Вы правы.

... Да. Чуть не забыл. Команда STS не поддерживается семейством Tiny.

Изменено пользователем Геннадий
Ссылка на комментарий
Поделиться на другие сайты

Можно конечно, только константы нижних адресов определены для команды OUT, чтобы их использовать с STS нужно добавлять смещение, поскольку адреса портов в общем адресном пространстве начинаются не с нуля.

Второе отличие - команда OUT выполняется за один такт, а STS требует 2 такта.

С точек начинаются директивы. Их у компилятора много, например .error "ошибка ошибка" приведёт к прекращению компиляции с выдачей ошибки "ошибка ошибка". Директива .warning "предупреждение" выдаст в консоль компилятора текст "предупреждение" с значком предупреждения, но продолжит компиляцию. Директива .message "текст" выдаст в консоль произвольный текст, просто в виде строки и ничего больше - этим удобно контролировать срабатывание условной директивы .IF и ,например, контролировать предвычислимые константы объявленные через .EQU .

Например, когда считаешь коэффициент основываясь на тактовой частоте контроллера может произойти переполнение разрядной сетки условной директивой .IF проверяешь что константа больше 255 и выдаёшь предупреждение .WARNING или ошибку .ERROR .

Директивы, это очень мощная вещь в ассемблере. они же в большинстве своём прекрасно работают и в C.

Есть такой документик на русском в котором начиная с 7-й страницы расписываются все директивы с примерами использования. Этот самый макрос, кажется, именно оттуда был взят как пример...

Учение - изучение правил. Опыт - изучение исключений.

Ссылка на комментарий
Поделиться на другие сайты

константы верхних адресов используюься без смещения? с командой sts

Использовал команду sts, но всё, что с ней связано в моей программе не работает - таймеры и прерывания.

Щас выложу картинку с кодом

Посмотрите, пожалуйста незамыленным взглядом, может заметите, где чего не хватает.

Здесь хотел сделать генерацию сигнала 1 Гц на пинах PC0 и OC1A (PB1) для проверки частоты и работы МК.

Не работает ни тот ни другой способ, видимо не учёл какую-то особенность МК.

post-187141-0-22043600-1445548434_thumb.png

DDS_Gen1.pdf

Изменено пользователем MillyVolt2
Ссылка на комментарий
Поделиться на другие сайты

С таймерами напутали. То 0, то 1. Нулевой не считает, а прерывания по нему. Нужно просто повнимательней писать.

Никогда не спорьте с дураком - люди могут не заметить между вами разницы

Ссылка на комментарий
Поделиться на другие сайты

Оба таймера запущены записью в регистры TCCR0B и TCCR1B.

Допустим, если напутал с прерываниями по таймеру0, то почему не работает режим сравнения на таймере1?)

Ссылка на комментарий
Поделиться на другие сайты

всем привет, обзавелся парой камней f103vet6, скачал банан кокос, подключил GCC к нему. беру pdf на камень https://www.google.r...m32f103vet6 pdf а в нем только общее описание. Где регистры то поглядеть?????

Во первых, даташиты нужно искать у ПРОИЗВОДИТЕЛЯ, а не у аггрегаторов.

Во вторых, на СТМ32 при работе с конкретным МК потребуется ТРИ документа:

- даташит на конкретный МК (там только распиновка, типы корпусов и электрические параметры) http://www.st.com/stonline/stappl/resourceSelector/app?page=fullResourceSelector&doctype=datasheet&LineID=1565

- референсный мануал на семейство (основной документ с описанием всех регистров, кроме регистров ядра, описание периферии, осциллятора, управление потреблением и прочая) http://www.st.com/stonline/stappl/resourceSelector/app?page=fullResourceSelector&doctype=reference_manual&LineID=1565

- мануал по программированию на семейство (программная модель, регистры ядра, система команд) http://www.st.com/stonline/stappl/resourceSelector/app?page=fullResourceSelector&doctype=programming_manual&LineID=1565

戦う前に相手のベルトの色に注目

Ссылка на комментарий
Поделиться на другие сайты

Одну ошибку нашёл, пин PB1 надо установить на выход (DDB1=1), иначе не будет работать выход режима сравнения таймера1 OCR1A.

Как сделаю, отпишусь, помогло или нет.

Ссылка на комментарий
Поделиться на другие сайты

Ещё ошибка - неправильно записан указатель стека на вершину SRAM.

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

Может поэтому и прерывания не работали.

Ссылка на комментарий
Поделиться на другие сайты

Так и есть, low(RAMEND) = 208, то есть указатель стека записывал в зазезервированный байт, который можно найти в таблице регистров для ATMEGA328P

Ссылка на комментарий
Поделиться на другие сайты

Геннадий, для ATtiny2313A достаточно было записать младший байт, так как у него маленький размер SRAM.

Исправил ошибки, на выходе OCR1A есть 1 Гц, а вот с прерываниями все так же не работает

У мен пока только один маловероятный вариант, что установился бит IVSEL, изза чего не работают прерывания, т к смещена таблица прерываний.

Изменено пользователем MillyVolt2
Ссылка на комментарий
Поделиться на другие сайты

У вас в прерывании используется команда DEC - она меняет регистр флагов, а это значит их надо сохранять перед выполнением обработчика прерывания и восстанавливать перед выходом. Иначе это чревато неуловимыми странными глюками. Ведь внезапно в любом месте программы могут поменяться флаги...

Учение - изучение правил. Опыт - изучение исключений.

Ссылка на комментарий
Поделиться на другие сайты

Честно говоря ни разу не сталкивался с самопроизвольным изменением переменной, поменяться она может если используется где-то ещё, в данном случае r17 используется только в прерывании.

Конечно, возможно изменение регистров в результате каких-либо помех.

Сделаю, как вы сказали, с хранением переменной в SRAM, может и поможет)

r18 также больше нигде не используется, кроме вывода на порт С

Ссылка на комментарий
Поделиться на другие сайты

Alexeyslav говорил про регистр статуса (SREG), т.к. при выходе из прерывания он может иметь значения отличные от значений во время входа. Ведь он используется везде. И в основном теле, и в прерывнии.

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

Ссылка на комментарий
Поделиться на другие сайты

Геннадий,

младший байт первым читается, а не пишется

из даташита ATmega328P

post-187141-1445598254,4283_thumb.jpg

Понял насчёт SREG, спасибо

Изменено пользователем MillyVolt2
Ссылка на комментарий
Поделиться на другие сайты

Подредактировал обработчик прерывания так, чтобы он не влиял на регистр флагов, должно было получиться 3 Гц, безрезультатно.

Попробую предыдущий вариант с сохранением SREG в SRAM.

post-187141-0-14136900-1445600205_thumb.png

Документ Microsoft Word (2).pdf

Сделал сохранение SREG, не помогло

post-187141-0-07172200-1445600930_thumb.png

Документ Microsoft Word (2).pdf

Изменено пользователем MillyVolt2
Ссылка на комментарий
Поделиться на другие сайты

Используй тег CODE для того чтобы код постить на форум, картинки тут не к месту вообще.

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

Учение - изучение правил. Опыт - изучение исключений.

Ссылка на комментарий
Поделиться на другие сайты

Нулевой не считает

sts out TCCR0B, r16

Изменено пользователем Григорий Т.

Никогда не спорьте с дураком - люди могут не заметить между вами разницы

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы публикуете как гость. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...