PIC и mikroPascal

Паскаль для микроконтроллеров PIC. Часть 3.

mikroPascalРазработчики компиляторов часто стремятся обеспечить своих пользователей дополнительными функциями, существенно упрощающими создание программ. Такой подход приводит к возникновению некоторых недостатков, связанных с отступлением от стандартов и плохой переносимостью кода. Но они частично  компенсируются ускорением разработки кода.

Задержки.

Организация временных задержек работы – одна из наиболее часто встречающихся операций при программировании микроконтроллеров. Главной проблемой этой задачи становится сложность точного подбора временного интервала. В 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.

 

You have no rights to post comments