Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
mIKROPROTsESSORY / LABMP_ALL_2013.doc
Скачиваний:
75
Добавлен:
09.04.2015
Размер:
2.25 Mб
Скачать

Лабораторная работа № 5 Исследование таймеров-счетчиков и системы прерывания оэвм

Цель работы: Изучить принцип работы таймеров-счетчиков ОЭВМ семейства MCS-51, их режимы работы и способы использования. Исследовать принцип действия системы прерывания ОЭВМ в реальном времени.

3.1. Основные теоретические сведения

ОЭВМ семейства MCS-51 и в частности микро-ЭВМ PCF80C552 содержит два идентичных 16-разрядных таймера-счетчика, которые могут работать двумя основными способами:

  • Режим таймера, когда сигнал на вход таймера подается с внутреннего тактового генератора ОЭВМ.

  • Режим счетчика событий, когда сигнал подается извне на входы Т0 (для таймера 1 – на вход Т1).

Подробная информация о работе таймеров и их режимах приведена в [2]. В настоящем разделе приводится только самая необходимая информация, чтобы можно было выполнить домашнее и лабораторное задание.

3.1.1. Использование таймера для осуществления программной задержки

В способе таймера на счетчики подается сигнал с внутреннего тактового генератора ОЭВМ. Его частота определяется частотой кварцевого резонатора, подключенного к выводам ОЭВМ. Для наиболее общего случая, когда частота кварца равна 12 МГц, частота сигнала, подаваемая на таймер равна 1 МГц, или период сигнала соответствует 1 мкс.

Основное использование таймера при этом способе – организация точной и длительной временной задержки выполнения каких-либо действий системы. Каждый импульс длительностью 1 мкс увеличивает содержимое регистров таймера на 1.

Для осуществления задержки целесообразно установить 1 режим работы таймера (как описано в [2], таймер может работать в четырех различных режимах). При этом два 8-разрядных регистра таймера – старший (обозначаемый как TH0 или TH1) и младший (обозначаемый как TL0 или TL1) соединены последовательно и образуют единый 16-разрядный регистр-счетчик.

Принцип действия задержки с помощью таймера достаточно прост: в регистры таймера загружают определенное число, которое и определяет величину задержки, затем запускают таймер на счет и спустя некоторое время он достигает переполнения (т.е. момента, когда его значение переходит с 0FFFFH в 0000H). При этом устанавливается специальный флаг в специальном регистре и вырабатывается прерывание по переполнению таймера, если оно разрешено. Таким образом, время задержки по существу, прямо пропорционально значению, записанному в регистры таймера. При периоде входных импульсов в 1 мкс максимальное время задержки составляет 65535 мкс (время счета от 0000Н до 0FFFFH).

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

mov th0,#high(not (Tз-1))

mov tl0,#low(not(Tз-1))

где оператор high – функция выделения старшего байта из двухбайтного числа, оператор low - функция выделения младшего байта из двухбайтного числа, not – оператор дополнения до числа 0FFFFH, Тз - требуемое время задержки в мкс. Например, для получения задержки 50 мс надо написать следующие операторы:

mov th0,#high(not (50000-1))

mov tl0,#low(not(50000-1))

Ассемблер сам вычислит конкретные загружаемые в регистры значения.

Для получения времен задержки, больших 65535 мкс, надо использовать очень распространенный прием – накапливать в каком-либо регистре число прерываний таймера по 50 мс. Например, для задержки в 1 с надо накапливать 20 таких событий.

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

Соседние файлы в папке mIKROPROTsESSORY