- •Оглавление
- •4. Таймеры
- •5. Память пик-контроллеров
- •2.1.Регистр status
- •2.2 Регистр option_reg
- •2.3.Регистры pclath и pcl
- •2.4.Косвенная адресация, регистры indf и fsr
- •3.Порты ввода/вывода
- •3.1.Регистры porta и trisa
- •3.2.Регистры portb и trisb
- •3.3.Регистры portс и trisс
- •3.4.Регистры portd и trisd
- •4.1.Модуль таймера tmr0
- •4.2.Модуль таймера tmr1
- •4.3. Модуль таймера tmr2
- •5.1.Организация памяти программ
- •5.2.Организация памяти данных
- •5.3.Eeprom память данных. Flash память программ.
- •5.4. Регистры eecon1, eecon2
- •5.5. Eeprom память данных..
- •6.Аналого-цифровой преобразователь
- •6.1. Регистры ацп
- •6.2.Порядок работы с ацп
- •6.2.1..Выбор источника тактовых импульсов для ацп
- •6.2.2.Настройка аналоговых входов
- •6.2.3.. Аналого-цифровое преобразование
- •6.2.4. Выравнивание результата преобразования
- •7.Прерывания микроконтроллеров
- •7.1.Регистры, используемые системой прерываний.
- •7.2.Внешнее прерывание с входа rb0/int
- •7.5. Сохранение контекста при обработке прерываний
- •8.Система команд
7.1.Регистры, используемые системой прерываний.
7.2.Внешнее прерывание с входа rb0/int
Внешнее прерывание с входа RB0/INT происходит: по переднему фронту сигнала, если бит INTEDG (OPTION_REG<6>) установлен в 1; по заднему фронту сигнала, если бит INTEDG сброшен в 0. Когда активный фронт сигнала появляется на входе RB0/INT бит INTF (INTCON<1>) устанавливается в 1. Прерывание может быть запрещено сбросом бита INTE (INTCON<4>) в 0. Флаг прерывания INTF должен быть сброшен программно в подпрограмме обработки прерываний. Прерывание INT может вывести микроконтроллер из режима SLEEP, если бит INTE=1 до перехода в режим SLEEP. Состояние бита GIE определяет, переходить на подпрограмму обработки прерываний после выхода из режима SLEEP. На рис. Показана временная диаграмма выхода микроконтроллера из режима SLEEP по прерыванию с входа RB0/INT.
7.3.Прерывание по переполнению TMR0
Переполнение таймера TMR0 (FFh → 00h) устанавливает флаг TOIF (INTCON<2>) в 1. Прерывание от TMR0 можно разрешить/запретить установкой /сбросом бита TOIF(INTCON<5>). Описание работы модуля TMR0 приведено ранее.
7.4.Прерывание по изменению уровня сигнала на входах RB7:RB4
Изменение уровня сигнала на входах RB7:RB4 вызывает установку флага RBIF(INTCON<0>). Прерывание можно разрешить/запретить установкой/сбросом бита RBIE(INTCON<4>).
7.5. Сохранение контекста при обработке прерываний
При переходе на подпрограмму обработки прерываний в стеке сохраняется только адрес возврата. Как правило, необходимо сохранять значения ключевых регистров при обработке прерываний (например, регистр W и STATUS), что выполняется программным способом.
Для PIC16F873/874 регистр W_TEMP должен быть определен в обоих банках (0,1) с одинаковым смещением относительно базового адреса банка (т.е. если регистр W_TEMP определен в банке 0 с адресом 0х20, то он должен быть определен в банке 1 с адресом 0хА0). Регистры PCLATH_TEMP и STATUS_TEMP могут быть определены только в одном банке.
Так как старшие 16 байт каждого банка микроконтроллеров PIC16F876/877 доступны во всех банках, то регистры STATUS_TEMP, PCLATH_TEMP и W_TEMP могут быть размещены в этой области. Ниже приведен текс сохранения контекста.
Если допускаются вложения прерывания, то необходимо иметь маску приоритетов с программной установкой. Это позволяет изменить приоритет прерываний, разрешаемых при выполнение подпрограммы обслуживания. Регистр маски считается портом ввода/вывода и в него можно записывать 3-х битную маску с помощью команды вывода.
8.Система команд
Каждая команда микроконтроллера PIC16F87X состоит из одного 14-разрядного слова, разделенного на код операции (OPCODE), определяющий тип команды и один или несколько операндов, определяющие операцию команды. Команды разделены на следующие группы: байт ориентированные команды, бит ориентированные команды, команды управления и операций с константами. Описание полей команд, и формат команд приведены в таблице и на рис.8.1.
Рис.8.1. Описание полей команд и формат команд.
Для байт ориентированных команд "f" является указателем регистра, а "d" указателем адресата результата. Указатель регистра определяет, какой регистр должен использоваться в команде. Указатель адресата определяет, где будет сохранен результат. Если "d"=0, результат сохраняется в регистре W. Если "d"=1, результат сохраняется в регистре, который используется в команде.
В бит ориентированных командах "b" определяет номер бита, участвующего в операции, а "f" – указатель регистра, который содержит этот бит.
В командах управления или операциях с константами "k" представляет восемь или одиннадцать бит константы или значения литералов.
Все команды выполняются за один машинный цикл, кроме команд условия, в которых получен истинный результат и инструкций изменяющих значение счетчика команд РС. В случае выполнения команды за два машинных цикла, во втором цикле выполняется инструкция NOP. Один машинный цикл состоит из четырех тактов генератора. Для тактового генератора с частотой 4 МГц все команды выполняются за 1 мкс, если условия истинно или изменяется счетчик команд РС, команда выполняется за 2 мкс.