Форум Микро-Чип
Поиск и заказ электронных компонентов
 

Вернуться   Форум Микро-Чип > Пользователи

john2103 will become famous soon enoughjohn2103 will become famous soon enough

john2103 john2103 вне форума

Senior Member

Публичные сообщения

Отображение с 1 по 3 из 3 публичных сообщений
  1. paulwasw
    15.06.2015 12:23
    paulwasw
    3. Кое-как научным тыком слепил проект с кнопками. Каждая кнопка переключает свой светодиод. Кнопка на входе RB0 работала четко, а вот кнопки на RB4-RB7 (другой источник прерываний) не работали. После дизассемблирования HEX и анализа ASM выяснилось, что прерывание срабатывает, но процедура обработки после завершения автоматически запускается заново - вечный цикл. Как я понял, Вы тоже столкнулись с подобным эффектом. И в качестве лекарства Вам предложили борьбу с дребезгом. А почему же тогда на RB0 дребезг не влияет? Вы не докопались до причин?
    4. Если не очень затруднит, в нескольких фразах изложите пожалуйста основные принципы обработки прерываний в СИ (установку разрешений и проверку флагов в регистрах можно опустить).
  2. paulwasw
    15.06.2015 12:22
    paulwasw
    Извините, сайт не позволяет вводить сообщения свыше 1000 символов, а есть еще три вопроса.
    2. Обычно в проекте присутствует заголовочный файл <имя>.h, где определяются глобальные переменные, функции (как extern). Нужно ли там объявлять функцию обработки прерываний?
  3. paulwasw
    15.06.2015 12:20
    paulwasw
    Уважаемый john2103!
    В поисках интересующей меня проблемы вышел на статью на форуме, где Вы задаете практически тот же самый вопрос. Но тема как-то прервалась без финального резюме (на мой взгляд).
    Я неплохо владею ASM, но в СИ - еще полный новичок (так вышло), и пытаюсь освоить эту тему. Текущий вопрос - как в СИ обрабатывать прерывания. В сети масса материалов, как это делается на ASM, обработку же на СИ встречал очень редко. Метод же научного тыка не очень надежен. Если позволите, несколько вопросов.
    1. Объявление самой процедуры. Вы приводите пример с именем:
    void interrupt knopka(void){ <тело> }
    И что, встретив "interrupt", компилятор понимает, что это процедура обработки прерываний? У Вас это обработка кнопки, но есть же и другие источники. Для каждого вводить свою void interrupt mmmmm (void)? У PIC16 один вектор прерываний, логично, чтобы и функция обработки была единой, а там уже анализировать флаги и выполнять действия.

    С уважением Павел

Статистика

Всего сообщений
Публичные сообщения
Дополнительная информация
  • Последняя активность: 20.06.2019 10:07
  • Регистрация: 19.04.2011
  • Реферралы: 0

Часовой пояс GMT +3, время: 16:06.


Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd. Перевод: zCarot