В микроконтроллерах расширенного семейства каждому источнику прерывания сопоставлено три бита[190]. Так, у модуля АЦП имеется флаг прерывания ADIF (PIR1 [6]) для индикации запроса прерывания, бит маски ADIE (Р1Е[6]) для разрешения прерывания от этого источника, а также бит приоритета ADIP (IPR1 [6]), определяющий приоритет прерывания от данного источника: ADIP = 1 — высокий приоритет (состояние после сброса по питанию), ADIP = 0 — низкий приоритет.
При возникновении запроса прерывания от источника с низким приоритетом, происходит переход по
При переходе к соответствующему вектору прерывания содержимое счетчика команд помещается на вершину стека, как и в семействе среднего уровня. Помимо этого, в трех скрытых регистрах, называемых иногда
Необходимо очень аккуратно использовать этот механизм быстрого сохранения/восстановления контекста, поскольку в быстром стеке может храниться только одна копия этих системных регистров. Если запрос прерывания с высоким приоритетом прервет выполнение обработчика прерывания с низким приоритетом, то содержимое быстрого стека будет перезаписано новыми значениями! Поэтому при наличии в программе прерываний с разными приоритетами команда retfie FAST должна использоваться только в обработчиках прерываний с высоким приоритетом. Если же прерывания в программе вообще не используются, то быстрый стек можно использовать для сохранения контекста при вызове обычных подпрограмм. Так, по команде call FAST происходит вызов подпрограммы с одновременным сохранением контекста, а по команде return FAST — возврат из подпрограммы с восстановлением контекста.
В трех регистрах INTCON хранятся флаги прерываний, биты маски и приоритета для прерывания от Таймера 0, прерывания по изменению состояния порта В и трех внешних прерываний. Управление остальными прерываниями осуществляется с помощью регистров PIR1:2, РIЕ1:2 и IRP1:2. При включении питания схема обработки прерываний работает так же, как и неприоритетная схема среднего семейства, т. е. состояние битов приоритета игнорируется. Кроме того, для разрешения работы приоритетной системы прерываний должен быть установлен в 1 бит IPEN регистра управления сбросом RCON (RCON[7]).
В Табл. 16.1 перечислены все 75 команд, поддерживаемые ядром PIC18. Сравнивая эту таблицу с приведенной в Приложении Г, можно заметить, что сохранились все предыдущие команды, за исключением команды clrw. Эта команда стала избыточной, поскольку рабочий регистр теперь может обрабатываться как обыкновенный регистр данных и, соответственно, его сброс может быть осуществлен командой clrf WREG. Также была расширена функциональность ряда старых команд, например, в части воздействия на флаги отрицательного значения (N) и переполнения (OV). У нескольких команд появились расширенные варианты; например, команда addwfс прибавляет содержимое рабочего регистра к указанному регистру данных с учетом переноса (см. Программу 16.2).
Условные обозначения: