MC_PIC (1031647), страница 6
Текст из файла (страница 6)
Когда начинает обрабатываться прерывание, бит GIEобнуляется, чтобы запретить дальнейшие прерывания, адрес возврата посылается в стек, а впрограммный счетчик загружается адрес 0004h. Время реакции на прерывание для внешнихсобытий, таких как прерывание от ножки INT или порта B, составляет приблизительно пятьциклов. Это на один цикл меньше, чем для внутренних событий, таких как прерывание попереполнению от таймера TMR0. Время реакции всегда одинаковое.В подпрограмме обработки прерывания источник прерывания может быть определенпо соответствующему биту в регистре признаков.
Этот флаг-признак должен быть программно сброшен внутри подпрограммы. Признаки запросов прерываний не зависят от соответствующих маскирующих битов и бита общего маскирования GIE.Команда возврата из прерывания RETFIE завершает прерывающую подпрограмму иустанавливает бит GIE, чтобы опять разрешить прерывания.Логика прерываний контроллера изображена на рис. 5.14.Рис. 5.14.
Логика прерываний микроконтроллера.Внешнее прерывание на ножкеRB0/INT осуществляется по фронту: либо понарастающему (если в регистре OPTIONбит INTEDG=1), либо по спадающему (еслиINTEDG=0). Когда фронт обнаруживается наножке INT, бит запроса INTF устанавливается в единицу (INTCON <1>).
Это прерываниеможет быть замаскировано сбросом управляющего бита INTE в ноль (INTCON <4>).Бит запроса INTF необходимо очистить прерывающей программой перед тем, как опять разрешить это прерывание. Прерывание INT может вывести процессор из режима SLEEP, еслиперед входом в этот режим бит INTE был установлен в единицу. Состояние бита GIE такжеопределяет, будет ли процессор переходить на подпрограмму прерывания после выхода изрежима SLEEP.Переполнение счетчика TMR0 (FFh->00h) устанавливает в единицу бит запроса T0IF(INTCON<2>).
Это прерывание может быть разрешено/запрещено установкой/сбросом битамаски T0IE (INTCON<5>). Сброс запроса T0IF – дело программы обработки.Любое изменение сигнала на одном из четырех входов порта RB<7:4> устанавливает в единицу бит RBIF (INTCON<0>). Это прерывание может быть разрешено/запрещено установкой/сбросомбита маски RBIE (INTCON<3>). Сброс запроса RBIF – дело программы обработки.Признак запроса прерывания по завершении записи в EEPROM, EEIF (EECON1<4>)устанавливается в единицу по окончании автоматической записи данных в EEPROM. Этопрерывание может быть замаскировано сбросом бита EEIE (INTCON<6>).
Сброс запросаEEIF – дело программы обработки.5.2.13. Система команд PIC-контроллеров серии PIC16C8XКаждая команда представляет собой 14-разрядное слово, содержащее поле кода операции OPCODE и поле операндов. Система команд включает в себя команды работы с байтами, команды работы с битами, команды управления и операции с константами.Для команд работы с байтами "f" обозначает регистр, с которым производитсядействие, а бит "d" определяет регистр назначения. При "d"=0 результат помещается в регистр W, при "d"=1 результат помещается в регистр "f", заданный в команде.Для команд работы с битами "b" обозначает номер бита, участвющего в команде, а"f" - регистр, в котором этот бит расположен.Для команд управления и операций с константами "k" обозначает 8- или 11битовую константу или идентификатор.Все команды выполняются в течение одного командного цикла, кроме двух случаев:− переход по проверке условия, если результат проверки условия – истина;− изменение счетчика команд как результат выполнения команды.В этих случаях команда выполняется за два цикла с выполнением второго цикла какNOP.
Один командный цикл состоит из четырех периодов генератора. Таким образом, длягенератора с частотой 4 МГц время выполнения команды составит 1 мкс. Если выполняетсяпереход по проверке условия или в результате выполнения команды изменился счетчик команд, время выполнения этой команды при тактовой частоте 4 МГц составит 2 мкс.Принятые обозначенияf:W:b:k:x:Адрес регистраРабочий регистрНомер бита в 8-ми разрядном регистреКонстантаНе используется. Ассемблер формирует код с х=0Регистр назначения:d:d=0 - результат в регистре Wd=1 - результат в регистре f. По умолчанию d=1label: Имя меткиTOS: Вершина стекаРС: Счетчик командТО: Тайм-аутPD: Выключение питанияdest: Регистр назначения: рабочий регистр W или регистр, заданный в команде[]:Необязательные параметры():Содержание-->: Присвоение<>: Битовое полеИз набора∈:ОбозначениеФункцияЦиклыКод командыБиты состоянияПримечанияADDLWСложение константы и W111 111x kkkk kkkkC, DC, ZADDWFСложение W c f100 0111 dfff ffffC, DC, ZANDLWЛогическое И константы и W111 1001 kkkk kkkkZANDWFЛогическое И W и f100 0101 dfff ffffZBCFСброс бита в регистре f101 00bb bfff ffff1, 2BSFУстановка бита в регистре f101 01bb bfff ffff1, 2BTFSCПропустить команду, если бит в f равеннулю1 (2)01 10bb bfff ffff3BTFSSПропустить команду, если бит в f равенединице1 (2)01 11bb bfff ffff3CALLВызов подпрограммы210 0kkk kkkk kkkkCLRFСброс регистра f100 0001 1fff ffffZCLRWСброс регистра W100 0001 0xxx xxxxZCLRWDTСброс сторожевого таймера WDT100 0000 0110 0100__ __TO, PDCOMFИнверсия регистра f100 1001 dfff ffffZ1, 2DECFДекремент регистра f100 0011 dfff ffffZ1, 2DECFSZДекремент f, пропустить команду, если 0 1 (2)00 1011 dfff ffffGOTOПереход по адресу210 1kkk kkkk kkkkINCFИнкремент регистра f100 1010 dfff ffffINCFSZИнкремент f, пропустить команду, если 0 1 (2)00 1111 dfff ffffIORLWЛогическое ИЛИ константы и W11 1000 kkkk kkkkIORWFЛогическое ИЛИ W и f100 0100 dfff ffffZ1, 2MOVFПересылка регистра f100 1000 dfff ffffZ1, 2MOVLWПересылка константы в W111 00xx kkkk kkkkMOVWFПересылка W в f100 0000 1fff ffffNOPХолостая команда100 0000 0xx0 0000OPTIONЗагрузка регистра OPTION100 0000 0110 0010RETFIEВозврат из прерывания200 0000 0000 1001RETLWВозврат из подпрограммы с загрузкойконстанты в W211 01xx kkkk kkkkRETURNВозврат из подпрограммы200 0000 0000 1000RLFСдвиг f влево через перенос100 1101 dfff ffffC1, 2RRFСдвиг f вправо через перенос100 1100 dfff ffffC1, 2SLEEPПереход в режим SLEEP100 0000 0110 0011__ __TO, PDSUBLWВычитание W из константы111 110x kkkk kkkkC, DC, ZSUBWFВычитание W из f100 0010 dfff ffffC, DC, ZSWAPFОбмен местами тетрад вf100 1110 dfff ffffTRISЗагрузка регистра TRIS100 0000 0110 0fffXORLWИсключающее ИЛИ константы и W111 1010 kkkk kkkkXORWFИсключающее ИЛИ W и f100 0110 dfff ffff11, 21, 221, 2, 3Z1, 21, 2, 3Z1, 21, 2Z1, 2Примечание:1.2.3.Если модифицируется регистр ввода/вывода (например, MOVF PORTB,1), то используется значение,считываемое с выводов.
Например, если в выходной защелке порта, включенного на ввод, находится"1", а внешнее устройство формирует на этом выводе "0", то в этом разряде данных будет записан "0".Если операндом команды является содержимое регистра TMRO (и, если допустимо, d=1), то предварительный делитель, если он подключен к TMRO, будет сброшен.Если в результате выполнения команды изменяется счетчик команд, или выполняется переход по проверке условия, то команда выполняется за два цикла. Второй цикл выплняется как NOP..