![]() | |
НПО Системы Безопасности (499)340-94-73 График работы: ПН-ПТ: 10:00-19:00 СБ-ВС: выходной ![]() ![]() |
Главная » Периодика » Безопасность 0 ... 135136137138139140141 ... 159 Обратите внимание, что метки в операторах ассемблера не имеют двоеточия и применяется обычный для ассемблера индикатор комментария - точка с запятой (,). Обработка прерываний в PicBasic осуществляется двумя способами. Наиболее простой способ заключается в использовании оператора ON INTERRUPT GOTO Label. В этом случае каждый раз при получении запроса на прерывание реализуется переход к метке Label, указанной в операторе ON INTERRUPT GOTO, и выполняется соответствующая программа до оператора resume, который выводит микроконтроллер из прерывания. Здесь можно обойтись без команд ассемблера. Основная операция выглядит следующим образом: ON INTERRUPT GOTO IntHandler IntHandler disable Запрещение прерываний Обработка прерывания enable Разрешение других прерываний resume Возврат к исходному коду Однако при использовании этого метода возникает проблема: программа обработки прерываний запускается, когда завершается исполнение текущего оператора. Поэтому при выполнении очень длинного оператора (например, при пересылке последовательного кода) прерывание может не произойти в требуемый срок. Оптимальным способом для обработки прерываний является применение ассемблера. Ниже для обозначения упомянутого обработчика служит директива define INTHAND Label, указывающая метку, по которой располагается код ассемблера. В случае микроконтроллеров среднего подсемейства вектор обработки прерываний находится по адресу 0x004. Шаблон программ обработки прерываний для PIC-микроконтроллеров среднего подсемейства выглядит следующим образом: int w var byte 0x020 system Определение регистров int fsr var byte 0x021 system сохранения контекста int pclath var byte 0x022 system Variables int status var byte bankO system int fsr var byte bankO system int pclath var byte bankO system define INTHANDLER IntHandler Спецификация прерывания Сохранение контекстных регистров. Банк 0. Программа обработки прерываний с вектором по адресу 0x00004. asm IntHandler movwf int w movf STATUS, w bcf STATUS, RPO bcf STATUS, RP1 movwf int Btatus movf FSR, w movwf int fsr movf PCLATH, w raovwf int pclath clrf PCLATH ; ### - В этом месте располагается подпрограмма обработки ; прерываний. movf movwf movf movwf movf movwf swapf swapf retfie endasra int pclath, w PCLATH int fsr, w FSR intstatus, w STATUS int w, f int w, w Прерывание закончено, восстанавливается содержимое регистров контекста. Обратите внимание, что в шаблоне показано сохранение содер-.жимого регистров контекста в максимальном составе. Математические операторы, используемые в операторах присваивания и командах PicBasic, очень просты и работают совершенно стандартным образом. Необходимо напомнить, что в Basic Stamp PBASIC операции выполняются слева направо; например, оператор А = В + С X D, как и ожидается, должен выполняться в следующем порядке: 1. Умножить С на D. 2. Прибавить полученный результат к В. В случае Parallax PBASIC значение А получается следующим образом: 1. Сложить В и С. 2. Умножить полученный результат на D. PicBasic следует обычным правилам вычисления, поэтому отпадает необходимость разбивать упомянутые сложные операторы на одиночные операции, как это происходит в PBASIC. При «переводе» приложения PicBasic в Basic Stamp нужно разделить сложные операторы и использовать временные величины. В табл. 15.15 представлены математические операторы, приоритет их выполнения и параметры. Все математические операторы работают с 16-разрядными величинами. 1аблица 15.15 Математические операторы
0 ... 135136137138139140141 ... 159 |