Системное программное обеспечение персональных ЭВМ


Пример 6 - часть 3


В этом случае приходится перепрограммировать канал 0 таймера. Вспомним, что при загрузке BIOS записывает в делитель частоты этого канала максимальное число - 65535. Уменьшая данное число, мы обеспечим большую частоту следования прерывания 8, укоротим тик таймера. Однако, не следует забывать, что прерывания таймера используются системной службой времени, если мы увеличим частоту, например, в 4 раза, то и время для системы пойдет в 4 раза быстрее. Возможны два подхода к разрешению этой трудности: либо наш обработчик прерываний должен сам модифицировать системный счетчик времени в соответствии с изменившейся частотой, либо он должен вызывать системный обработчик не при каждом прерывании.

Программа примера 6.6 может быть названа моделью процесса аналого-цифрового преобразования (идея этой модели принадлежит В.П.Полтавцеву). Главная функция постоянно вычисляет значение функции sin(x) при меняющемся аргументе, что имитирует непрерывный сигнал. Обработчик прерывания 8 имитирует преобразователь с постоянным шагом временной дискретизации. Перед началом работы канал 0 таймера программируется на частоту в 16 раз больше обычной, таким образом, "частота дискретизации" составит около 291.2 гц. При поступлении очередного прерывания запоминается актуальное на данный момент значение sin(x). Обратите внимание на то, что вопервых, старый обработчик oldtime вызывается не при каждом прерывании, а лишь один раз из 16 (переменная kf - счетчик по модулю 16), во-вторых, на то, что в случаях, когда oldtime не вызывается, наш обработчик сам сбрасывает контроллер прерываний. После набора 100 "отсчетов АЦП" результат выводится на терминал в наглядном псевдографическом виде.




- Начало -  - Назад -  - Вперед -