Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
мпс с 1 по 294.doc
Скачиваний:
13
Добавлен:
16.04.2019
Размер:
6.2 Mб
Скачать

4.1.6. Таймеры и процессоры событий

Опыт построения МП-систем позволяет выделить типовые задачи, которые должен уметь решать МК для эффективного управления в реальном времени:

отсчет равных интервалов времени заданной длительности, повтор алгоритма управления по истечении каждого такого временного интервала; обычно эту функцию назы­вают формированием меток реального времени.

  • контроль за изменением состояния линии ввода МК;

  • измерение длительности сигнала заданного логического уровня на линии ввода МК;

  • подсчет числа импульсов внешнего сигнала на заданном временном интервале;

  • формирование на линии вывода МК сигнала заданного логического уровня с программируемой задержкой по отношению к изменению сигнала на линии ввода;

формирование на линии вывода МК импульсного сигнала с программируемой часто­ той и программируемым коэффициентом заполнения.

Каждая из перечисленных задач в отдельности может быть выполнена только про­граммными средствами, без использования специальных аппаратных решений. Так, для формирования интервала времени следует загрузить в регистр центрального процес­сора число, а затем выполнять команду декрементирования этого регистра до тех пор, пока содержимое регистра не станет равным нулю. Похожие решения можно предло­жить и для остальных перечисленных задач. Однако все эти решения будут обладать общим недостатком: невозможностью выполнения вычислений одновременно с отсче­том временного интервала. Поэтому для выполнения функций, связанных с управлени­ем в реальном времени, в состав МК включают специальные аппаратные средства, кото­рые называют таймером.

В процессе развития модули таймеров в составе 8-разрядных МК непрерывно совер­шенствовались. Рассмотрим принцип действия одного из первых модулей, который вхо­дит в состав МК 8051 АН фирмы «Intel».

Таймер представляет собой 16-разрядный счетчик со схемой управления (рис. 4.7). 8 карте памяти МК счетчик отображается двумя регистрами: ТН — старший байт счетчи­ка, TL - младший байт. Регистры доступны для чтения и для записи. Направление сче­та счетчика - только прямое, т. е. при поступлении тактовых импульсов десятичный эквивалент двоичного кода счетчика изменяется в сторону увеличения. В зависимости от программных настроек счетчик может использовать один из двух источников такти­рования:

  1. Импульсную последовательность с выхода управляемого делителя частоты fBijs;

  2. Внешнюю импульсную последовательность, поступающую на один из входов мк.

В первом случае говорят, что счетчик работает в режиме таймера, во втором — в режиме счетчика событий. При переполнении счетчика устанавливается триггер переполнения TF, который генерирует запрос на прерывание, если прерывания от тай­мера разрешены. После переполнения работа счетчика продолжается. Последователь­ность изменения кодов следующая: $FF, $00, $01 и т. д. Пуск и останов счетчика могут выполняться только под управлением программы посредством установки/сброса соот­ветствующего бита. Программа также может установить старший ТН и младший TL бай­ты счетчика в произвольное состояние или прочитать текущий код счетчика. Однако эти операции не следует выполнять в процессе счета, так как длительность операции чте­ния или записи может превысить длительность периода частоты тактирования счет­чика. Тогда за время чтения одного из байтов второй успеет измениться. В результате будет прочитана недостоверная информация. По этой же причине может оказаться ошибочной операция записи. Например, пользователь записывает в регистры счетчика код $0005: сначала старший байт $00, а затем младший - $05. Если текущее состояние

счетчика пользователю неизвестно, то может оказаться, что на момент завершения опе­рации записи старшего байта младший равен $FF.

Тогда в процессе записи младшего байта старший, ранее записанный, успеет изме­ниться, и конечный код счетчика будет равен $0105.

Если рассмотренный таймер используется для измерения временного интервала 1ИЗМ (рис. 4.8), то необходимо выполнить следующую последовательность действий:

  1. прервать выполнение текущей программы при изменении сигнала на линии РТх1 с «О» на «1»; в подпрограмме прерывания установить регистры счетчика таймера в $0000 и разрешить счет;

  2. при изменении сигнала на линии РТх1 с «1» на «О» еще раз прервать выполнение программы МК; в подпрограмме прерывания остановить счет; код в регистрах ТН и TL будет равен длительности интервала tw3M, выраженной числом периодов частоты такти­рования счетчика таймера.

Однако такой способ измерения годится для сигналов, длительность которых со­ставляет единицы мс и более. Моменты разрешения счета таймера t1 и его остановки 12 не совпадают с моментами изменения сигнала на входе РТх1, так как пуск и останов выполняются в подпрограмме прерывания. Ошибка счета равна t1 -12. Каждое из значе­ний t1 и t2 определяется временем перехода МК к выполнению подпрограммы прерыва­ния и временем выполнения некоторого количества инструкций, предшествующих ко­манде разрешения или останова счета таймера. Вторая величина является системати­ческой ошибкой и может быть учтена при выполнении дальнейших расчетов, в то время как первая - время перехода на подпрограмму прерывания - величина случайная, кото­рая зависит от особенностей выполнения программного обеспечения МП системы. Так, если рассматриваемых каналов измерения несколько, и изменение сигналов на входах PTxi произошло одновременно, то в первом из обслуженных по прерыванию каналов ошибка будет минимальной, а в последнем - максимальной. Эта максимальная ошибка может составить несколько десятков микросекунд, поэтому рассмотренный метод не может быть использован для изменения временных интервалов микросекундного диапа­зона. В противном случае точность измерения будет недостаточной. Наряду с задачей измерения временного интервала может возникнуть необходимость одновременного фор­мирования времяимпульсных сигналов по нескольким каналам. Тогда желательно, чтобы МК имел в своем составе несколько таймеров. Увеличение числа модулей тайме­ров, интегрированных на кристалл МК, является объективной тенденцией совершенство­вания структуры современных МК.

Рассмотренный «классический» модуль таймера наиболее часто используется в МК с архитектурой MSC-51. Однако даже в составе основателя семейства МК 8051 АН он претерпел некоторые усовершенствования:

  • дополнительная логика счетного входа позволяет тактовым импульсам поступать на вход счетчика, если уровень сигнала на одной из линий ввода равен 1; это повышает точность измерения временного интервала, так как интервалы t, и 12 теперь не являют­ся составляющими погрешности измерения;

  • реализован режим перезагрузки счетчика произвольным кодом в момент переполне­ния; это позволяет формировать метки реального времени с периодом, отличным от периода полного коэффициента счета, равного 216.

Более подробно режимы работы таймера МК 8051 АН рассмотрены в п. 4.2.6.

Главный недостаток модуля «классического» таймера — невозможность одновремен­ного обслуживания (измерения или формирования импульсного сигнала) сразу в несколь­ких каналах. Совершенствование структуры подсистемы реального времени 8-разрядных МК ведется по двум направлениям: