Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ВССиТ / МУ-Программирование устройств-ПЗ.docx
Скачиваний:
52
Добавлен:
28.03.2015
Размер:
243.95 Кб
Скачать

4.5 Управление таймером

Согласно /5/, все IBM PC используют микросхему таймера 8253 (или 8254) для согласования импульсов от микросхемы системных часов. Число циклов системных часов преобразуется в один импульс, а последовательность импульсов подсчитывается для определения времени или импульсы могут быть посланы на громкоговоритель компьютера для генерации звука определённой частоты. Данная микросхема имеет 3 независимых канала (0, 1, 2), каждый из которых может программироваться. Доступ к каналам осуществляется через порты 40h, 41h, 42h, соответственно.

Канал 0 используется системными часами времени суток. Он устанавливается BIOS при старте таким образом, что выдаёт импульсы приблизительно 18,2 раза в секунду. Каждый импульс инициирует прерывание таймера, что увеличивает показание счётчика. Число 0 соответствует полночи 12:00; когда счётчик достигает значения, эквивалентного 24 часам, он сбрасывается в 0. Другое времени в течение суток определяется делением показателя счётчика на 18,2 для каждой секунды.

Канал 1 управляет обновлением памяти, поэтому его лучше не трогать.

Канал 2 связан с громкоговорителем компьютера, и он производит простые прямоугольные импульсы для генерации звука.

4.5.1 Работа со счётчиком времени суток

1) Чтение/ установка времени /3-5/.

MS DOS предоставляет прерывания для чтения и установки времени, производя необходимые преобразования между значением счётчика времени суток и часами- минутами- секундами. Время выдаётся с точностью до одной сотой секунды, но, поскольку счётчик обновляется с частотой в 5 раз меньшей, то показания сотых долей очень приближённые.

1.1) Функция 2Ch (пересылается в AH) прерывания 21h позволяет прочитать текущее время системных часов. При этом в регистре CH возвращаются часы (в диапазоне 0-23), в CL – минуты (0-59), в DH – секунды (0-59), в DL – сотые доли секунды (0-59), в AL – номер дня недели (0-6, 0 – воскресенье). День недели будет возвращён верно, если была установлена дата.

1.2) Функция 2Dh (пересылается в AH) прерывания 21h позволяет установить новое время системных часов. При этом в регистр CH помещаются часы (в диапазоне 0-23), в CL – минуты (0-59), в DH – секунды (0-59), в DL – сотые доли секунды (0-59).

Если при установке времени ошибок не возникло, то в регистре AL возвращается 0, в противном случае - значение FF.

2) Чтение/ установка даты /3-5/.

Значение даты хранится в переменной файла COMMAND.COM. Она хранится в формате трёх последовательных байтов, которые содержат день месяца, номер месяца и год месяца (0 соответствует 1980 году).

2.1) Функция 2Ah (пересылается в AH) прерывания 21h позволяет прочитать текущую дату. При возврате в регистре CX содержится год в диапазоне от 0 до 59, что соответствует годам в интервале от 1980 до 2099. Регистр DH  содержит номер месяца (1-12), в DL - день (1-31).

2.2) Функция 2Dh (пересылается в AH) прерывания 21h позволяет установить новую дату. При этом в регистр CX помещается год (в диапазоне 0-119), в DH – номер месяца (1-12), в DL – день (1-31).

Если при установке даты ошибок не возникло, то в регистре AL возвращается 0, в противном случае - значение FF.

3) Задержка программных операций /3-5/.

При реализации задержки в программе посредством пустого цикла может потребоваться много времени для того, чтобы добиться нужного времени задержки. Длительность цикла может меняться в зависимости от применяемого компилятора. Поэтому целесообразно определять время непосредственно по часам. Чтобы обеспечить задержку данной продолжительности, программа должна подсчитать требуемое количество импульсов счётчика времени суток. Например, если необходимо организовать задержку на 5 секунд, то число импульсов счётчика составит импульсу. Это значение добавляется к считанному текущему значению счётчика. Затем программа постоянно считывает значение счётчика и сравнивает его с запомненным. При достижении равенства задержка считается выполненной.

Значение счётчика времени суток хранится в 4-х байтах. Два младших байта позволяют осуществлять задержки до одного часа.

Функция 0h (пересылается в AH) прерывания 1Ah позволяет прочитать текущее значение счётчика времени суток (в импульсах). При возврате в регистре DX содержатся 2 младших байтах, в регистре CX – 2 старших байта. Для задержек в пределах одного часа старшие байты можно игнорировать и работать только с регистром DX.