PIC и mikroPascal
Паскаль для микроконтроллеров PIC. Часть 3.
Разработчики компиляторов часто стремятся обеспечить своих пользователей дополнительными функциями, существенно упрощающими создание программ. Такой подход приводит к возникновению некоторых недостатков, связанных с отступлением от стандартов и плохой переносимостью кода. Но они частично компенсируются ускорением разработки кода.
Задержки.
Организация временных задержек работы – одна из наиболее часто встречающихся операций при программировании микроконтроллеров. Главной проблемой этой задачи становится сложность точного подбора временного интервала. В mikroPascal задача частично решена введением процедур задержки на требуемое число микро- и миллисекунд. Вызов этих процедур имеет вид:
procedure Delay_us(time_in_us: const dword);
procedure Delay_ms(time_in_ms: const dword);
Где, time_in_us и time_in_ms – время задержки в микросекундах и миллисекундах соответственно.
Ассемблерный код процедур задержки представляет собой пустой цикл. Количество повторов рассчитывается на основе тактовой частоты процессора, заданной в настройках проекта. Такой подход не гарантирует точного отсчета временного интервала при использовании прерываний или неправильно указанной частоты.
Процедуры Delay_us, Delay_ms относятся к встроенному (built-in) типу. Это значит, что при каждом их вызове компилятор будет вставлять соответствующий фрагмент кода. Альтернативой вариантом могут стать процедуры Vdelay_ms, VDelay_Advanced_ms, Delay_Cyc. Они не обеспечивают столь высокой точности как предыдущие, но представляют собой библиотечные функции, организованные как подрограммы.
procedure Vdelay_ms(time_in_ms : word); //Задержка на time_in_ms микросекунд
procedure VDelay_Advanced_ms(time_ms, Current_Fosc_kHz: word); //Задержка на time_ms микросекунд, для частоты генератора Current_Fosc_kHz.
procedure Delay_Cyc(Cycles_div_by_10 : byte) //Задержка на несколько циклов тактовой частоты.
Параметр Cycles_div_by_10 задает количество тактов задержки деленное на 10. Может принимать значение между 2 и 257.
Прерывания
Управляющая программа микроконтроллера не мыслима без прерываний. Данный механизм позволяет реализовать обработку нужных событий в системе, и при этом не усложнять основную программу.
В среде mikroPascal для обработки прерываний используется процедура interrupt(). При возникновении какого-либо разрешенного события процедура вызывается автоматически. Настройка прерываний выполняется стандартным способом - старший бит регистра INTCON устанавливается в 1, таким же образом разрешаются отдельные источники прерываний.
При вызове обработчика прерывания происходит сохранение аккумулятора W, регистра состояния STATUS, и программного счетчика PCLATH. Соответственно после завершения работы процедуры, содержимое регистров восстанавливается. На этом все автоматические действия заканчиваются. Определение источника прерывания и все остальные необходимые операции, программист должен сформировать самостоятельно.
Еще по теме:
Среда программрования microPascal Pro for PIC.
Паскаль для микроконтроллеров PIC. Часть 1.
Паскаль для микроконтроллеров PIC. Часть 2.