
- •5.4. Организация работы с прерываниями в pic-контроллерах
- •Настройка параметров таймера tmr0 и прерывания по внешнему сигналу на выводе int
- •Работа с внешними портами ввода/вывода
- •5.5. Интегрированная среда разработки прикладного программного обеспечения mplab ide
- •Возможности мрlab ide
- •Порядок создания и отладки прикладной программы в среде mplab ide
- •Запуск mplab ide и структура среды
- •Создание нового проекта
- •Создание текста программы на языке ассемблера
- •Структура программы для pic-контроллеров
- •Компилирование
- •Отладка
5.4. Организация работы с прерываниями в pic-контроллерах
Микроконтроллеры серии PIC16FXX имеют 4 прерывания:
прерывание по переполнению таймера TMR0, прерывание по изменению значения на выводах RB4-RB7, прерывание по окончанию записи в перепрограммируемое постоянное запоминающееся устройство EEPROM, внешнее прерывание по сигналу на выводе INT(RB0).
Для всех прерываний в микроконтроллере зарезервирован 1 вектор прерывания, расположенный по адресу 0x04. Т.е. при срабатывании любого из прерываний программа автоматически перейдет на адрес 0x04 и очистит бит GIE в регистре INTCON, тем самым, запретив все прерывания. Для выхода из прерывания используется команда RETIE, которая возвращает программу на тот адрес, на котором она была в момент возникновения прерывания, и выставляет бит GIE, разрешая прерывания.
За работу прерываний отвечает регистр INTCON. Назначение битов регистра INTCON приведено в табл. 1. Все биты регистра INTCON доступны и для чтения, и для записи. По умолчанию все биты регистра INTCON, кроме RBIF, равны 0. Значение бита RBIF по умолчанию неопределенно. Для того, чтобы обеспечить переход программы на адрес 0x04 при срабатывании того или иного прерывания, следует записать 1 в бит GIE и биты, отвечающие за разрешение конкретных прерываний.
Для того чтобы узнать, какое из прерываний сработало, надо проверить значение флагов прерываний T0IF, INTF, RBIF.
Таблица 1. Назначение битов регистра INTCON
Номер бита |
Название |
Назначение |
7 |
GIE |
Глобальное разрешение или запрещение прерываний; 0 — все прерывания запрещены; 1 - все разрешенные битами EEIE, T0IE, INTE, RBIE прерывания разрешены. |
6 |
EEIE |
Разрешение/запрещение прерывания по окончанию записи в EEPROM; 0(1) - прерывание запрещено (разрешено). |
5 |
T0IE |
Разрешение/запрещение прерывания по переполнению таймера TMR0; 0(1) - прерывание запрещено (разрешено) |
4 |
INTE |
Разрешение/запрещение прерывания по сигналу на выводе INT(RB0); 0(1) - прерывание запрещено (разрешено). |
3 |
RBIE |
Разрешение/запрещение прерывания по изменению значений на выводах RB4-RB7; 0(1) - прерывание запрещено (разрешено). |
2 |
T0IF |
Флаг прерывания по переполнению таймера TMR0; 0 - переполнение таймера не произошло; 1 - таймер переполнен. |
1 |
INTF |
Флаг прерывания по сигналу на выводе INT(RB0); 0 - прерывание не произошло; 1 - прерывание произошло. |
0 |
RBIF |
Флаг прерывания по изменению значений на выводах RB4-RB7; 0(1) - состояние ни одного из выводов RB4-RB7 не изменилось (состояние RB4-RB7 изменилось).
|
После обработки прерываний перед вызовом инструкции RETFIE следует самостоятельно очистить флаги прерываний, тем самым, предотвратив повторное срабатывание прерываний.