Views: 1266
Во второй главе для управления светодиодами применялись макросы задержки, они “типа” стопорили работу процессора на пол секунды, после чего, контроллер выполнял необходимые команды по переключению светодиодов и опять занимался тем что ожидал. в реальной жизни это непозволительная роскошь. Если контроллеру необходимо выполнять обработку информации, то наши задержки будут только стопорить его основную работу.
Для решение этой проблемы можно использовать прерывания, которые формирует аппаратный таймер и который работает независимо от функционирования центрального процессора. Одно из решений задачи, контроллер занимается основной задачей и циклически проверяет флаг который устанавливается когда выполняется прерывание от таймера. Если флаг установлен выполняется процедура “мигания” светодиодами Если нет выполняется основная задача.
Основные различия от предыдущего проекта это при настройки таймера включение прерывания от таймера 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
Использование прерываний для управления процессами...Это может быть интересно
ch-светомузыка от теории до реализацииViews: 907 Сразу оговоримся технология или теория ch-светомузыки, это постоянно развивающийся процесс и то что будет сказано сегодня завтра может быть опровергнуто и считаться ошибочным. Назовем само решение проблемы автоматического …
HVLD модуль на примере PIC24FJ128GA204Views: 817 HVLD модуль представляет собой простое устройство, для контроля напряжения питания микроконтроллера или внешнего напряжения (через делитель). Его задача при “выходе” напряжения за заданные пределы сформировать сообщение микроконтроллеру, что …
Game, exercise machine – Logic Gates.Views: 11 Game, exercise machine – Logic Gates. A game, a simulator, a gift – the development of logical thinking. The game is designed to develop logical thinking in children, …
The art of DJViews: 242 The art of DJ. The art of DJ has gained wide popularity. Today, a DJ is not just someone whose task is to mix tracks; a DJ is …
Ссылки на интересные источникиViews: 976 Сбор 3D моделей от André L’Hérault конденсаторы, резисторы, индуктивности dropbox IPC-SM-782 Surface Mount Design and Land Pattern Standard Видео уроки по Altium designer Alexey Sabunin https://www.youtube.com/channel/UCG7N5CqXpyK8nQjr1EmMgng Сергей Булавинов https://www.youtube.com/channel/UCISAMXRnN_Qw9UTjUwZI1Jw Robert Feranec https://www.youtube.com/user/matarofe …
Часы + Календарь + Термометр + …Views: 2808 Часы + Календарь + Термометр + Индикатор влажности + Секундомер + Дистанционное управление на ИК лучах (пульты на RC-5 протоколе) + Автоматическая регулировка яркости + Возможность вывода данных через USB, …
Development board based on MCU PIC18F47Q84Views: 2686 PIC18F47Q84 Microcontroller Family with CAN Flexible Data Status: In Production.
Ultrasonic Level Meters – ULM –53LViews: 780 Измерение расстояния при помощи ультра звукового датчика ULM–53L–10. Диапазон измерения от 0,5 м до 10 м, полностью пластмассовый излучатель PVDF, механическое соединение фланцем из полиэтилена HDPE (исполнение “N”) Характеристики …
Проект с использованием MCC часть 10Views: 1056 Алгоритм управления освещением от нажатия кнопки. Обработка удержания кнопки: Мы должны проверить кнопка в настоящий момент нажата и флаг удержания установлен, если да Проверить таймер удержания “отработал” – …
Toyota Auto Fader – Модуль включения усилителяViews: 2077 Toyota Auto Fader – Модуль включения усилителя. Часто автолюбители прибегают к замене штатного головного устройства на универсальное мультимедийное, в котором значительно расширены функциональные возможности. Если возникает желание оставить …