
Views: 1238
Во второй главе для управления светодиодами применялись макросы задержки, они “типа” стопорили работу процессора на пол секунды, после чего, контроллер выполнял необходимые команды по переключению светодиодов и опять занимался тем что ожидал. в реальной жизни это непозволительная роскошь. Если контроллеру необходимо выполнять обработку информации, то наши задержки будут только стопорить его основную работу.
Для решение этой проблемы можно использовать прерывания, которые формирует аппаратный таймер и который работает независимо от функционирования центрального процессора. Одно из решений задачи, контроллер занимается основной задачей и циклически проверяет флаг который устанавливается когда выполняется прерывание от таймера. Если флаг установлен выполняется процедура “мигания” светодиодами Если нет выполняется основная задача.
Основные различия от предыдущего проекта это при настройки таймера включение прерывания от таймера TMR1.
//--------------------------------------------------------------------------- // Настройка таймера TMR1 T1CON = 0b1000000000110000; // |||||||||||||||+-- неиспользуемый // ||||||||||||||+--- TCS: источник тактовых импульсов FOSC/2 // |||||||||||||+---- TSYNC: состояние игнорируется, так как тактовая частота системный генератор // ||||||||||||+----- неиспользуемый // ||||||||||++------ TCKPS1:TCKPS0: настройка предделителя 11 = 1:256 // |||||||||+-------- TGATE: 0- режим измерение длительности входного импульса отключен // |||++++++--------- неиспользуемые // ||+--------------- TSIDL: 0- продолжать работу в режиме ожидания (сна) // |+---------------- неиспользуемый // +----------------- TON: 1 -таймер включен PR1=0xFFFF; // период счета _T1IF=0; // очистить бит прерывания от таймера TMR1 _T1IE=1; // разрешить прерывание от таймера TMR1 //---------------------------------------------------------------------------
Создание функции прерывания от таймера TMR1.
// подпрограмма обслуживания прерываний от таймера TMR1 void __attribute__((__interrupt__, __auto_psv__)) _T1Interrupt(void) { _T1IF=0; // сброс флага прерывания от таймера TMR1 Bit.MIG=1; }//
А сам главный цикл программы теперь будет выглядеть так:
while(1) { ClrWdt(); // сброс сторожевого таймера //------------------------- // переключение светодиодов if(Bit.MIG) { if(Bit.NAG) { _LATA0 = 1; // выключить светодиод _LATB0 = 0; // выключить светодиод Bit.NAG=0; } else { _LATA0 = 0; // выключить светодиод _LATB0 = 1; // включить светодиод Bit.NAG=1; } Bit.MIG=0; } //------------------------- // основная программа в этом месте }
Расчет периода прерываний для таймера TMR1 (смотри в описании по работе с таймером).
Загрузка проекта

Использование прерываний для управления процессами в PIC24 45.72 KB 764 downloads
Использование прерываний для управления процессами...Это может быть интересно
ESP32-первое знакомство
Views: 6812 Музыкальная тема к статье, слушаем: Настало время познакомиться c ESP32 и для меня, для этого я приобрел в ГАММЕ отладочную плату с модулем ESP-WROOM-32 (ESP32-DevKitC). Первая задача, как …ESP8266 применение в проектах
Views: 3659 (Актуально только для версий прошивки 1.хх) ESP8266 показала себя как надежное и безотказное устройство для обмена данными с применением WIFI. Я использую ESP8266 исключительно через UART, с применением AT …LATINO – открытый проект ch-светомузыки
Views: 1687 Проект построенный на некоторых принципах ch-светомузыка. Проект ознакомительный предназначен, для самостоятельного построения простого и эффективного светосинтезатора. Вывод осуществляется на ВОУ собранной на драйверах HL1606. Для этого была …Стробоскоп для автомобиля
Views: 2188 Одним из популярных решений светового тюнинга автомобиля, мотоцикла или скутера стал эффект – “полицейский стробоскоп“. На база платы ch-c0050 реализовано несколько проектов. В этой статье приводятся две версии …Универсальный терморегулятор ch-c3000
Views: 3063 Терморегулятор ch-c3000 предназначен для управления системами регулирования температуры в пределах от – (минус) 55 до + 125 С. Регулятор может использоваться как в системах отопления, так и в …JDY-62A Audio bluetooth module
Views: 1756 Простой модуль для простого аудио блютуса. Встроенные подсказки на английском языке. Модуль включён, режим муте – после подачи питания. Контроль разряда батареи предупреждение что батарея разряжена и необходима …PIC32MZ – Core Timer (библиотека)
Views: 547 Переработанные файлы от Microchip, библиотека для работы с Core Timer.Проект с использованием MCC часть 06
Views: 1347 Изменим схему следующим образом добавим две тактовые кнопки BT1 и BT2. Теперь переключимся на конфигурацию выводов, для этого сделаем двойной клик в окне Ресурсы проекта на Pin Module. …Гаджеты для домашней автоматики – Датчик приближения
Views: 2027 Управление светодиодным освещением – Датчик приближения. Данный гаджет предназначен для управления внутренним освещением мебели. Датчик позволяет определить закрытие или открытие дверцы или ящика и при этом включать или …NeoPixel LED and PIC24
Views: 676 Популярность однопроводной шины для управления светодиода типа WS2812 не ослабевает, а новые типы светодиодов в корпусах 3,5*3,5мм, 2,0*2,0мм становяться все больше привлекательными. Построение дисплеев для анимации требуют все …