
Views: 1248
Во второй главе для управления светодиодами применялись макросы задержки, они “типа” стопорили работу процессора на пол секунды, после чего, контроллер выполнял необходимые команды по переключению светодиодов и опять занимался тем что ожидал. в реальной жизни это непозволительная роскошь. Если контроллеру необходимо выполнять обработку информации, то наши задержки будут только стопорить его основную работу.
Для решение этой проблемы можно использовать прерывания, которые формирует аппаратный таймер и который работает независимо от функционирования центрального процессора. Одно из решений задачи, контроллер занимается основной задачей и циклически проверяет флаг который устанавливается когда выполняется прерывание от таймера. Если флаг установлен выполняется процедура “мигания” светодиодами Если нет выполняется основная задача.
Основные различия от предыдущего проекта это при настройки таймера включение прерывания от таймера 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
Использование прерываний для управления процессами...Это может быть интересно
PIC18 – модуль DMA
Views: 1293 Введение Модуль прямого доступа к памяти (DMA) предназначен для обслуживания передачи данных непосредственно между различными областями памяти без вмешательства процессора. Исключив при этом необходимость в интенсивной обработки …Проект с использованием MCC часть 12-1
Views: 1033 В настоящее время без визуализации информации уже не интересно. Поэтому научимся выводить информацию на дисплей. Для это возьмет простенький OLED RET012864E/REX012864J я такой приобретал в фирме “Гамма-Украина”, описание можно …LED модуль P10C4V12
Views: 3282 LED панели на обычных регистрах типа 74HC595. Они выпускаются как монохромные так двух и полно цветные, особенность, что они предназначены для текстовой информации и имеют один уровень яркости. Общую яркость …Часы + Календарь + Термометр + …
Views: 2768 Часы + Календарь + Термометр + Индикатор влажности + Секундомер + Дистанционное управление на ИК лучах (пульты на RC-5 протоколе) + Автоматическая регулировка яркости + Возможность вывода данных через USB, …HVLD модуль на примере PIC24FJ128GA204
Views: 760 HVLD модуль представляет собой простое устройство, для контроля напряжения питания микроконтроллера или внешнего напряжения (через делитель). Его задача при “выходе” напряжения за заданные пределы сформировать сообщение микроконтроллеру, что …DIXELL XWEB500D-EVO + RUT900 или как пробить NAT-сервер
Views: 1110 Когда необходимо под какой нибудь контроллер имеющий вэб сервер в инет, то нужен статический IP, что оказалось проблемой при работе с операторами сотовых сетей, конкретно с оператором сети …ch-светомузыка и AK4113
Views: 1442 Пришло время вернуться к светомузыке. На сегодня использование аналогового входа стало непрактичным, на сегодня необходимо использовать S/PDIF и Toslink. С этим надо было как то разобрать, что это …Moving average – скользящее среднее
Views: 2345 Скользящая средняя, скользящее среднее (англ. moving average, MA) — общее название для семейства функций, значения которых в каждой точке определения равны среднему значению исходной функции за предыдущий период. Скользящие средние обычно используются с данными временных рядов для сглаживания …Мультизоновый индикатор-терморегулятор ch-c3010
Views: 1309 Часто возникает необходимость получить информацию по температуре с множества точек контроля. Вам необходимо знать температуру в комнате, в коридоре, температуру на улице, а в погребе (или на балконе) …Применение typedef, struct и union
Views: 8881 Полезные описания переменных Часто необходимо в памяти расположить последовательно разные виды данных, что бы потом можно было их использовать. Полезные ссылки Взято и переработано с сайта http://www.butovo.com/~zss/cpp/struct.htm http://cppstudio.com/post/9172/ …